Module:ClangDiags/DiagsLongData0: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
local a="";
local a="";
local b="regex3";
local b="message";
local c="prefix";
local c="commit";
local d="commit";
local d="category";
local e="type";
local e="regex3";
local f="title";
local f="regex2";
local g="message";
local g="regex1";
local h="category";
local h="title";
local i="regex1";
local i="type";
local j="regex2";
local j="prefix";
local k="source";
local k="source";
local l="error: ";
local l="(?:error|fatal error)\\: ";
local m="(?:error|fatal error)\\: ";
local m="Error";
local n="Error";
local n="error: ";
local o="Semantic Issue";
local o="tests2";
local p="clang/lib/Sema/SemaDeclAttr.cpp";
local p="Semantic Issue";
local q="clang/lib/Sema/SemaDecl.cpp";
local q="clang/lib/Sema/SemaDeclAttr.cpp";
local r="clang/lib/Sema/SemaType.cpp";
local r="clang/lib/Sema/SemaDecl.cpp";
local s="clang/lib/Sema/SemaChecking.cpp";
local s="clang/lib/Sema/SemaType.cpp";
local t="Update tablegen diagnostic files to be in sync with the def files.";
local t="clang/lib/Sema/SemaChecking.cpp";
local u="5a8987ca5113";
local u="Update tablegen diagnostic files to be in sync with the def files.";
local v="clang/lib/Sema/SemaDeclCXX.cpp";
local v="5a8987ca5113";
local w="clang/lib/Sema/SemaCast.cpp";
local w="clang/lib/Sema/SemaDeclCXX.cpp";
local x="clang/lib/Sema/SemaExprCXX.cpp";
local x="clang/lib/Sema/SemaCast.cpp";
local y="clang/lib/Sema/SemaExpr.cpp";
local y="clang/lib/Sema/SemaExprCXX.cpp";
local z="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local z="clang/lib/Sema/SemaExpr.cpp";
local A="b1c4d5507fad";
local A="Parse Issue";
local B="Parse Issue";
local B="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local C="Inline Assembly Issue";
local C="b1c4d5507fad";
local D="clang/lib/Parse/ParseDecl.cpp";
local D="Inline Assembly Issue";
local E="clang/lib/Sema/SemaInit.cpp";
local E="clang/lib/Parse/ParseDecl.cpp";
local F="clang/lib/Sema/SemaStmtAsm.cpp";
local F="clang/lib/Sema/SemaExprObjC.cpp";
local G="clang/lib/Sema/SemaExprObjC.cpp";
local G="clang/lib/Sema/SemaStmtAsm.cpp";
local H="31168b077c36";
local H="clang/lib/Sema/SemaInit.cpp";
local I="clang/lib/Sema/SemaDeclObjC.cpp";
local I="Automatic Reference Counting.";
local J="Automatic Reference Counting.";
local J="31168b077c36";
local K="clang/lib/Parse/ParseDeclCXX.cpp";
local K="clang/lib/Sema/SemaDeclObjC.cpp";
local L="ARC Semantic Issue";
local L="clang/lib/Parse/ParseDeclCXX.cpp";
local M="Implement P2361 Unevaluated string literals";
local M="ARC Semantic Issue";
local N="95f50964fbf5";
local N="95f50964fbf5";
local O="clang/lib/Frontend/CompilerInvocation.cpp";
local O="Implement P2361 Unevaluated string literals";
local P="clang/lib/Sema/SemaObjCProperty.cpp";
local P="clang/lib/Frontend/CompilerInvocation.cpp";
local Q="clang/lib/Sema/SemaOverload.cpp";
local Q="clang/test/Sema/asm.c";
local R="clang/lib/Sema/SemaStmt.cpp";
local R="clang/lib/Sema/SemaObjCProperty.cpp";
local S="clang/lib/Sema/SemaAccess.cpp";
local S="clang/lib/Sema/SemaStmt.cpp";
local T="14f6bfcb52e7";
local T="clang/lib/Sema/SemaOverload.cpp";
local U="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local U="14f6bfcb52e7";
local V="[WebAssembly] Improve clang diagnostics for wasm attributes";
local V="clang/lib/Sema/SemaAccess.cpp";
local W="931fcd3ba011";
local W="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local X="clang/lib/ARCMigrate/TransProperties.cpp";
local X="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Y="Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...";
local Y="931fcd3ba011";
local Z="cff00d9c127c";
local Z="clang/lib/ARCMigrate/TransProperties.cpp";
local ab="eb3c10c248ac";
local ab="cff00d9c127c";
local bb="constexpr: semantic checking for constexpr functions and constructors. Based in";
local bb="Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...";
local cb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local cb="f9c3310d32c6";
local db="f9c3310d32c6";
local db="clang/lib/ARCMigrate/TransUnbridgedCasts.cpp";
local eb="Let clang atomic builtins fetch add/sub support floating point types";
local eb="eb3c10c248ac";
local fb="61d065e21ff3";
local fb="61d065e21ff3";
local gb="Lexical or Preprocessor Issue";
local gb="Let clang atomic builtins fetch add/sub support floating point types";
local hb="clang/lib/ARCMigrate/TransUnbridgedCasts.cpp";
local hb="constexpr: semantic checking for constexpr functions and constructors. Based in";
local ib="2a7d481faf54";
local ib="Lexical or Preprocessor Issue";
local jb="ARC Restrictions";
local jb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local kb="clang/lib/Parse/ParseExpr.cpp";
local kb="ARC Restrictions";
local lb="clang/lib/Sema/SemaLambda.cpp";
local lb="clang/lib/Sema/SemaLambda.cpp";
local mb="Emit !callback metadata and introduce the callback attribute";
local mb="clang/lib/Parse/ParseExpr.cpp";
local nb="ac991bbb4456";
local nb="2a7d481faf54";
local ob="clang/lib/AST/Stmt.cpp";
local ob="clang/lib/AST/Stmt.cpp";
local pb="Implement most of N3638 (return type deduction for normal functions).";
local pb="clang/test/Sema/builtins.c";
local qb="1064d7ef2992";
local qb="ac991bbb4456";
local rb="AMDGPU: Teach toolchain to link rocm device libs";
local rb="clang/test/SemaCXX/dynamic-cast.cpp";
local sb="Perform access control for the implicit base and member destructor calls";
local sb="Emit !callback metadata and introduce the callback attribute";
local tb="4593e4131aff";
local tb="Implement most of N3638 (return type deduction for normal functions).";
local ub="f881267db9a9";
local ub="clang/test/SemaObjC/arc.m";
local vb="Implement the C++0x deduced \'auto\' feature.";
local vb="Mass-rename the handful of error_* diagnostics to err_*.";
local wb="30482bc78659";
local wb="clang/test/Parser/cxx2a-concept-declaration.cpp";
local xb="clang/lib/Sema/SemaTemplateDeduction.cpp";
local xb="clang/test/Sema/attr-callback-broken.c";
local yb="Mass-rename the handful of error_* diagnostics to err_*.";
local yb="clang/lib/Lex/Lexer.cpp";
local zb="clang/lib/Lex/Lexer.cpp";
local zb="f881267db9a9";
local Ab="ARC Weak References";
local Ab="1064d7ef2992";
local Bb="fatal error\\: ";
local Bb="Perform access control for the implicit base and member destructor calls";
local Cb="clang/lib/Sema/SemaTemplate.cpp";
local Cb="Implement the C++0x deduced \'auto\' feature.";
local Db="[ObjC] Implement @available in the Parser and AST";
local Db="clang/test/SemaCXX/conversion-function.cpp";
local Eb="Fatal";
local Eb="ARC Weak References";
local Fb="fatal error: ";
local Fb="AMDGPU: Teach toolchain to link rocm device libs";
local Gb="29099ded0c15";
local Gb="clang/lib/Sema/SemaTemplateDeduction.cpp";
local Hb="clang/lib/Parse/ParseTemplate.cpp";
local Hb="4593e4131aff";
local Ib="clang/lib/Lex/Pragma.cpp";
local Ib="30482bc78659";
local Jb="clang/lib/Parse/Parser.cpp";
local Jb="clang/lib/Lex/Pragma.cpp";
local Kb="Reland [clang] Check unsupported types in expressions";
local Kb="3dbcea8b957a";
local Lb="3dbcea8b957a";
local Lb="clang/test/ARCMT/checking.m";
local Mb="Reland [clang] Check unsupported types in expressions";
local Nb="29099ded0c15";
local Ob="clang/lib/Sema/SemaTemplate.cpp";
local Pb="clang/lib/Parse/ParseTemplate.cpp";
local Qb="[ObjC] Implement @available in the Parser and AST";
local Rb="Fatal";
local Sb="clang/lib/Parse/Parser.cpp";
local Tb="fatal error\\: ";
local Ub="fatal error: ";


return {
return {
["backslash_newline_space"]={
["backslash_newline_space"]={
[f]="backslash and newline separated by space [-Wbackslash-newline-escape]",
[h]="backslash and newline separated by space [-Wbackslash-newline-escape]",
[c]="warning: ",
[j]="warning: ",
[e]="Warning",
[i]="Warning",
["groups"]={"backslash-newline-escape"},
["groups"]={"backslash-newline-escape"},
["maingroup"]="backslash-newline-escape",
["maingroup"]="backslash-newline-escape",
[g]="backslash and newline separated by space",
[b]="backslash and newline separated by space",
[i]="(?:warning|error|fatal error)\\: ",
[g]="(?:warning|error|fatal error)\\: ",
[j]="backslash and newline separated by space",
[f]="backslash and newline separated by space",
[b]=" \\[(?:\\-Werror,)?\\-Wbackslash\\-newline\\-escape[^\\]]*\\]",
[e]=" \\[(?:\\-Werror,)?\\-Wbackslash\\-newline\\-escape[^\\]]*\\]",
[h]=gb,
[d]=ib,
[d]={A,1236199783,z},
[c]={C,1236199783,B},
[k]={{zb,1359,"/// getCharAndSizeSlow - Peek a single \'character\' from the specified buffer,\n/// get its size, and return it.  This is tricky in several cases:\n///  1. If currently at the start of a trigraph, we warn about the trigraph,\n///      then either return the trigraph (skipping 3 chars) or the \'?\',\n///      depending on whether trigraphs are enabled or not.\n///  2. If this is an escaped newline (potentially with whitespace between\n///      the backslash and newline), implicitly skip the newline and return\n///      the char after it.\n///\n/// This handles the slow/uncommon case of the getCharAndSize method.  Here we\n/// know that we can accumulate into Size, and that we have already incremented\n/// Ptr by Size bytes.\n///\n/// NOTE: When this method is updated, getCharAndSizeSlowNoWarn (below) should\n/// be updated to match.\nchar Lexer::getCharAndSizeSlow(const char *Ptr, unsigned &Size, Token *Tok) {\n  Slash:\n    // See if we have optional whitespace characters between the slash and\n    // newline.\n    if (unsigned EscapedNewLineSize = getEscapedNewLineSize(Ptr)) {\n      // Warn if there was whitespace between the backslash and newline.\n      if (Ptr[0] != \'\\n\' && Ptr[0] != \'\\r\' && Tok && !isLexingRawMode())\n        Diag(Ptr, diag::backslash_newline_space);"},{zb,2511,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  while (true) {\n    if (C != 0) {\n      // If there was space between the backslash and newline, warn about it.\n      if (HasSpace && !isLexingRawMode())\n        Diag(EscapePtr, diag::backslash_newline_space);"},{zb,2699,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence.  Issue\n/// a diagnostic if so.  We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n  // If there was space between the backslash and newline, warn about it.\n  if (SpacePos && !L->isLexingRawMode())\n    L->Diag(SpacePos, diag::backslash_newline_space);"}}
[k]={{yb,1359,"/// getCharAndSizeSlow - Peek a single \'character\' from the specified buffer,\n/// get its size, and return it.  This is tricky in several cases:\n///  1. If currently at the start of a trigraph, we warn about the trigraph,\n///      then either return the trigraph (skipping 3 chars) or the \'?\',\n///      depending on whether trigraphs are enabled or not.\n///  2. If this is an escaped newline (potentially with whitespace between\n///      the backslash and newline), implicitly skip the newline and return\n///      the char after it.\n///\n/// This handles the slow/uncommon case of the getCharAndSize method.  Here we\n/// know that we can accumulate into Size, and that we have already incremented\n/// Ptr by Size bytes.\n///\n/// NOTE: When this method is updated, getCharAndSizeSlowNoWarn (below) should\n/// be updated to match.\nchar Lexer::getCharAndSizeSlow(const char *Ptr, unsigned &Size, Token *Tok) {\n  Slash:\n    // See if we have optional whitespace characters between the slash and\n    // newline.\n    if (unsigned EscapedNewLineSize = getEscapedNewLineSize(Ptr)) {\n      // Warn if there was whitespace between the backslash and newline.\n      if (Ptr[0] != \'\\n\' && Ptr[0] != \'\\r\' && Tok && !isLexingRawMode())\n        Diag(Ptr, diag::backslash_newline_space);"},{yb,2511,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  while (true) {\n    if (C != 0) {\n      // If there was space between the backslash and newline, warn about it.\n      if (HasSpace && !isLexingRawMode())\n        Diag(EscapePtr, diag::backslash_newline_space);"},{yb,2699,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence.  Issue\n/// a diagnostic if so.  We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n  // If there was space between the backslash and newline, warn about it.\n  if (SpacePos && !L->isLexingRawMode())\n    L->Diag(SpacePos, diag::backslash_newline_space);"}},
[o]={
["clang/test/Preprocessor/c99-6_10_3_4_p6.c"]={"clang/test/Preprocessor/c99-6_10_3_4_p6.c:7:57: warning: backslash and newline separated by space [-Wbackslash-newline-escape]"}
}
},
},
["err_32_bit_builtin_64_bit_tgt"]={
["err_32_bit_builtin_64_bit_tgt"]={
[f]="this builtin is only available on 32-bit targets",
[h]="this builtin is only available on 32-bit targets",
[c]=l,
[j]=n,
[e]=n,
[g]="this builtin is only available on 32-bit targets",
[i]=m,
[i]=m,
[j]="this builtin is only available on 32\\-bit targets",
[b]="this builtin is only available on 32-bit targets",
[b]=a,
[g]=l,
[h]=o,
[f]="this builtin is only available on 32\\-bit targets",
[d]={"51738f834ed9",1524773686,"[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit..."},
[e]=a,
[k]={{s,5982,"bool Sema::CheckX86BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (TT.getArch() != llvm::Triple::x86 && isX86_32Builtin(BuiltinID))\n    return Diag(TheCall->getCallee()->getBeginLoc(), diag::err_32_bit_builtin_64_bit_tgt);"}}
[d]=p,
[c]={"51738f834ed9",1524773686,"[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit..."},
[k]={{t,5982,"bool Sema::CheckX86BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (TT.getArch() != llvm::Triple::x86 && isX86_32Builtin(BuiltinID))\n    return Diag(TheCall->getCallee()->getBeginLoc(), diag::err_32_bit_builtin_64_bit_tgt);"}},
[o]={
["clang/test/Sema/builtins-x86.c"]={"clang/test/Sema/builtins-x86.c:20:9: error: this builtin is only available on 32-bit targets","clang/test/Sema/builtins-x86.c:21:9: error: this builtin is only available on 32-bit targets"}
}
},
},
["err_64_bit_builtin_32_bit_tgt"]={
["err_64_bit_builtin_32_bit_tgt"]={
[f]="this builtin is only available on 64-bit targets",
[h]="this builtin is only available on 64-bit targets",
[c]=l,
[j]=n,
[e]=n,
[g]="this builtin is only available on 64-bit targets",
[i]=m,
[i]=m,
[j]="this builtin is only available on 64\\-bit targets",
[b]="this builtin is only available on 64-bit targets",
[b]=a,
[g]=l,
[h]=o,
[f]="this builtin is only available on 64\\-bit targets",
[d]={"239eec732ebf",1428623896,"Add Clang support for remaining integer divide and permute instructions from ISA 2.06"},
[e]=a,
[k]={{s,4249,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (isPPC_64Builtin(BuiltinID) && !IsTarget64Bit)\n    return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) << TheCall->getSourceRange();"}}
[d]=p,
[c]={"239eec732ebf",1428623896,"Add Clang support for remaining integer divide and permute instructions from ISA 2.06"},
[k]={{t,4249,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (isPPC_64Builtin(BuiltinID) && !IsTarget64Bit)\n    return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) << TheCall->getSourceRange();"}},
[o]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:87:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:91:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:95:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:99:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:103:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:107:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:111:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:115:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:118:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:122:3: error: this builtin is only available on 64-bit targets"}
}
},
},
["err__Pragma_malformed"]={
["err__Pragma_malformed"]={
[h]="_Pragma takes a parenthesized string literal",
[j]=n,
[i]=m,
[b]="_Pragma takes a parenthesized string literal",
[g]=l,
[f]="_Pragma takes a parenthesized string literal",
[f]="_Pragma takes a parenthesized string literal",
[c]=l,
[e]=a,
[e]=n,
[d]=ib,
[g]="_Pragma takes a parenthesized string literal",
[c]={C,1236199783,B},
[i]=m,
[k]={{Jb,219,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Jb,226,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (!tok::isStringLiteral(Tok.getKind())) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Jb,254,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Jb,270,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (Invalid) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Jb,370,"/// HandleMicrosoft__pragma - Like Handle_Pragma except the pragma text\n/// is not enclosed within a string literal.\nvoid Preprocessor::HandleMicrosoft__pragma(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"}},
[j]="_Pragma takes a parenthesized string literal",
[o]={
[b]=a,
["clang/test/Preprocessor/_Pragma.c"]={"clang/test/Preprocessor/_Pragma.c:15:1: error: _Pragma takes a parenthesized string literal","clang/test/Preprocessor/_Pragma.c:17:1: error: _Pragma takes a parenthesized string literal","clang/test/Preprocessor/_Pragma.c:19:1: error: _Pragma takes a parenthesized string literal"}
[h]=gb,
}
[d]={A,1236199783,z},
[k]={{Ib,219,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Ib,226,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (!tok::isStringLiteral(Tok.getKind())) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Ib,254,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Ib,270,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  if (Invalid) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Ib,370,"/// HandleMicrosoft__pragma - Like Handle_Pragma except the pragma text\n/// is not enclosed within a string literal.\nvoid Preprocessor::HandleMicrosoft__pragma(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"}}
},
},
["err_abi_tag_on_redeclaration"]={
["err_abi_tag_on_redeclaration"]={
[h]="cannot add \'abi_tag\' attribute in a redeclaration",
[j]=n,
[i]=m,
[b]="cannot add \'abi_tag\' attribute in a redeclaration",
[g]=l,
[f]="cannot add \'abi_tag\' attribute in a redeclaration",
[f]="cannot add \'abi_tag\' attribute in a redeclaration",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot add \'abi_tag\' attribute in a redeclaration",
[c]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support"},
[i]=m,
[k]={{r,3263,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // Re-declaration cannot add abi_tag\'s.\n  if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {\n    if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {\n    } else {\n      Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);"}},
[j]="cannot add \'abi_tag\' attribute in a redeclaration",
[o]={
[b]=a,
["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:32:16: error: cannot add \'abi_tag\' attribute in a redeclaration"}
[h]=o,
}
[d]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support"},
[k]={{q,3263,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // Re-declaration cannot add abi_tag\'s.\n  if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {\n    if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {\n    } else {\n      Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);"}}
},
},
["err_abstract_type_in_decl"]={
["err_abstract_type_in_decl"]={
[f]="... type A is an abstract class",
[h]="... type A is an abstract class",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{return|parameter|variable|field|instance variable|synthesized instance variable}0 type %1 is an abstract class",
[i]=m,
[i]=m,
[j]="(?:return|parameter|variable|field|instance variable|synthesized instance variable) type (.*?) is an abstract class",
[b]="%select{return|parameter|variable|field|instance variable|synthesized instance variable}0 type %1 is an abstract class",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:return|parameter|variable|field|instance variable|synthesized instance variable) type (.*?) is an abstract class",
[d]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."},
[e]=a,
[k]={{s,16642,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{q,13209,"/// 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  if (!VDecl->getType()->isDependentType()) {\n    if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(), diag::err_abstract_type_in_decl, AbstractVariableType))"},{q,13643,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  if (RequireNonAbstractType(VD->getLocation(), Ty, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{q,13776,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && !Var->isInvalidDecl() && RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType))"},{q,13868,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{q,15350,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !FD->isInvalidDecl() && BodyKind != FnBodyKind::Delete && (RequireCompleteType(FD->getLocation(), ResultType, diag::err_func_def_incomplete_result) || RequireNonAbstractType(FD->getLocation(), FD->getReturnType(), diag::err_abstract_type_in_decl, AbstractReturnType)))"},{q,18166,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  if (!InvalidDecl && RequireNonAbstractType(Loc, T, diag::err_abstract_type_in_decl, AbstractFieldType))"},{q,18876,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n      if (isa<ObjCContainerDecl>(EnclosingDecl) && RequireNonAbstractType(FD->getLocation(), FD->getType(), diag::err_abstract_type_in_decl, AbstractIvarType)) {"},{v,6098,"#include \"clang/AST/TypeLocNodes.def\"\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n    } else {\n      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl) << Sel << T << TL.getSourceRange();"},{v,16661,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (!Invalid && !ExDeclType->isDependentType() && RequireNonAbstractType(Loc, ExDeclType, diag::err_abstract_type_in_decl, AbstractVariableType))"},{P,1326,"/// 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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {"}}
[d]=p,
[c]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."},
[k]={{t,16642,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{r,13209,"/// 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  if (!VDecl->getType()->isDependentType()) {\n    if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(), diag::err_abstract_type_in_decl, AbstractVariableType))"},{r,13643,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  if (RequireNonAbstractType(VD->getLocation(), Ty, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{r,13776,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && !Var->isInvalidDecl() && RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType))"},{r,13868,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{r,15350,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !FD->isInvalidDecl() && BodyKind != FnBodyKind::Delete && (RequireCompleteType(FD->getLocation(), ResultType, diag::err_func_def_incomplete_result) || RequireNonAbstractType(FD->getLocation(), FD->getReturnType(), diag::err_abstract_type_in_decl, AbstractReturnType)))"},{r,18166,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  if (!InvalidDecl && RequireNonAbstractType(Loc, T, diag::err_abstract_type_in_decl, AbstractFieldType))"},{r,18876,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n      if (isa<ObjCContainerDecl>(EnclosingDecl) && RequireNonAbstractType(FD->getLocation(), FD->getType(), diag::err_abstract_type_in_decl, AbstractIvarType)) {"},{w,6098,"#include \"clang/AST/TypeLocNodes.def\"\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n    } else {\n      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl) << Sel << T << TL.getSourceRange();"},{w,16661,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (!Invalid && !ExDeclType->isDependentType() && RequireNonAbstractType(Loc, ExDeclType, diag::err_abstract_type_in_decl, AbstractVariableType))"},{R,1326,"/// 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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {"}},
[o]={
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:19:3: error: variable type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:20:3: error: variable type \'SecretlyAbstract<char>\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:38:8: error: parameter type \'A\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:40:8: error: parameter type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:44:8: error: parameter type \'SecretlyAbstract<char>\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:50:3: error: return type \'A\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:52:3: error: return type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class"}
}
},
},
["err_access"]={
["err_access"]={
[f]="A is a ... member of B",
[h]="A is a ... member of B",
[c]=l,
[j]=n,
[e]=n,
[g]="%1 is a %select{private|protected}0 member of %3",
[i]=m,
[i]=m,
[j]="(.*?) is a (?:private|protected) member of (.*?)",
[b]="%1 is a %select{private|protected}0 member of %3",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) is a (?:private|protected) member of (.*?)",
[d]={qb,1268716967,sb},
[e]=a,
[k]={{S,1568,"Sema::AccessResult Sema::CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{S,1587,"/// Perform access-control checking on a previously-unresolved member\n/// access which has now been resolved to a member.\nSema::AccessResult Sema::CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{S,1741,"/// Checks access to an overloaded operator new or delete.\nSema::AccessResult Sema::CheckAllocationAccess(SourceLocation OpLoc, SourceRange PlacementRange, CXXRecordDecl *NamingClass, DeclAccessPair Found, bool Diagnose) {\n  if (Diagnose)\n    Entity.setDiag(diag::err_access) << PlacementRange;"},{S,1790,"Sema::AccessResult Sema::CheckMemberOperatorAccess(SourceLocation OpLoc, Expr *ObjectExpr, const SourceRange &Range, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << ObjectExpr->getSourceRange() << Range;"},{S,1863,"Sema::AccessResult Sema::CheckAddressOfMemberAccess(Expr *OvlExpr, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << Ovl->getSourceRange();"},{S,1920,"/// Checks access to all the declarations in the given result set.\nvoid Sema::CheckLookupAccess(const LookupResult &R) {\n  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {\n    if (I.getAccess() != AS_public) {\n      Entity.setDiag(diag::err_access);"}}
[d]=p,
[c]={Ab,1268716967,Bb},
[k]={{V,1568,"Sema::AccessResult Sema::CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{V,1587,"/// Perform access-control checking on a previously-unresolved member\n/// access which has now been resolved to a member.\nSema::AccessResult Sema::CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{V,1741,"/// Checks access to an overloaded operator new or delete.\nSema::AccessResult Sema::CheckAllocationAccess(SourceLocation OpLoc, SourceRange PlacementRange, CXXRecordDecl *NamingClass, DeclAccessPair Found, bool Diagnose) {\n  if (Diagnose)\n    Entity.setDiag(diag::err_access) << PlacementRange;"},{V,1790,"Sema::AccessResult Sema::CheckMemberOperatorAccess(SourceLocation OpLoc, Expr *ObjectExpr, const SourceRange &Range, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << ObjectExpr->getSourceRange() << Range;"},{V,1863,"Sema::AccessResult Sema::CheckAddressOfMemberAccess(Expr *OvlExpr, DeclAccessPair Found) {\n  Entity.setDiag(diag::err_access) << Ovl->getSourceRange();"},{V,1920,"/// Checks access to all the declarations in the given result set.\nvoid Sema::CheckLookupAccess(const LookupResult &R) {\n  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {\n    if (I.getAccess() != AS_public) {\n      Entity.setDiag(diag::err_access);"}},
[o]={
["clang/test/SemaCXX/access-control-check.cpp"]={"clang/test/SemaCXX/access-control-check.cpp:14:21: error: \'iP\' is a private member of \'P\'","clang/test/SemaCXX/access-control-check.cpp:14:26: error: \'PPR\' is a private member of \'P\'"}
}
},
},
["err_access_base_ctor"]={
["err_access_base_ctor"]={
[f]="... A has ... ...constructor",
[h]="... A has ... ...constructor",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{base class|inherited virtual base class}0 %1 has %select{private|protected}3 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR*|}2constructor",
[i]=m,
[i]=m,
[j]="(?:base class|inherited virtual base class) (.*?) has (?:private|protected) (?:default |copy |move |)constructor",
[b]="%select{base class|inherited virtual base class}0 %1 has %select{private|protected}3 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR*|}2constructor",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:base class|inherited virtual base class) (.*?) has (?:private|protected) (?:default |copy |move |)constructor",
[d]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code."},
[e]=a,
[k]={{S,1660,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  case InitializedEntity::EK_Base:\n    PD = PDiag(diag::err_access_base_ctor);"}}
[d]=p,
[c]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code."},
[k]={{V,1660,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  case InitializedEntity::EK_Base:\n    PD = PDiag(diag::err_access_base_ctor);"}},
[o]={
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p18.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p18.cpp:43:18: error: base class \'B\' has private constructor"}
}
},
},
["err_access_ctor"]={
["err_access_ctor"]={
[f]="calling a ... constructor of class A",
[h]="calling a ... constructor of class A",
[c]=l,
[j]=n,
[e]=n,
[g]="calling a %select{private|protected}0 constructor of class %2",
[i]=m,
[i]=m,
[j]="calling a (?:private|protected) constructor of class (.*?)",
[b]="calling a %select{private|protected}0 constructor of class %2",
[b]=a,
[g]=l,
[h]=o,
[f]="calling a (?:private|protected) constructor of class (.*?)",
[d]={qb,1268716967,sb},
[e]=a,
[k]={{S,1655,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  default:\n    PD = PDiag(IsCopyBindingRefToTemp ? diag::ext_rvalue_to_reference_access_ctor : diag::err_access_ctor);"}}
[d]=p,
[c]={Ab,1268716967,Bb},
[k]={{V,1655,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  default:\n    PD = PDiag(IsCopyBindingRefToTemp ? diag::ext_rvalue_to_reference_access_ctor : diag::err_access_ctor);"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.new/p17.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:12:7: error: calling a private constructor of class \'ctor\'"}
}
},
},
["err_access_decl"]={
["err_access_decl"]={
[f]="ISO C++11 does not allow access declarations; use using declarations instead",
[h]="ISO C++11 does not allow access declarations; use using declarations instead",
[c]=l,
[j]=n,
[e]=n,
[g]="ISO C++11 does not allow access declarations; use using declarations instead",
[i]=m,
[i]=m,
[j]="ISO C\\+\\+11 does not allow access declarations; use using declarations instead",
[b]="ISO C++11 does not allow access declarations; use using declarations instead",
[b]=a,
[g]=l,
[h]=o,
[f]="ISO C\\+\\+11 does not allow access declarations; use using declarations instead",
[d]={"f026b600992d",1371089537,"In C++11, promote access declaration diagnostic from warning to error. There"},
[e]=a,
[k]={{v,12068,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // Warn about access declarations.\n  if (UsingLoc.isInvalid()) {\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::err_access_decl : diag::warn_access_decl_deprecated) << FixItHint::CreateInsertion(SS.getRange().getBegin(), \"using \");"}}
[d]=p,
[c]={"f026b600992d",1371089537,"In C++11, promote access declaration diagnostic from warning to error. There"},
[k]={{w,12068,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // Warn about access declarations.\n  if (UsingLoc.isInvalid()) {\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::err_access_decl : diag::warn_access_decl_deprecated) << FixItHint::CreateInsertion(SS.getRange().getBegin(), \"using \");"}},
[o]={
["clang/test/CXX/class.access/class.access.dcl/p1.cpp"]={"clang/test/CXX/class.access/class.access.dcl/p1.cpp:29:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:36:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:43:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:50:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:71:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:77:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:84:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:91:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:98:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:142:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:149:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:156:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:163:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:170:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:216:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:223:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:230:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:237:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:244:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:300:14: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:307:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:314:16: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:321:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:329:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:341:8: error: ISO C++11 does not allow access declarations; use using declarations instead"}
}
},
},
["err_access_dtor"]={
["err_access_dtor"]={
[f]="calling a ... destructor of class A",
[h]="calling a ... destructor of class A",
[c]=l,
[j]=n,
[e]=n,
[g]="calling a %select{private|protected}1 destructor of class %0",
[i]=m,
[i]=m,
[j]="calling a (?:private|protected) destructor of class (.*?)",
[b]="calling a %select{private|protected}1 destructor of class %0",
[b]=a,
[g]=l,
[h]=o,
[f]="calling a (?:private|protected) destructor of class (.*?)",
[d]={"fa7781384ebb",1296575411,"Implement access checking for the \"delete\" operator. Fixes PR9050,"},
[e]=a,
[k]={{x,3775,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (PointeeRD) {\n      if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {\n        CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor, PDiag(diag::err_access_dtor) << PointeeElem);"}}
[d]=p,
[c]={"fa7781384ebb",1296575411,"Implement access checking for the \"delete\" operator. Fixes PR9050,"},
[k]={{y,3775,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (PointeeRD) {\n      if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {\n        CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor, PDiag(diag::err_access_dtor) << PointeeElem);"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp"]={"clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:31:12: error: calling a private destructor of class \'T3_A\'"}
}
},
},
["err_access_dtor_base"]={
["err_access_dtor_base"]={
[f]="base class A has ... destructor",
[h]="base class A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="base class %0 has %select{private|protected}1 destructor",
[i]=m,
[i]=m,
[j]="base class (.*?) has (?:private|protected) destructor",
[b]="base class %0 has %select{private|protected}1 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="base class (.*?) has (?:private|protected) destructor",
[d]={qb,1268716967,sb},
[e]=a,
[k]={{v,5847,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // Bases.\n  for (const auto &Base : ClassDecl->bases()) {\n    CheckDestructorAccess(Base.getBeginLoc(), Dtor, PDiag(diag::err_access_dtor_base) << Base.getType() << Base.getSourceRange(), Context.getTypeDeclType(ClassDecl));"}}
[d]=p,
[c]={Ab,1268716967,Bb},
[k]={{w,5847,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // Bases.\n  for (const auto &Base : ClassDecl->bases()) {\n    CheckDestructorAccess(Base.getBeginLoc(), Dtor, PDiag(diag::err_access_dtor_base) << Base.getType() << Base.getSourceRange(), Context.getTypeDeclType(ClassDecl));"}},
[o]={
["clang/test/SemaObjCXX/ivar-construct.mm"]={"clang/test/SemaObjCXX/ivar-construct.mm:10:12: error: base class \'Y\' has private destructor","clang/test/SemaObjCXX/ivar-construct.mm:10:12: error: base class \'Y\' has private destructor"}
}
},
},
["err_access_dtor_exception"]={
["err_access_dtor_exception"]={
[f]="exception object of type A has ... destructor",
[h]="exception object of type A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="exception object of type %0 has %select{private|protected}1 destructor",
[i]=m,
[i]=m,
[j]="exception object of type (.*?) has (?:private|protected) destructor",
[b]="exception object of type %0 has %select{private|protected}1 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="exception object of type (.*?) has (?:private|protected) destructor",
[d]={"442612c2853f",1278542113,"Do not use CXXZeroValueInitExpr for class types. Instead, use"},
[e]=a,
[k]={{x,1033,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // If the class has a destructor, we must be able to call it.\n  if (!RD->hasIrrelevantDestructor()) {\n    if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n      CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_exception) << Ty);"}}
[d]=p,
[c]={"442612c2853f",1278542113,"Do not use CXXZeroValueInitExpr for class types. Instead, use"},
[k]={{y,1033,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // If the class has a destructor, we must be able to call it.\n  if (!RD->hasIrrelevantDestructor()) {\n    if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n      CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_exception) << Ty);"}},
[o]={
["clang/test/SemaCXX/defaulted-private-dtor.cpp"]={"clang/test/SemaCXX/defaulted-private-dtor.cpp:13:9: error: exception object of type \'BadDtor\' has private destructor"}
}
},
},
["err_access_dtor_field"]={
["err_access_dtor_field"]={
[f]="field of type A has ... destructor",
[h]="field of type A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="field of type %1 has %select{private|protected}2 destructor",
[i]=m,
[i]=m,
[j]="field of type (.*?) has (?:private|protected) destructor",
[b]="field of type %1 has %select{private|protected}2 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="field of type (.*?) has (?:private|protected) destructor",
[d]={qb,1268716967,sb},
[e]=a,
[k]={{v,5797,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // Non-static data members.\n  for (auto *Field : ClassDecl->fields()) {\n    CheckDestructorAccess(Field->getLocation(), Dtor, PDiag(diag::err_access_dtor_field) << Field->getDeclName() << FieldType);"}}
[d]=p,
[c]={Ab,1268716967,Bb},
[k]={{w,5797,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // Non-static data members.\n  for (auto *Field : ClassDecl->fields()) {\n    CheckDestructorAccess(Field->getLocation(), Dtor, PDiag(diag::err_access_dtor_field) << Field->getDeclName() << FieldType);"}},
[o]={
["clang/test/SemaCXX/defaulted-private-dtor.cpp"]={"clang/test/SemaCXX/defaulted-private-dtor.cpp:28:11: error: field of type \'BadDtor\' has private destructor"}
}
},
},
["err_access_dtor_ivar"]={
["err_access_dtor_ivar"]={
[f]="instance variable of type A has ... destructor",
[h]="instance variable of type A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="instance variable of type %0 has %select{private|protected}1 destructor",
[i]=m,
[i]=m,
[j]="instance variable of type (.*?) has (?:private|protected) destructor",
[b]="instance variable of type %0 has %select{private|protected}1 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="instance variable of type (.*?) has (?:private|protected) destructor",
[d]={"527786ea3a6a",1274322262,"Various small fixes for construction/destruction of Objective-C++"},
[e]=a,
[k]={{v,18491,"/// SetIvarInitializers - This routine builds initialization ASTs for the\n/// Objective-C implementation whose ivars need be initialized.\nvoid Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {\n  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {\n    for (unsigned i = 0; i < ivars.size(); i++) {\n      // Be sure that the destructor is accessible and is marked as referenced.\n      if (const RecordType *RecordTy = Context.getBaseElementType(Field->getType())->getAs<RecordType>()) {\n        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n          CheckDestructorAccess(Field->getLocation(), Destructor, PDiag(diag::err_access_dtor_ivar) << Context.getBaseElementType(Field->getType()));"}}
[d]=p,
[c]={"527786ea3a6a",1274322262,"Various small fixes for construction/destruction of Objective-C++"},
[k]={{w,18491,"/// SetIvarInitializers - This routine builds initialization ASTs for the\n/// Objective-C implementation whose ivars need be initialized.\nvoid Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {\n  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {\n    for (unsigned i = 0; i < ivars.size(); i++) {\n      // Be sure that the destructor is accessible and is marked as referenced.\n      if (const RecordType *RecordTy = Context.getBaseElementType(Field->getType())->getAs<RecordType>()) {\n        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n          CheckDestructorAccess(Field->getLocation(), Destructor, PDiag(diag::err_access_dtor_ivar) << Context.getBaseElementType(Field->getType()));"}},
[o]={
["clang/test/SemaObjCXX/ivar-construct.mm"]={"clang/test/SemaObjCXX/ivar-construct.mm:16:5: error: instance variable of type \'Y\' has private destructor"}
}
},
},
["err_access_dtor_temp"]={
["err_access_dtor_temp"]={
[f]="temporary of type A has ... destructor",
[h]="temporary of type A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="temporary of type %0 has %select{private|protected}1 destructor",
[i]=m,
[i]=m,
[j]="temporary of type (.*?) has (?:private|protected) destructor",
[b]="temporary of type %0 has %select{private|protected}1 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="temporary of type (.*?) has (?:private|protected) destructor",
[d]={"8e36d53e34be",1270600906,"Check access for the implicit calls to destructors that occur when we"},
[e]=a,
[k]={{x,7334,"ExprResult Sema::MaybeBindToTemporary(Expr *E) {\n  if (Destructor) {\n    CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << E->getType());"},{x,7505,"/// Process the expression contained within a decltype. For such expressions,\n/// certain semantic checks on temporaries are delayed until this point, and\n/// are omitted for the \'topmost\' call in the decltype expression. If the\n/// topmost call bound a temporary, strip that temporary off the expression.\nExprResult Sema::ActOnDecltypeExpression(Expr *E) {\n  // Now all relevant types are complete, check the destructors are accessible\n  // and non-deleted, and annotate them on the temporaries.\n  for (unsigned I = 0, N = ExprEvalContexts.back().DelayedDecltypeBinds.size(); I != N; ++I) {\n    CheckDestructorAccess(Bind->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << Bind->getType());"},{E,1932,"/// Check if the type of a class element has an accessible destructor, and marks\n/// it referenced. Returns true if we shouldn\'t form a reference to the\n/// destructor.\n///\n/// Aggregate initialization requires a class element\'s destructor be\n/// accessible per 11.6.1 [dcl.init.aggr]:\n///\n/// The destructor for each element of class type is potentially invoked\n/// (15.4 [class.dtor]) from the context where the aggregate initialization\n/// occurs.\nstatic bool checkDestructorReference(QualType ElementType, SourceLocation Loc, Sema &SemaRef) {\n  SemaRef.CheckDestructorAccess(Loc, Destructor, SemaRef.PDiag(diag::err_access_dtor_temp) << ElementType);"},{E,8929,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_UserConversion: {\n      if (shouldBindAsTemporary(Entity))\n      else if (CreatedObject && shouldDestroyEntity(Entity)) {\n        if (const RecordType *Record = T->getAs<RecordType>()) {\n          S.CheckDestructorAccess(CurInit.get()->getBeginLoc(), Destructor, S.PDiag(diag::err_access_dtor_temp) << T);"}}
[d]=p,
[c]={"8e36d53e34be",1270600906,"Check access for the implicit calls to destructors that occur when we"},
[k]={{y,7334,"ExprResult Sema::MaybeBindToTemporary(Expr *E) {\n  if (Destructor) {\n    CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << E->getType());"},{y,7505,"/// Process the expression contained within a decltype. For such expressions,\n/// certain semantic checks on temporaries are delayed until this point, and\n/// are omitted for the \'topmost\' call in the decltype expression. If the\n/// topmost call bound a temporary, strip that temporary off the expression.\nExprResult Sema::ActOnDecltypeExpression(Expr *E) {\n  // Now all relevant types are complete, check the destructors are accessible\n  // and non-deleted, and annotate them on the temporaries.\n  for (unsigned I = 0, N = ExprEvalContexts.back().DelayedDecltypeBinds.size(); I != N; ++I) {\n    CheckDestructorAccess(Bind->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << Bind->getType());"},{H,1932,"/// Check if the type of a class element has an accessible destructor, and marks\n/// it referenced. Returns true if we shouldn\'t form a reference to the\n/// destructor.\n///\n/// Aggregate initialization requires a class element\'s destructor be\n/// accessible per 11.6.1 [dcl.init.aggr]:\n///\n/// The destructor for each element of class type is potentially invoked\n/// (15.4 [class.dtor]) from the context where the aggregate initialization\n/// occurs.\nstatic bool checkDestructorReference(QualType ElementType, SourceLocation Loc, Sema &SemaRef) {\n  SemaRef.CheckDestructorAccess(Loc, Destructor, SemaRef.PDiag(diag::err_access_dtor_temp) << ElementType);"},{H,8929,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_UserConversion: {\n      if (shouldBindAsTemporary(Entity))\n      else if (CreatedObject && shouldDestroyEntity(Entity)) {\n        if (const RecordType *Record = T->getAs<RecordType>()) {\n          S.CheckDestructorAccess(CurInit.get()->getBeginLoc(), Destructor, S.PDiag(diag::err_access_dtor_temp) << T);"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.new/p17.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:13:7: error: temporary of type \'dtor\' has private destructor","clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:14:7: error: temporary of type \'dtor\' has private destructor","clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:15:7: error: temporary of type \'dtor\' has private destructor"}
}
},
},
["err_access_dtor_var"]={
["err_access_dtor_var"]={
[f]="variable of type A has ... destructor",
[h]="variable of type A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="variable of type %1 has %select{private|protected}2 destructor",
[i]=m,
[i]=m,
[j]="variable of type (.*?) has (?:private|protected) destructor",
[b]="variable of type %1 has %select{private|protected}2 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="variable of type (.*?) has (?:private|protected) destructor",
[d]={qb,1268716967,sb},
[e]=a,
[k]={{v,15869,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // If this is an array, we\'ll require the destructor during initialization, so\n  // we can skip over this. We still want to emit exit-time destructor warnings\n  // though.\n  if (!VD->getType()->isArrayType()) {\n    CheckDestructorAccess(VD->getLocation(), Destructor, PDiag(diag::err_access_dtor_var) << VD->getDeclName() << VD->getType());"}}
[d]=p,
[c]={Ab,1268716967,Bb},
[k]={{w,15869,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // If this is an array, we\'ll require the destructor during initialization, so\n  // we can skip over this. We still want to emit exit-time destructor warnings\n  // though.\n  if (!VD->getType()->isArrayType()) {\n    CheckDestructorAccess(VD->getLocation(), Destructor, PDiag(diag::err_access_dtor_var) << VD->getDeclName() << VD->getType());"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp:46:11: error: variable of type \'decltype(pd() , pd())\' (aka \'PD\') has private destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp:61:18: error: variable of type \'decltype(pd_ref)\' (aka \'PD\') has private destructor"}
}
},
},
["err_access_dtor_vbase"]={
["err_access_dtor_vbase"]={
[f]="inherited virtual base class A has ... destructor",
[h]="inherited virtual base class A has ... destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="inherited virtual base class %1 has %select{private|protected}2 destructor",
[i]=m,
[i]=m,
[j]="inherited virtual base class (.*?) has (?:private|protected) destructor",
[b]="inherited virtual base class %1 has %select{private|protected}2 destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="inherited virtual base class (.*?) has (?:private|protected) destructor",
[d]={qb,1268716967,sb},
[e]=a,
[k]={{v,5885,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {"},{v,5891,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {\n      CheckDerivedToBaseConversion(Context.getTypeDeclType(ClassDecl), VBase.getType(), diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(), SourceRange(), DeclarationName(), nullptr);"}}
[d]=p,
[c]={Ab,1268716967,Bb},
[k]={{w,5885,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {"},{w,5891,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {\n      CheckDerivedToBaseConversion(Context.getTypeDeclType(ClassDecl), VBase.getType(), diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(), SourceRange(), DeclarationName(), nullptr);"}},
[o]={
["clang/test/SemaCXX/ms-implicit-complete-dtor.cpp"]={"clang/test/SemaCXX/ms-implicit-complete-dtor.cpp:46:8: error: inherited virtual base class \'Base<2>\' has private destructor"}
}
},
},
["err_access_field_ctor"]={
["err_access_field_ctor"]={
[f]="field of type A has ... ...constructor",
[h]="field of type A has ... ...constructor",
[c]=l,
[j]=n,
[e]=n,
[g]="field of type %0 has %select{private|protected}2 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR* |}1constructor",
[i]=m,
[i]=m,
[j]="field of type (.*?) has (?:private|protected) (?:default |copy |move |)constructor",
[b]="field of type %0 has %select{private|protected}2 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR* |}1constructor",
[b]=a,
[g]=l,
[h]=o,
[f]="field of type (.*?) has (?:private|protected) (?:default |copy |move |)constructor",
[d]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code."},
[e]=a,
[k]={{S,1668,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  case InitializedEntity::EK_ParenAggInitMember: {\n    PD = PDiag(diag::err_access_field_ctor);"}}
[d]=p,
[c]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code."},
[k]={{V,1668,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  case InitializedEntity::EK_ParenAggInitMember: {\n    PD = PDiag(diag::err_access_field_ctor);"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:36:15: error: field of type \'Private\' has private constructor"}
}
},
},
["err_access_friend_function"]={
["err_access_friend_function"]={
[f]="friend function A is a ... member of B",
[h]="friend function A is a ... member of B",
[c]=l,
[j]=n,
[e]=n,
[g]="friend function %1 is a %select{private|protected}0 member of %3",
[i]=m,
[i]=m,
[j]="friend function (.*?) is a (?:private|protected) member of (.*?)",
[b]="friend function %1 is a %select{private|protected}0 member of %3",
[b]=a,
[g]=l,
[h]=o,
[f]="friend function (.*?) is a (?:private|protected) member of (.*?)",
[d]={"a0a96895501e",1344568535,"Check access to friend declarations.  There\'s a number of different"},
[e]=a,
[k]={{S,1836,"/// Checks access to the target of a friend declaration.\nSema::AccessResult Sema::CheckFriendAccess(NamedDecl *target) {\n  entity.setDiag(diag::err_access_friend_function) << (method->getQualifier() ? method->getQualifierLoc().getSourceRange() : method->getNameInfo().getSourceRange());"}}
[d]=p,
[c]={"a0a96895501e",1344568535,"Check access to friend declarations.  There\'s a number of different"},
[k]={{V,1836,"/// Checks access to the target of a friend declaration.\nSema::AccessResult Sema::CheckFriendAccess(NamedDecl *target) {\n  entity.setDiag(diag::err_access_friend_function) << (method->getQualifier() ? method->getQualifierLoc().getSourceRange() : method->getNameInfo().getSourceRange());"}},
[o]={
["clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:16:20: error: friend function \'f\' is a private member of \'test0::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:27:20: error: friend function \'f\' is a private member of \'test1::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:57:20: error: friend function \'f\' is a private member of \'test3::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:81:23: error: friend function \'f\' is a private member of \'test5::X<int>\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:97:23: error: friend function \'f\' is a private member of \'test6::X<int>\'"}
}
},
},
["err_access_lambda_capture"]={
["err_access_lambda_capture"]={
[f]="capture of variable \'A\' as type B calls ... ...constructor",
[h]="capture of variable \'A\' as type B calls ... ...constructor",
[c]=l,
[j]=n,
[e]=n,
[g]="capture of variable \'%0\' as type %1 calls %select{private|protected}3 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR* |}2constructor",
[i]=m,
[i]=m,
[j]="capture of variable \'(.*?)\' as type (.*?) calls (?:private|protected) (?:default |copy |move |)constructor",
[b]="capture of variable \'%0\' as type %1 calls %select{private|protected}3 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR* |}2constructor",
[b]=a,
[g]=l,
[h]="Lambda Issue",
[f]="capture of variable \'(.*?)\' as type (.*?) calls (?:private|protected) (?:default |copy |move |)constructor",
[d]={"19666fb1aa7d",1329325046,"Introduce a new initialization entity for lambda captures, and"},
[e]=a,
[k]={{S,1675,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  case InitializedEntity::EK_LambdaCapture: {\n    PD = PDiag(diag::err_access_lambda_capture);"}}
[d]="Lambda Issue",
[c]={"19666fb1aa7d",1329325046,"Introduce a new initialization entity for lambda captures, and"},
[k]={{V,1675,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  case InitializedEntity::EK_LambdaCapture: {\n    PD = PDiag(diag::err_access_lambda_capture);"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:17:10: error: capture of variable \'nc\' as type \'NonCopyable\' calls private copy constructor","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:18:10: error: capture of variable \'ncr\' as type \'NonCopyable\' calls private copy constructor"}
}
},
},
["err_access_specifier_interface"]={
["err_access_specifier_interface"]={
[f]="interface types cannot specify \'...\' access",
[h]="interface types cannot specify \'...\' access",
[c]=l,
[j]=n,
[e]=n,
[g]="interface types cannot specify \'%select{private|protected}0\' access",
[i]=m,
[i]=m,
[j]="interface types cannot specify \'(?:private|protected)\' access",
[b]="interface types cannot specify \'%select{private|protected}0\' access",
[b]=a,
[g]=l,
[h]=B,
[f]="interface types cannot specify \'(?:private|protected)\' access",
[d]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement."},
[e]=a,
[k]={{K,3403,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  case tok::kw_protected: {\n    // The Microsoft extension __interface does not permit non-public\n    // access specifiers.\n    if (TagType == DeclSpec::TST_interface && AS != AS_public) {\n      Diag(ASLoc, diag::err_access_specifier_interface) << (AS == AS_protected);"}}
[d]=A,
[c]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement."},
[k]={{L,3403,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  case tok::kw_protected: {\n    // The Microsoft extension __interface does not permit non-public\n    // access specifiers.\n    if (TagType == DeclSpec::TST_interface && AS != AS_public) {\n      Diag(ASLoc, diag::err_access_specifier_interface) << (AS == AS_protected);"}},
[o]={
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:18:1: error: interface types cannot specify \'protected\' access","clang/test/SemaCXX/ms-interface.cpp:21:1: error: interface types cannot specify \'private\' access","clang/test/SemaCXX/ms-interface.cpp:30:1: error: interface types cannot specify \'private\' access","clang/test/SemaCXX/ms-interface.cpp:33:1: error: interface types cannot specify \'protected\' access"}
}
},
},
["err_addr_ovl_ambiguous"]={
["err_addr_ovl_ambiguous"]={
[f]="address of overloaded function A is ambiguous",
[h]="address of overloaded function A is ambiguous",
[c]=l,
[j]=n,
[e]=n,
[g]="address of overloaded function %0 is ambiguous",
[i]=m,
[i]=m,
[j]="address of overloaded function (.*?) is ambiguous",
[b]="address of overloaded function %0 is ambiguous",
[b]=a,
[g]=l,
[h]=o,
[f]="address of overloaded function (.*?) is ambiguous",
[d]={"b257e4fff8a9",1247096032,"Implement the simple form of overload resolution used when taking the"},
[e]=a,
[k]={{Q,12563,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void EliminateAllExceptMostSpecializedTemplate() {\n    UnresolvedSetIterator Result = S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, SourceExpr->getBeginLoc(), S.PDiag(), S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0].second->getDeclName(), S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function << (unsigned)ocs_described_template, Complain, TargetFunctionType);"},{Q,12651,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainMultipleMatchesFound() const {\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_ambiguous) << OvlExpr->getName() << OvlExpr->getSourceRange();"},{Q,12905,"/// Given an expression that refers to an overloaded function, try to\n/// resolve that overloaded function expression down to a single function.\n///\n/// This routine can only resolve template-ids that refer to a single function\n/// template, where that template-id refers to a single template whose template\n/// arguments are either provided by the template-id or have defaults,\n/// as described in C++0x [temp.arg.explicit]p3.\n///\n/// If no template-ids are found, no diagnostics are emitted and NULL is\n/// returned.\nFunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, bool Complain, DeclAccessPair *FoundResult, TemplateSpecCandidateSet *FailedTSC) {\n  for (UnresolvedSetIterator I = ovl->decls_begin(), E = ovl->decls_end(); I != E; ++I) {\n    // Multiple matches; we can\'t resolve to a single declaration.\n    if (Matched) {\n      if (Complain) {\n        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) << ovl->getName();"}}
[d]=p,
[c]={"b257e4fff8a9",1247096032,"Implement the simple form of overload resolution used when taking the"},
[k]={{T,12563,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void EliminateAllExceptMostSpecializedTemplate() {\n    UnresolvedSetIterator Result = S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, SourceExpr->getBeginLoc(), S.PDiag(), S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0].second->getDeclName(), S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function << (unsigned)ocs_described_template, Complain, TargetFunctionType);"},{T,12651,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainMultipleMatchesFound() const {\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_ambiguous) << OvlExpr->getName() << OvlExpr->getSourceRange();"},{T,12905,"/// Given an expression that refers to an overloaded function, try to\n/// resolve that overloaded function expression down to a single function.\n///\n/// This routine can only resolve template-ids that refer to a single function\n/// template, where that template-id refers to a single template whose template\n/// arguments are either provided by the template-id or have defaults,\n/// as described in C++0x [temp.arg.explicit]p3.\n///\n/// If no template-ids are found, no diagnostics are emitted and NULL is\n/// returned.\nFunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, bool Complain, DeclAccessPair *FoundResult, TemplateSpecCandidateSet *FailedTSC) {\n  for (UnresolvedSetIterator I = ovl->decls_begin(), E = ovl->decls_end(); I != E; ++I) {\n    // Multiple matches; we can\'t resolve to a single declaration.\n    if (Matched) {\n      if (Complain) {\n        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) << ovl->getName();"}},
[o]={
["clang/test/CXX/over/over.over/p4.cpp"]={"clang/test/CXX/over/over.over/p4.cpp:18:21: error: address of overloaded function \'f0\' is ambiguous"}
}
},
},
["err_addr_ovl_no_qualifier"]={
["err_addr_ovl_no_qualifier"]={
[f]="cannot form member pointer of type A without \'&\' and class name",
[h]="cannot form member pointer of type A without \'&\' and class name",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot form member pointer of type %0 without \'&\' and class name",
[i]=m,
[i]=m,
[j]="cannot form member pointer of type (.*?) without \'&\' and class name",
[b]="cannot form member pointer of type %0 without \'&\' and class name",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot form member pointer of type (.*?) without \'&\' and class name",
[d]={"24d189484b44",1282690359,"When trying to resolve the address of an overloaded expression,"},
[e]=a,
[k]={{Q,12630,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainIsInvalidFormOfPointerToMemberFunction() const {\n    S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) << TargetType << OvlExpr->getSourceRange();"}}
[d]=p,
[c]={"24d189484b44",1282690359,"When trying to resolve the address of an overloaded expression,"},
[k]={{T,12630,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainIsInvalidFormOfPointerToMemberFunction() const {\n    S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) << TargetType << OvlExpr->getSourceRange();"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp"]={"clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp:10:12: error: cannot form member pointer of type \'void (test0::A::*)(int)\' without \'&\' and class name"}
}
},
},
["err_addr_ovl_no_viable"]={
["err_addr_ovl_no_viable"]={
[f]="address of overloaded function A does not match required type B",
[h]="address of overloaded function A does not match required type B",
[c]=l,
[j]=n,
[e]=n,
[g]="address of overloaded function %0 does not match required type %1",
[i]=m,
[i]=m,
[j]="address of overloaded function (.*?) does not match required type (.*?)",
[b]="address of overloaded function %0 does not match required type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="address of overloaded function (.*?) does not match required type (.*?)",
[d]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in"},
[e]=a,
[k]={{Q,12599,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainNoMatchesFound() const {\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_no_viable) << OvlExpr->getName() << TargetFunctionType << OvlExpr->getSourceRange();"}}
[d]=p,
[c]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in"},
[k]={{T,12599,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainNoMatchesFound() const {\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_no_viable) << OvlExpr->getName() << TargetFunctionType << OvlExpr->getSourceRange();"}},
[o]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:37:69: error: address of overloaded function \'has_non_trailing_pack_and_more\' does not match required type \'void (float, double, int)\'"}
}
},
},
["err_addr_ovl_not_func_ptrref"]={
["err_addr_ovl_not_func_ptrref"]={
[f]="address of overloaded function A cannot be converted to type B",
[h]="address of overloaded function A cannot be converted to type B",
[c]=l,
[j]=n,
[e]=n,
[g]="address of overloaded function %0 cannot be converted to type %1",
[i]=m,
[i]=m,
[j]="address of overloaded function (.*?) cannot be converted to type (.*?)",
[b]="address of overloaded function %0 cannot be converted to type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="address of overloaded function (.*?) cannot be converted to type (.*?)",
[d]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in"},
[e]=a,
[k]={{Q,12645,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainOfInvalidConversion() const { S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_not_func_ptrref) << OvlExpr->getName() << TargetType; }"}}
[d]=p,
[c]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in"},
[k]={{T,12645,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void ComplainOfInvalidConversion() const { S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_not_func_ptrref) << OvlExpr->getName() << TargetType; }"}}
},
},
["err_address_of_function_with_pass_object_size_params"]={
["err_address_of_function_with_pass_object_size_params"]={
[f]="cannot take address of function A because parameter B has pass_object_size attribute",
[h]="cannot take address of function A because parameter B has pass_object_size attribute",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot take address of function %0 because parameter %1 has pass_object_size attribute",
[i]=m,
[i]=m,
[j]="cannot take address of function (.*?) because parameter (.*?) has pass_object_size attribute",
[b]="cannot take address of function %0 because parameter %1 has pass_object_size attribute",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot take address of function (.*?) because parameter (.*?) has pass_object_size attribute",
[d]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[e]=a,
[k]={{Q,10609,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (Complain) {\n    if (InOverloadResolution)\n    else\n      S.Diag(Loc, diag::err_address_of_function_with_pass_object_size_params) << FD << ParamNo;"}}
[d]=p,
[c]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[k]={{T,10609,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (Complain) {\n    if (InOverloadResolution)\n    else\n      S.Diag(Loc, diag::err_address_of_function_with_pass_object_size_params) << FD << ParamNo;"}},
[o]={
["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:44:23: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:45:25: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:53:10: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:54:11: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:56:13: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:57:14: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:60:5: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute"}
}
},
},
["err_address_of_label_outside_fn"]={
["err_address_of_label_outside_fn"]={
[f]="use of address-of-label extension outside of a function body",
[h]="use of address-of-label extension outside of a function body",
[c]=l,
[j]=n,
[e]=n,
[g]="use of address-of-label extension outside of a function body",
[i]=m,
[i]=m,
[j]="use of address\\-of\\-label extension outside of a function body",
[b]="use of address-of-label extension outside of a function body",
[b]=a,
[g]=l,
[h]=B,
[f]="use of address\\-of\\-label extension outside of a function body",
[d]={"9ba479bd2c2c",1298063799,"fix rdar://9024687, a crash on invalid that we used to silently ignore."},
[e]=a,
[k]={{kb,1460,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::ampamp: { // unary-expression: \'&&\' identifier\n    if (getCurScope()->getFnParent() == nullptr)\n      return ExprError(Diag(Tok, diag::err_address_of_label_outside_fn));"}}
[d]=A,
[c]={"9ba479bd2c2c",1298063799,"fix rdar://9024687, a crash on invalid that we used to silently ignore."},
[k]={{mb,1460,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::ampamp: { // unary-expression: \'&&\' identifier\n    if (getCurScope()->getFnParent() == nullptr)\n      return ExprError(Diag(Tok, diag::err_address_of_label_outside_fn));"}},
[o]={
["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:235:26: error: use of address-of-label extension outside of a function body"}
}
},
},
["err_address_space_mismatch_templ_inst"]={
["err_address_space_mismatch_templ_inst"]={
[f]="conflicting address space qualifiers are provided between types A and B",
[h]="conflicting address space qualifiers are provided between types A and B",
[c]=l,
[j]=n,
[e]=n,
[g]="conflicting address space qualifiers are provided between types %0 and %1",
[i]=m,
[i]=m,
[j]="conflicting address space qualifiers are provided between types (.*?) and (.*?)",
[b]="conflicting address space qualifiers are provided between types %0 and %1",
[b]=a,
[g]=l,
[h]=o,
[f]="conflicting address space qualifiers are provided between types (.*?) and (.*?)",
[d]={"12e3a8af81da",1544029342,"[OpenCL] Diagnose conflicting address spaces in templates."}
[e]=a,
[d]=p,
[c]={"12e3a8af81da",1544029342,"[OpenCL] Diagnose conflicting address spaces in templates."},
[o]={
["clang/test/SemaOpenCLCXX/address-space-templates.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-templates.clcpp:22:13: error: conflicting address space qualifiers are provided between types \'__private T\' and \'__global int\'"}
}
},
},
["err_address_space_qualified_delete"]={
["err_address_space_qualified_delete"]={
[f]="\'delete\' cannot delete objects of type A in address space \'B\'",
[h]="\'delete\' cannot delete objects of type A in address space \'B\'",
[c]=l,
[j]=n,
[e]=n,
[g]="\'delete\' cannot delete objects of type %0 in address space \'%1\'",
[i]=m,
[i]=m,
[j]="\'delete\' cannot delete objects of type (.*?) in address space \'(.*?)\'",
[b]="\'delete\' cannot delete objects of type %0 in address space \'%1\'",
[b]=a,
[g]=l,
[h]=o,
[f]="\'delete\' cannot delete objects of type (.*?) in address space \'(.*?)\'",
[d]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an"},
[e]=a,
[k]={{x,3677,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (Pointee.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n      return Diag(Ex.get()->getBeginLoc(), diag::err_address_space_qualified_delete) << Pointee.getUnqualifiedType() << Pointee.getQualifiers().getAddressSpaceAttributePrintValue();"}}
[d]=p,
[c]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an"},
[k]={{y,3677,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (Pointee.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n      return Diag(Ex.get()->getBeginLoc(), diag::err_address_space_qualified_delete) << Pointee.getUnqualifiedType() << Pointee.getQualifiers().getAddressSpaceAttributePrintValue();"}},
[o]={
["clang/test/SemaCXX/address-space-newdelete.cpp"]={"clang/test/SemaCXX/address-space-newdelete.cpp:22:10: error: \'delete\' cannot delete objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:23:13: error: \'delete\' cannot delete objects of type \'int\' in address space \'1\'"}
}
},
},
["err_address_space_qualified_new"]={
["err_address_space_qualified_new"]={
[f]="\'new\' cannot allocate objects of type A in address space \'B\'",
[h]="\'new\' cannot allocate objects of type A in address space \'B\'",
[c]=l,
[j]=n,
[e]=n,
[g]="\'new\' cannot allocate objects of type %0 in address space \'%1\'",
[i]=m,
[i]=m,
[j]="\'new\' cannot allocate objects of type (.*?) in address space \'(.*?)\'",
[b]="\'new\' cannot allocate objects of type %0 in address space \'%1\'",
[b]=a,
[g]=l,
[h]=o,
[f]="\'new\' cannot allocate objects of type (.*?) in address space \'(.*?)\'",
[d]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an"},
[e]=a,
[k]={{x,2475,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  else if (AllocType->isReferenceType())\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  else if (AllocType->isVariablyModifiedType())\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n    return Diag(Loc, diag::err_address_space_qualified_new) << AllocType.getUnqualifiedType() << AllocType.getQualifiers().getAddressSpaceAttributePrintValue();"}}
[d]=p,
[c]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an"},
[k]={{y,2475,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  else if (AllocType->isReferenceType())\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  else if (AllocType->isVariablyModifiedType())\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n    return Diag(Loc, diag::err_address_space_qualified_new) << AllocType.getUnqualifiedType() << AllocType.getQualifiers().getAddressSpaceAttributePrintValue();"}},
[o]={
["clang/test/SemaCXX/address-space-newdelete.cpp"]={"clang/test/SemaCXX/address-space-newdelete.cpp:9:13: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:10:47: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:11:13: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:12:47: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:15:17: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:16:51: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:17:17: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:18:51: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'"}
}
},
},
["err_addrof_function_constraints_not_satisfied"]={
["err_addrof_function_constraints_not_satisfied"]={
[f]="cannot take address of function A because its constraints are not satisfied",
[h]="cannot take address of function A because its constraints are not satisfied",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot take address of function %0 because its constraints are not satisfied",
[i]=m,
[i]=m,
[j]="cannot take address of function (.*?) because its constraints are not satisfied",
[b]="cannot take address of function %0 because its constraints are not satisfied",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot take address of function (.*?) because its constraints are not satisfied",
[d]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[e]=a,
[k]={{Q,10587,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (FD->getTrailingRequiresClause()) {\n    if (!Satisfaction.IsSatisfied) {\n      if (Complain) {\n        if (InOverloadResolution) {\n        } else\n          S.Diag(Loc, diag::err_addrof_function_constraints_not_satisfied) << FD;"}}
[d]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{T,10587,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (FD->getTrailingRequiresClause()) {\n    if (!Satisfaction.IsSatisfied) {\n      if (Complain) {\n        if (InOverloadResolution) {\n        } else\n          S.Diag(Loc, diag::err_addrof_function_constraints_not_satisfied) << FD;"}}
},
},
["err_addrof_function_disabled_by_enable_if_attr"]={
["err_addrof_function_disabled_by_enable_if_attr"]={
[f]="cannot take address of function A because it has one or more non-tautological enable_if conditions",
[h]="cannot take address of function A because it has one or more non-tautological enable_if conditions",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot take address of function %0 because it has one or more non-tautological enable_if conditions",
[i]=m,
[i]=m,
[j]="cannot take address of function (.*?) because it has one or more non\\-tautological enable_if conditions",
[b]="cannot take address of function %0 because it has one or more non-tautological enable_if conditions",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot take address of function (.*?) because it has one or more non\\-tautological enable_if conditions",
[d]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[e]=a,
[k]={{Q,10563,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (!isFunctionAlwaysEnabled(S.Context, FD)) {\n    if (Complain) {\n      if (InOverloadResolution)\n      else\n        S.Diag(Loc, diag::err_addrof_function_disabled_by_enable_if_attr) << FD;"}}
[d]=p,
[c]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[k]={{T,10563,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (!isFunctionAlwaysEnabled(S.Context, FD)) {\n    if (Complain) {\n      if (InOverloadResolution)\n      else\n        S.Diag(Loc, diag::err_addrof_function_disabled_by_enable_if_attr) << FD;"}},
[o]={
["clang/test/SemaCXX/unaddressable-functions.cpp"]={"clang/test/SemaCXX/unaddressable-functions.cpp:58:8: error: cannot take address of function \'foo\' because it has one or more non-tautological enable_if conditions","clang/test/SemaCXX/unaddressable-functions.cpp:63:15: error: cannot take address of function \'foo\' because it has one or more non-tautological enable_if conditions"}
}
},
},
["err_aix_attr_unsupported_tls_model"]={
["err_aix_attr_unsupported_tls_model"]={
[f]="TLS model \'A\' is not yet supported on AIX",
[h]="TLS model \'A\' is not yet supported on AIX",
[c]=l,
[j]=n,
[e]=n,
[g]="TLS model \'%0\' is not yet supported on AIX",
[i]=m,
[i]=m,
[j]="TLS model \'(.*?)\' is not yet supported on AIX",
[b]="TLS model \'%0\' is not yet supported on AIX",
[b]=a,
[g]=l,
[h]=o,
[f]="TLS model \'(.*?)\' is not yet supported on AIX",
[d]={Lb,1615397021,Kb},
[e]=a,
[k]={{p,2044,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.Context.getTargetInfo().getTriple().isOSAIX() && Model != \"global-dynamic\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_aix_attr_unsupported_tls_model) << Model;"}}
[d]=p,
[c]={Kb,1615397021,Mb},
[k]={{q,2044,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.Context.getTargetInfo().getTriple().isOSAIX() && Model != \"global-dynamic\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_aix_attr_unsupported_tls_model) << Model;"}}
},
},
["err_aix_unsupported_tls_model"]={
["err_aix_unsupported_tls_model"]={
[f]="TLS model \'A\' is not yet supported on AIX",
[h]="TLS model \'A\' is not yet supported on AIX",
[c]=l,
[j]=n,
[e]=n,
[g]="TLS model \'%0\' is not yet supported on AIX",
[i]=m,
[i]=m,
[j]="TLS model \'(.*?)\' is not yet supported on AIX",
[b]="TLS model \'%0\' is not yet supported on AIX",
[b]=a,
[g]=l,
[h]=a,
[f]="TLS model \'(.*?)\' is not yet supported on AIX",
[d]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."},
[e]=a,
[k]={{O,1892,"#include \"clang/Driver/Options.inc\"\n  if (Arg *A = Args.getLastArg(OPT_ftlsmodel_EQ)) {\n    if (T.isOSAIX()) {\n      if (Name != \"global-dynamic\" && Name != \"local-exec\")\n        Diags.Report(diag::err_aix_unsupported_tls_model) << Name;"}}
[d]=a,
[c]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."},
[k]={{P,1892,"#include \"clang/Driver/Options.inc\"\n  if (Arg *A = Args.getLastArg(OPT_ftlsmodel_EQ)) {\n    if (T.isOSAIX()) {\n      if (Name != \"global-dynamic\" && Name != \"local-exec\")\n        Diags.Report(diag::err_aix_unsupported_tls_model) << Name;"}},
[o]={
["clang/test/Sema/aix-attr-tls_model.c"]={"clang/test/Sema/aix-attr-tls_model.c:9:46: error: TLS model \'local-dynamic\' is not yet supported on AIX","clang/test/Sema/aix-attr-tls_model.c:10:46: error: TLS model \'initial-exec\' is not yet supported on AIX"}
}
},
},
["err_alias_after_tentative"]={
["err_alias_after_tentative"]={
[f]="alias definition of A after tentative definition",
[h]="alias definition of A after tentative definition",
[c]=l,
[j]=n,
[e]=n,
[g]="alias definition of %0 after tentative definition",
[i]=m,
[i]=m,
[j]="alias definition of (.*?) after tentative definition",
[b]="alias definition of %0 after tentative definition",
[b]=a,
[g]=l,
[h]=o,
[f]="alias definition of (.*?) after tentative definition",
[d]={"d53ffa0a70d8",1382477943,"Treat aliases as definitions."},
[e]=a,
[k]={{q,3041,"/// 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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"}}
[d]=p,
[c]={"d53ffa0a70d8",1382477943,"Treat aliases as definitions."},
[k]={{r,3041,"/// 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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"}},
[o]={
["clang/test/Sema/alias-redefinition.c"]={"clang/test/Sema/alias-redefinition.c:32:12: error: alias definition of \'var4\' after tentative definition"}
}
},
},
["err_alias_declaration_not_identifier"]={
["err_alias_declaration_not_identifier"]={
[h]="name defined in alias declaration must be an identifier",
[j]=n,
[i]=m,
[b]="name defined in alias declaration must be an identifier",
[g]=l,
[f]="name defined in alias declaration must be an identifier",
[f]="name defined in alias declaration must be an identifier",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="name defined in alias declaration must be an identifier",
[c]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."},
[i]=m,
[k]={{L,905,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(D.Name.StartLocation, diag::err_alias_declaration_not_identifier);"},{L,910,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  } else if (D.TypenameLoc.isValid())\n    Diag(D.TypenameLoc, diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc, D.SS.isNotEmpty() ? D.SS.getEndLoc() : D.TypenameLoc));"},{L,915,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  } else if (D.TypenameLoc.isValid())\n  else if (D.SS.isNotEmpty())\n    Diag(D.SS.getBeginLoc(), diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(D.SS.getRange());"}},
[j]="name defined in alias declaration must be an identifier",
[o]={
[b]=a,
["clang/test/CXX/temp/temp.decls/p3.cpp"]={"clang/test/CXX/temp/temp.decls/p3.cpp:7:7: error: name defined in alias declaration must be an identifier"}
[h]=B,
}
[d]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."},
[k]={{K,905,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(D.Name.StartLocation, diag::err_alias_declaration_not_identifier);"},{K,910,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  } else if (D.TypenameLoc.isValid())\n    Diag(D.TypenameLoc, diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc, D.SS.isNotEmpty() ? D.SS.getEndLoc() : D.TypenameLoc));"},{K,915,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  } else if (D.TypenameLoc.isValid())\n  else if (D.SS.isNotEmpty())\n    Diag(D.SS.getBeginLoc(), diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(D.SS.getRange());"}}
},
},
["err_alias_declaration_pack_expansion"]={
["err_alias_declaration_pack_expansion"]={
[h]="alias declaration cannot be a pack expansion",
[j]=n,
[i]=m,
[b]="alias declaration cannot be a pack expansion",
[g]=l,
[f]="alias declaration cannot be a pack expansion",
[f]="alias declaration cannot be a pack expansion",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="alias declaration cannot be a pack expansion",
[c]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."},
[i]=m,
[k]={{L,918,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  if (D.EllipsisLoc.isValid())\n    Diag(D.EllipsisLoc, diag::err_alias_declaration_pack_expansion) << FixItHint::CreateRemoval(SourceRange(D.EllipsisLoc));"}}
[j]="alias declaration cannot be a pack expansion",
[b]=a,
[h]=B,
[d]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."},
[k]={{K,918,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  if (D.EllipsisLoc.isValid())\n    Diag(D.EllipsisLoc, diag::err_alias_declaration_pack_expansion) << FixItHint::CreateRemoval(SourceRange(D.EllipsisLoc));"}}
},
},
["err_alias_declaration_specialization"]={
["err_alias_declaration_specialization"]={
[f]="... of alias templates is not permitted",
[h]="... of alias templates is not permitted",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{partial specialization|explicit specialization|explicit instantiation}0 of alias templates is not permitted",
[i]=m,
[i]=m,
[j]="(?:partial specialization|explicit specialization|explicit instantiation) of alias templates is not permitted",
[b]="%select{partial specialization|explicit specialization|explicit instantiation}0 of alias templates is not permitted",
[b]=a,
[g]=l,
[h]=B,
[f]="(?:partial specialization|explicit specialization|explicit instantiation) of alias templates is not permitted",
[d]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[e]=a,
[k]={{K,897,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  if (SpecKind != -1) {\n    Diag(Range.getBegin(), diag::err_alias_declaration_specialization) << SpecKind << Range;"}}
[d]=A,
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[k]={{L,897,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  if (SpecKind != -1) {\n    Diag(Range.getBegin(), diag::err_alias_declaration_specialization) << SpecKind << Range;"}},
[o]={
["clang/test/CXX/temp/temp.decls/p3.cpp"]={"clang/test/CXX/temp/temp.decls/p3.cpp:4:29: error: partial specialization of alias templates is not permitted","clang/test/CXX/temp/temp.decls/p3.cpp:5:1: error: explicit specialization of alias templates is not permitted","clang/test/CXX/temp/temp.decls/p3.cpp:6:1: error: explicit instantiation of alias templates is not permitted"}
}
},
},
["err_alias_is_definition"]={
["err_alias_is_definition"]={
[f]="definition A cannot also be an ...",
[h]="definition A cannot also be an ...",
[c]=l,
[j]=n,
[e]=n,
[g]="definition %0 cannot also be an %select{alias|ifunc}1",
[i]=m,
[i]=m,
[j]="definition (.*?) cannot also be an (?:alias|ifunc)",
[b]="definition %0 cannot also be an %select{alias|ifunc}1",
[b]=a,
[g]=l,
[h]=o,
[f]="definition (.*?) cannot also be an (?:alias|ifunc)",
[d]={"2dc814664385",1421658028,"Sema: Variable definitions cannot be __attribute__((alias))"},
[e]=a,
[k]={{q,6968,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  if (auto *VD = dyn_cast<VarDecl>(&ND)) {\n    if (VD->hasInit()) {\n      if (const auto *Attr = VD->getAttr<AliasAttr>()) {\n        S.Diag(Attr->getLocation(), diag::err_alias_is_definition) << VD << 0;"},{q,15265,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // Check for defining attributes before the check for redefinition.\n  if (const auto *Attr = FD->getAttr<AliasAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 0;"},{q,15270,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  if (const auto *Attr = FD->getAttr<IFuncAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 1;"},{p,1980,"static void handleIFuncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 1;"},{p,2003,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isThisDeclarationADefinition()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 0;"},{p,2009,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else {\n    if (VD->isThisDeclarationADefinition() && VD->isExternallyVisible()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << VD << 0;"},{p,7662,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(D->getLocation(), diag::err_alias_is_definition) << FD << 0;"}}
[d]=p,
[c]={"2dc814664385",1421658028,"Sema: Variable definitions cannot be __attribute__((alias))"},
[k]={{r,6968,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  if (auto *VD = dyn_cast<VarDecl>(&ND)) {\n    if (VD->hasInit()) {\n      if (const auto *Attr = VD->getAttr<AliasAttr>()) {\n        S.Diag(Attr->getLocation(), diag::err_alias_is_definition) << VD << 0;"},{r,15265,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // Check for defining attributes before the check for redefinition.\n  if (const auto *Attr = FD->getAttr<AliasAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 0;"},{r,15270,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  if (const auto *Attr = FD->getAttr<IFuncAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 1;"},{q,1980,"static void handleIFuncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 1;"},{q,2003,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isThisDeclarationADefinition()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 0;"},{q,2009,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else {\n    if (VD->isThisDeclarationADefinition() && VD->isExternallyVisible()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << VD << 0;"},{q,7662,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(D->getLocation(), diag::err_alias_is_definition) << FD << 0;"}},
[o]={
["clang/test/Sema/alias-redefinition.c"]={"clang/test/Sema/alias-redefinition.c:23:19: error: definition \'fun5\' cannot also be an alias","clang/test/Sema/alias-redefinition.c:25:23: error: definition \'var1\' cannot also be an alias","clang/test/Sema/alias-redefinition.c:26:30: error: definition \'var2\' cannot also be an alias"}
}
},
},
["err_alias_not_supported_on_darwin"]={
["err_alias_not_supported_on_darwin"]={
[h]="aliases are not supported on darwin",
[j]=n,
[i]=m,
[b]="aliases are not supported on darwin",
[g]=l,
[f]="aliases are not supported on darwin",
[f]="aliases are not supported on darwin",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="aliases are not supported on darwin",
[c]={"0017c5fa92ad",1291735403,"Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for."},
[i]=m,
[k]={{q,1993,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.Context.getTargetInfo().getTriple().isOSDarwin()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_darwin);"}},
[j]="aliases are not supported on darwin",
[o]={
[b]=a,
["clang/test/Sema/attr-alias.c"]={"clang/test/Sema/attr-alias.c:5:29: error: aliases are not supported on darwin"}
[h]=o,
}
[d]={"0017c5fa92ad",1291735403,"Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for."},
[k]={{p,1993,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.Context.getTargetInfo().getTriple().isOSDarwin()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_darwin);"}}
},
},
["err_alias_not_supported_on_nvptx"]={
["err_alias_not_supported_on_nvptx"]={
[h]="CUDA does not support aliases",
[j]=n,
[i]=m,
[b]="CUDA does not support aliases",
[g]=l,
[f]="CUDA does not support aliases",
[f]="CUDA does not support aliases",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="CUDA does not support aliases",
[c]={"a8f0254bc1a4",1453584490,"[CUDA] Reject the alias attribute in CUDA device code."},
[i]=m,
[k]={{q,1997,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.Context.getTargetInfo().getTriple().isNVPTX()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_nvptx);"}},
[j]="CUDA does not support aliases",
[o]={
[b]=a,
["clang/test/SemaCUDA/alias.cu"]={"clang/test/SemaCUDA/alias.cu:6:16: error: CUDA does not support aliases"}
[h]=o,
}
[d]={"a8f0254bc1a4",1453584490,"[CUDA] Reject the alias attribute in CUDA device code."},
[k]={{p,1997,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.Context.getTargetInfo().getTriple().isNVPTX()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_nvptx);"}}
},
},
["err_alias_template_extra_headers"]={
["err_alias_template_extra_headers"]={
[h]="extraneous template parameter list in alias template declaration",
[j]=n,
[i]=m,
[b]="extraneous template parameter list in alias template declaration",
[g]=l,
[f]="extraneous template parameter list in alias template declaration",
[f]="extraneous template parameter list in alias template declaration",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="extraneous template parameter list in alias template declaration",
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[i]=m,
[k]={{w,13299,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (TemplateParamLists.size() != 1) {\n      Diag(UsingLoc, diag::err_alias_template_extra_headers) << SourceRange(TemplateParamLists[1]->getTemplateLoc(), TemplateParamLists[TemplateParamLists.size() - 1]->getRAngleLoc());"}},
[j]="extraneous template parameter list in alias template declaration",
[o]={
[b]=a,
["clang/test/SemaCXX/alias-template.cpp"]={"clang/test/SemaCXX/alias-template.cpp:139:45: error: extraneous template parameter list in alias template declaration"}
[h]=o,
}
[d]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[k]={{v,13299,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (TemplateParamLists.size() != 1) {\n      Diag(UsingLoc, diag::err_alias_template_extra_headers) << SourceRange(TemplateParamLists[1]->getTemplateLoc(), TemplateParamLists[TemplateParamLists.size() - 1]->getRAngleLoc());"}}
},
},
["err_alias_to_undefined"]={
["err_alias_to_undefined"]={
[f]="... must point to a defined ...function",
[h]="... must point to a defined ...function",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{alias|ifunc}0 must point to a defined %select{variable or |}1function",
[i]=m,
[i]=m,
[j]="(?:alias|ifunc) must point to a defined (?:variable or |)function",
[b]="%select{alias|ifunc}0 must point to a defined %select{variable or |}1function",
[b]=a,
[g]=l,
[h]=a,
[f]="(?:alias|ifunc) must point to a defined (?:variable or |)function",
[d]={"0fad0d772433",1382449866,"This patch causes clang to reject alias attributes that point to undefined"},
[e]=a,
[k]={{"clang/lib/CodeGen/CodeGenModule.cpp",578,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  if (GV->isDeclaration()) {\n    Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"},{"clang/lib/CodeGen/CodeGenModule.cpp",602,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  if (IsIFunc) {\n    if (!F) {\n      Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"}}
[d]=a,
[c]={"0fad0d772433",1382449866,"This patch causes clang to reject alias attributes that point to undefined"},
[k]={{"clang/lib/CodeGen/CodeGenModule.cpp",578,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  if (GV->isDeclaration()) {\n    Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"},{"clang/lib/CodeGen/CodeGenModule.cpp",602,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  if (IsIFunc) {\n    if (!F) {\n      Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"}},
[o]={
["clang/test/Sema/attr-alias-elf.c"]={"clang/test/Sema/attr-alias-elf.c:7:30: error: alias must point to a defined variable or function","clang/test/Sema/attr-alias-elf.c:10:30: error: alias must point to a defined variable or function","clang/test/Sema/attr-alias-elf.c:49:30: error: alias must point to a defined variable or function","clang/test/Sema/attr-alias-elf.c:52:30: error: alias must point to a defined variable or function","clang/test/Sema/attr-alias-elf.c:56:30: error: alias must point to a defined variable or function"}
}
},
},
["err_align_value_attribute_argument_not_int"]={
["err_align_value_attribute_argument_not_int"]={
[h]="\'align_value\' attribute requires integer constant",
[j]=n,
[i]=m,
[b]="\'align_value\' attribute requires integer constant",
[g]=l,
[f]="\'align_value\' attribute requires integer constant",
[f]="\'align_value\' attribute requires integer constant",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'align_value\' attribute requires integer constant",
[c]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute"},
[i]=m,
[k]={{q,4331,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!E->isValueDependent()) {\n    ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_align_value_attribute_argument_not_int);"}},
[j]="\'align_value\' attribute requires integer constant",
[o]={
[b]=a,
["clang/test/Sema/align_value.c"]={"clang/test/Sema/align_value.c:23:45: error: \'align_value\' attribute requires integer constant"}
[h]=o,
}
[d]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute"},
[k]={{p,4331,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!E->isValueDependent()) {\n    ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_align_value_attribute_argument_not_int);"}}
},
},
["err_alignas_attribute_wrong_decl_type"]={
["err_alignas_attribute_wrong_decl_type"]={
[f]="A attribute cannot be applied to ...",
[h]="A attribute cannot be applied to ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute cannot be applied to %select{a function parameter|a variable with \'register\' storage class|a \'catch\' variable|a bit-field|an enumeration}1",
[i]=m,
[i]=m,
[j]="(.*?) attribute cannot be applied to (?:a function parameter|a variable with \'register\' storage class|a \'catch\' variable|a bit\\-field|an enumeration)",
[b]="%0 attribute cannot be applied to %select{a function parameter|a variable with \'register\' storage class|a \'catch\' variable|a bit-field|an enumeration}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute cannot be applied to (?:a function parameter|a variable with \'register\' storage class|a \'catch\' variable|a bit\\-field|an enumeration)",
[d]={"1dba27cd4942",1359450129,"Implement C++11 [dcl.align]p1 and C11 6.7.5/2 rules for alignas and _Alignas."},
[e]=a,
[k]={{p,4435,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  if (DiagKind != -1) {\n    return S.Diag(AttrLoc, diag::err_alignas_attribute_wrong_decl_type) << &Attr << DiagKind;"}}
[d]=p,
[c]={"1dba27cd4942",1359450129,"Implement C++11 [dcl.align]p1 and C11 6.7.5/2 rules for alignas and _Alignas."},
[k]={{q,4435,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  if (DiagKind != -1) {\n    return S.Diag(AttrLoc, diag::err_alignas_attribute_wrong_decl_type) << &Attr << DiagKind;"}},
[o]={
["clang/test/SemaCXX/attr-cxx0x.cpp"]={"clang/test/SemaCXX/attr-cxx0x.cpp:11:16: error: \'alignas\' attribute cannot be applied to a bit-field","clang/test/SemaCXX/attr-cxx0x.cpp:14:8: error: \'alignas\' attribute cannot be applied to a function parameter","clang/test/SemaCXX/attr-cxx0x.cpp:15:3: error: \'alignas\' attribute cannot be applied to a variable with \'register\' storage class","clang/test/SemaCXX/attr-cxx0x.cpp:17:12: error: \'alignas\' attribute cannot be applied to a \'catch\' variable"}
}
},
},
["err_alignas_mismatch"]={
["err_alignas_mismatch"]={
[f]="redeclaration has different alignment requirement (A vs B)",
[h]="redeclaration has different alignment requirement (A vs B)",
[c]=l,
[j]=n,
[e]=n,
[g]="redeclaration has different alignment requirement (%1 vs %0)",
[i]=m,
[i]=m,
[j]="redeclaration has different alignment requirement \\((.*?) vs (.*?)\\)",
[b]="redeclaration has different alignment requirement (%1 vs %0)",
[b]=a,
[g]=l,
[h]=o,
[f]="redeclaration has different alignment requirement \\((.*?) vs (.*?)\\)",
[d]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[e]=a,
[k]={{q,2841,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  if (OldAlignasAttr && NewAlignasAttr && OldAlign != NewAlign) {\n    if (OldAlign != NewAlign) {\n      S.Diag(NewAlignasAttr->getLocation(), diag::err_alignas_mismatch) << (unsigned)S.Context.toCharUnitsFromBits(OldAlign).getQuantity() << (unsigned)S.Context.toCharUnitsFromBits(NewAlign).getQuantity();"}}
[d]=p,
[c]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[k]={{r,2841,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  if (OldAlignasAttr && NewAlignasAttr && OldAlign != NewAlign) {\n    if (OldAlign != NewAlign) {\n      S.Diag(NewAlignasAttr->getLocation(), diag::err_alignas_mismatch) << (unsigned)S.Context.toCharUnitsFromBits(OldAlign).getQuantity() << (unsigned)S.Context.toCharUnitsFromBits(NewAlign).getQuantity();"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp:6:1: error: redeclaration has different alignment requirement (4 vs 8)"}
}
},
},
["err_alignas_missing_on_definition"]={
["err_alignas_missing_on_definition"]={
[f]="A must be specified on definition if it is specified on any declaration",
[h]="A must be specified on definition if it is specified on any declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 must be specified on definition if it is specified on any declaration",
[i]=m,
[i]=m,
[j]="(.*?) must be specified on definition if it is specified on any declaration",
[b]="%0 must be specified on definition if it is specified on any declaration",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) must be specified on definition if it is specified on any declaration",
[d]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[e]=a,
[k]={{q,2857,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {\n    S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) << OldAlignasAttr;"},{q,3085,"/// 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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<C11NoReturnAttr>(NewAttribute)) {\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n      if (AA->isAlignas()) {\n        S.Diag(Def->getLocation(), diag::err_alignas_missing_on_definition) << AA;"}}
[d]=p,
[c]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[k]={{r,2857,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {\n    S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) << OldAlignasAttr;"},{r,3085,"/// 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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<C11NoReturnAttr>(NewAttribute)) {\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n      if (AA->isAlignas()) {\n        S.Diag(Def->getLocation(), diag::err_alignas_missing_on_definition) << AA;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:18:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:25:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:27:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:33:8: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:43:8: error: \'alignas\' must be specified on definition if it is specified on any declaration"}
}
},
},
["err_alignas_underaligned"]={
["err_alignas_underaligned"]={
[f]="requested alignment is less than minimum alignment of A for type B",
[h]="requested alignment is less than minimum alignment of A for type B",
[c]=l,
[j]=n,
[e]=n,
[g]="requested alignment is less than minimum alignment of %1 for type %0",
[i]=m,
[i]=m,
[j]="requested alignment is less than minimum alignment of (.*?) for type (.*?)",
[b]="requested alignment is less than minimum alignment of %1 for type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="requested alignment is less than minimum alignment of (.*?) for type (.*?)",
[d]={"848e1f19605a",1359706328,"Implement [dcl.align]p5 and C11 6.7.5/4: alignas cannot underalign."},
[e]=a,
[k]={{p,4616,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  if (Align && DiagTy->isSizelessType()) {\n  } else if (AlignasAttr && Align) {\n    if (NaturalAlign > RequestedAlign)\n      Diag(AlignasAttr->getLocation(), diag::err_alignas_underaligned) << DiagTy << (unsigned)NaturalAlign.getQuantity();"}}
[d]=p,
[c]={"848e1f19605a",1359706328,"Implement [dcl.align]p5 and C11 6.7.5/4: alignas cannot underalign."},
[k]={{q,4616,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  if (Align && DiagTy->isSizelessType()) {\n  } else if (AlignasAttr && Align) {\n    if (NaturalAlign > RequestedAlign)\n      Diag(AlignasAttr->getLocation(), diag::err_alignas_underaligned) << DiagTy << (unsigned)NaturalAlign.getQuantity();"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:3:1: error: requested alignment is less than minimum alignment of 4 for type \'int\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:4:12: error: requested alignment is less than minimum alignment of 4 for type \'int\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:6:23: error: requested alignment is less than minimum alignment of 4 for type \'int\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:9:19: error: requested alignment is less than minimum alignment of 4 for type \'int\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:12:1: error: requested alignment is less than minimum alignment of 4 for type \'int\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:21:8: error: requested alignment is less than minimum alignment of 4 for type \'S2\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:24:8: error: requested alignment is less than minimum alignment of 8 for type \'S3\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:27:8: error: requested alignment is less than minimum alignment of 8 for type \'S4\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:30:3: error: requested alignment is less than minimum alignment of 8 for type \'S1\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:40:7: error: requested alignment is less than minimum alignment of 8 for type \'S1\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:41:7: error: requested alignment is less than minimum alignment of 8 for type \'S6\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:42:7: error: requested alignment is less than minimum alignment of 8 for type \'S7\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:45:8: error: requested alignment is less than minimum alignment of 2 for type \'X<1, 2, char>\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:46:3: error: requested alignment is less than minimum alignment of 2 for type \'short\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:45:8: error: requested alignment is less than minimum alignment of 2 for type \'X<1, 1, short>\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:46:3: error: requested alignment is less than minimum alignment of 2 for type \'short\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:46:3: error: requested alignment is less than minimum alignment of 8 for type \'S1\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:45:8: error: requested alignment is less than minimum alignment of 8 for type \'X<4, 4, S1>\'","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp:60:3: error: requested alignment is less than minimum alignment of 2 for type \'short\'"}
}
},
},
["err_aligned_allocation_unavailable"]={
["err_aligned_allocation_unavailable"]={
[f]="aligned ... function of type \'A\' is ... available on B...",
[h]="aligned ... function of type \'A\' is ... available on B...",
[c]=l,
[j]=n,
[e]=n,
[g]="aligned %select{allocation|deallocation}0 function of type \'%1\' is %select{only|not}4 available on %2%select{ %3 or newer|}4",
[i]=m,
[i]=m,
[j]="aligned (?:allocation|deallocation) function of type \'(.*?)\' is (?:only|not) available on (.*?)(?: (.*?) or newer|)",
[b]="aligned %select{allocation|deallocation}0 function of type \'%1\' is %select{only|not}4 available on %2%select{ %3 or newer|}4",
[b]=a,
[g]=l,
[h]=o,
[f]="aligned (?:allocation|deallocation) function of type \'(.*?)\' is (?:only|not) available on (.*?)(?: (.*?) or newer|)",
[d]={"e5015abf185b",1533337957,"[Preprocessor] Allow libc++ to detect when aligned allocation is unavailable."},
[e]=a,
[k]={{x,1968,"// Emit a diagnostic if an aligned allocation/deallocation function that is not\n// implemented in the standard library is selected.\nvoid Sema::diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, SourceLocation Loc) {\n  if (isUnavailableAlignedAllocationFunction(FD)) {\n    Diag(Loc, diag::err_aligned_allocation_unavailable) << IsDelete << FD.getType().getAsString() << OSName << OSVersion.getAsString() << OSVersion.empty();"}}
[d]=p,
[c]={"e5015abf185b",1533337957,"[Preprocessor] Allow libc++ to detect when aligned allocation is unavailable."},
[k]={{y,1968,"// Emit a diagnostic if an aligned allocation/deallocation function that is not\n// implemented in the standard library is selected.\nvoid Sema::diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, SourceLocation Loc) {\n  if (isUnavailableAlignedAllocationFunction(FD)) {\n    Diag(Loc, diag::err_aligned_allocation_unavailable) << IsDelete << FD.getType().getAsString() << OSName << OSVersion.getAsString() << OSVersion.empty();"}},
[o]={
["clang/test/SemaCXX/unavailable_aligned_allocation.cpp"]={"clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:54:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: error: aligned allocation function of type \'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: error: aligned deallocation function of type \'void (void *, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:59:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: error: aligned allocation function of type \'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: error: aligned deallocation function of type \'void (void *, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:140:16: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:173:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:174:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:175:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:176:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:177:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:178:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS"}
}
},
},
["err_aligned_attribute_argument_not_int"]={
["err_aligned_attribute_argument_not_int"]={
[h]="\'aligned\' attribute requires integer constant",
[j]=n,
[i]=m,
[b]="\'aligned\' attribute requires integer constant",
[g]=l,
[f]="\'aligned\' attribute requires integer constant",
[f]="\'aligned\' attribute requires integer constant",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'aligned\' attribute requires integer constant",
[c]={"e2b3744890f6",1336171132,"Move Sema::VerifyIntegerConstantExpression() and"},
[i]=m,
[k]={{q,4473,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_aligned_attribute_argument_not_int);"}},
[j]="\'aligned\' attribute requires integer constant",
[o]={
[b]=a,
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:227:9: error: \'aligned\' attribute requires integer constant"}
[h]=o,
}
[d]={"e2b3744890f6",1336171132,"Move Sema::VerifyIntegerConstantExpression() and"},
[k]={{p,4473,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_aligned_attribute_argument_not_int);"}}
},
},
["err_alignment_dependent_typedef_name"]={
["err_alignment_dependent_typedef_name"]={
[h]="requested alignment is dependent but declaration is not dependent",
[j]=n,
[i]=m,
[b]="requested alignment is dependent but declaration is not dependent",
[g]=l,
[f]="requested alignment is dependent but declaration is not dependent",
[f]="requested alignment is dependent but declaration is not dependent",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="requested alignment is dependent but declaration is not dependent",
[c]={"26a1e0ef760a",1428374229,"[Sema] Don\'t permit dependent alignments on non-dependent typedef-names"},
[i]=m,
[k]={{q,4457,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (E->isValueDependent()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"alignment-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << E->getSourceRange();"},{q,4547,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  if (TS->getType()->isDependentType()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"type-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << TS->getTypeLoc().getSourceRange();"}},
[j]="requested alignment is dependent but declaration is not dependent",
[o]={
[b]=a,
["clang/test/SemaCXX/alignof.cpp"]={"clang/test/SemaCXX/alignof.cpp:91:30: error: requested alignment is dependent but declaration is not dependent","clang/test/SemaCXX/alignof.cpp:97:26: error: requested alignment is dependent but declaration is not dependent"}
[h]=o,
}
[d]={"26a1e0ef760a",1428374229,"[Sema] Don\'t permit dependent alignments on non-dependent typedef-names"},
[k]={{p,4457,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (E->isValueDependent()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"alignment-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << E->getSourceRange();"},{p,4547,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  if (TS->getType()->isDependentType()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"type-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << TS->getTypeLoc().getSourceRange();"}}
},
},
["err_alignment_not_power_of_two"]={
["err_alignment_not_power_of_two"]={
[h]="requested alignment is not a power of 2",
[j]=n,
[i]=m,
[b]="requested alignment is not a power of 2",
[g]=l,
[f]="requested alignment is not a power of 2",
[f]="requested alignment is not a power of 2",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="requested alignment is not a power of 2",
[c]={"bcc06085a894",1410130694,"Add __builtin_assume and __builtin_assume_aligned using @llvm.assume."},
[i]=m,
[k]={{t,339,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (!AlignValue.isPowerOf2()) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_not_power_of_two);"},{t,8631,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << Arg->getSourceRange();"},{t,8674,"/// Handle __builtin_assume_aligned. This is declared\n/// as (const void*, size_t, ...) and can take one optional constant int arg.\nbool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!SecondArg->isValueDependent()) {\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << SecondArg->getSourceRange();"},{q,1711,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (!I->isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{q,4336,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!E->isValueDependent()) {\n    if (!Alignment.isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{q,4494,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // C++11 [dcl.align]p2:\n  //  -- if the constant expression evaluates to zero, the alignment\n  //      specifier shall have no effect\n  // C11 6.7.5p6:\n  //  An alignment specification of zero has no effect.\n  if (!(TmpAttr.isAlignas() && !Alignment)) {\n    if (!llvm::isPowerOf2_64(AlignVal)) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"}},
[j]="requested alignment is not a power of 2",
[o]={
[b]=a,
["clang/test/Sema/align_value.c"]={"clang/test/Sema/align_value.c:8:33: error: requested alignment is not a power of 2","clang/test/Sema/align_value.c:11:33: error: requested alignment is not a power of 2"}
[h]=o,
}
[d]={"bcc06085a894",1410130694,"Add __builtin_assume and __builtin_assume_aligned using @llvm.assume."},
[k]={{s,339,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (!AlignValue.isPowerOf2()) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_not_power_of_two);"},{s,8631,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << Arg->getSourceRange();"},{s,8674,"/// Handle __builtin_assume_aligned. This is declared\n/// as (const void*, size_t, ...) and can take one optional constant int arg.\nbool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!SecondArg->isValueDependent()) {\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << SecondArg->getSourceRange();"},{p,1711,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (!I->isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{p,4336,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!E->isValueDependent()) {\n    if (!Alignment.isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{p,4494,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // C++11 [dcl.align]p2:\n  //  -- if the constant expression evaluates to zero, the alignment\n  //      specifier shall have no effect\n  // C11 6.7.5p6:\n  //  An alignment specification of zero has no effect.\n  if (!(TmpAttr.isAlignas() && !Alignment)) {\n    if (!llvm::isPowerOf2_64(AlignVal)) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"}}
},
},
["err_alignment_too_big"]={
["err_alignment_too_big"]={
[f]="requested alignment must be A or smaller",
[h]="requested alignment must be A or smaller",
[c]=l,
[j]=n,
[e]=n,
[g]="requested alignment must be %0 or smaller",
[i]=m,
[i]=m,
[j]="requested alignment must be (.*?) or smaller",
[b]="requested alignment must be %0 or smaller",
[b]=a,
[g]=l,
[h]=o,
[f]="requested alignment must be (.*?) or smaller",
[d]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align"},
[e]=a,
[k]={{s,334,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (llvm::APSInt::compareValues(AlignValue, MaxValue) > 0) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_big) << toString(MaxValue, 10);"},{s,8639,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (Result > std::numeric_limits<int32_t>::max())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) << std::numeric_limits<int32_t>::max() << Arg->getSourceRange();"}}
[d]=p,
[c]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align"},
[k]={{t,334,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (llvm::APSInt::compareValues(AlignValue, MaxValue) > 0) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_big) << toString(MaxValue, 10);"},{t,8639,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (Result > std::numeric_limits<int32_t>::max())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) << std::numeric_limits<int32_t>::max() << Arg->getSourceRange();"}},
[o]={
["clang/test/Sema/builtin-align.c"]={"clang/test/Sema/builtin-align.c:93:26: error: requested alignment must be 128 or smaller","clang/test/Sema/builtin-align.c:99:33: error: requested alignment must be 2147483648 or smaller","clang/test/Sema/builtin-align.c:100:33: error: requested alignment must be 2147483648 or smaller","clang/test/Sema/builtin-align.c:101:42: error: requested alignment must be 9223372036854775808 or smaller","clang/test/Sema/builtin-align.c:102:46: error: requested alignment must be 9223372036854775808 or smaller"}
}
},
},
["err_alignment_too_small"]={
["err_alignment_too_small"]={
[f]="requested alignment must be A or greater",
[h]="requested alignment must be A or greater",
[c]=l,
[j]=n,
[e]=n,
[g]="requested alignment must be %0 or greater",
[i]=m,
[i]=m,
[j]="requested alignment must be (.*?) or greater",
[b]="requested alignment must be %0 or greater",
[b]=a,
[g]=l,
[h]=o,
[f]="requested alignment must be (.*?) or greater",
[d]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align"},
[e]=a,
[k]={{s,330,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (AlignValue < 1) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_small) << 1;"},{s,8635,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (Result < Context.getCharWidth())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) << (unsigned)Context.getCharWidth() << Arg->getSourceRange();"}}
[d]=p,
[c]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align"},
[k]={{t,330,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (AlignValue < 1) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_small) << 1;"},{t,8635,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (Result < Context.getCharWidth())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) << (unsigned)Context.getCharWidth() << Arg->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:47:64: error: requested alignment must be 1 or greater"}
}
},
},
["err_alignof_member_of_incomplete_type"]={
["err_alignof_member_of_incomplete_type"]={
[h]="invalid application of \'alignof\' to a field of a class still being defined",
[j]=n,
[i]=m,
[b]="invalid application of \'alignof\' to a field of a class still being defined",
[g]=l,
[f]="invalid application of \'alignof\' to a field of a class still being defined",
[f]="invalid application of \'alignof\' to a field of a class still being defined",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="invalid application of \'alignof\' to a field of a class still being defined",
[c]={"768439eb2e7e",1367826034,"Require the containing type to be complete when we see"},
[i]=m,
[k]={{z,4687,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // If it\'s a field, require the containing struct to have a\n  // complete definition so that we can compute the layout.\n  //\n  // This can happen in C++11 onwards, either by naming the member\n  // in a way that is not transformed into a member access expression\n  // (in an unevaluated operand, for instance), or by naming the member\n  // in a trailing-return-type.\n  //\n  // For the record, since __alignof__ on expressions is a GCC\n  // extension, GCC seems to permit this but always gives the\n  // nonsensical answer 0.\n  //\n  // We don\'t really need the layout here --- we could instead just\n  // directly check for all the appropriate alignment-lowing\n  // attributes --- but that would require duplicating a lot of\n  // logic that just isn\'t worth duplicating for such a marginal\n  // use-case.\n  if (FieldDecl *FD = dyn_cast_or_null<FieldDecl>(D)) {\n    // Fast path this check, since we at least know the record has a\n    // definition if we can find a member of it.\n    if (!FD->getParent()->isCompleteDefinition()) {\n      S.Diag(E->getExprLoc(), diag::err_alignof_member_of_incomplete_type) << E->getSourceRange();"}},
[j]="invalid application of \'alignof\' to a field of a class still being defined",
[o]={
[b]=a,
["clang/test/SemaCXX/alignof.cpp"]={"clang/test/SemaCXX/alignof.cpp:7:39: error: invalid application of \'alignof\' to a field of a class still being defined","clang/test/SemaCXX/alignof.cpp:8:39: error: invalid application of \'alignof\' to a field of a class still being defined","clang/test/SemaCXX/alignof.cpp:9:38: error: invalid application of \'alignof\' to a field of a class still being defined"}
[h]=o,
}
[d]={"768439eb2e7e",1367826034,"Require the containing type to be complete when we see"},
[k]={{y,4687,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // If it\'s a field, require the containing struct to have a\n  // complete definition so that we can compute the layout.\n  //\n  // This can happen in C++11 onwards, either by naming the member\n  // in a way that is not transformed into a member access expression\n  // (in an unevaluated operand, for instance), or by naming the member\n  // in a trailing-return-type.\n  //\n  // For the record, since __alignof__ on expressions is a GCC\n  // extension, GCC seems to permit this but always gives the\n  // nonsensical answer 0.\n  //\n  // We don\'t really need the layout here --- we could instead just\n  // directly check for all the appropriate alignment-lowing\n  // attributes --- but that would require duplicating a lot of\n  // logic that just isn\'t worth duplicating for such a marginal\n  // use-case.\n  if (FieldDecl *FD = dyn_cast_or_null<FieldDecl>(D)) {\n    // Fast path this check, since we at least know the record has a\n    // definition if we can find a member of it.\n    if (!FD->getParent()->isCompleteDefinition()) {\n      S.Diag(E->getExprLoc(), diag::err_alignof_member_of_incomplete_type) << E->getSourceRange();"}}
},
},
["err_allocation_of_abstract_type"]={
["err_allocation_of_abstract_type"]={
[f]="allocating an object of abstract class type A",
[h]="allocating an object of abstract class type A",
[c]=l,
[j]=n,
[e]=n,
[g]="allocating an object of abstract class type %0",
[i]=m,
[i]=m,
[j]="allocating an object of abstract class type (.*?)",
[b]="allocating an object of abstract class type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="allocating an object of abstract class type (.*?)",
[d]={"0d5ca29b7836",1237830550,"It\'s an error to try to allocate an abstract object using new."},
[e]=a,
[k]={{w,1885,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"},{x,2468,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))"},{x,4120,"static ExprResult BuildCXXCastArgument(Sema &S, SourceLocation CastLoc, QualType Ty, CastKind Kind, CXXMethodDecl *Method, DeclAccessPair FoundDecl, bool HadMultipleCandidates, Expr *From) {\n  case CK_ConstructorConversion: {\n    if (S.RequireNonAbstractType(CastLoc, Ty, diag::err_allocation_of_abstract_type))"},{E,8719,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // C++ [class.abstract]p2:\n  //  no objects of an abstract class can be created except as subobjects\n  //  of a class derived from it\n  auto checkAbstractType = [&](QualType T) -> bool {\n    return S.RequireNonAbstractType(Kind.getLocation(), T, diag::err_allocation_of_abstract_type);"}}
[d]=p,
[c]={"0d5ca29b7836",1237830550,"It\'s an error to try to allocate an abstract object using new."},
[k]={{x,1885,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"},{y,2468,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))"},{y,4120,"static ExprResult BuildCXXCastArgument(Sema &S, SourceLocation CastLoc, QualType Ty, CastKind Kind, CXXMethodDecl *Method, DeclAccessPair FoundDecl, bool HadMultipleCandidates, Expr *From) {\n  case CK_ConstructorConversion: {\n    if (S.RequireNonAbstractType(CastLoc, Ty, diag::err_allocation_of_abstract_type))"},{H,8719,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // C++ [class.abstract]p2:\n  //  no objects of an abstract class can be created except as subobjects\n  //  of a class derived from it\n  auto checkAbstractType = [&](QualType T) -> bool {\n    return S.RequireNonAbstractType(Kind.getLocation(), T, diag::err_allocation_of_abstract_type);"}},
[o]={
["clang/test/CXX/class.derived/class.abstract/p2.cpp"]={"clang/test/CXX/class.derived/class.abstract/p2.cpp:16:5: error: allocating an object of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p2.cpp:17:5: error: allocating an object of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p2.cpp:18:5: error: allocating an object of abstract class type \'A\'"}
}
},
},
["err_altivec_empty_initializer"]={
["err_altivec_empty_initializer"]={
[h]="expected initializer",
[j]=n,
[i]=m,
[b]="expected initializer",
[g]=l,
[f]="expected initializer",
[f]="expected initializer",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="expected initializer",
[c]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);"},
[i]=m,
[k]={{z,8445,"ExprResult Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D, ParsedType &Ty, SourceLocation RParenLoc, Expr *CastExpr) {\n  if ((getLangOpts().AltiVec || getLangOpts().ZVector || getLangOpts().OpenCL) && castType->isVectorType() && (PE || PLE)) {\n    if (PLE && PLE->getNumExprs() == 0) {\n      Diag(PLE->getExprLoc(), diag::err_altivec_empty_initializer);"}}
[j]="expected initializer",
[b]=a,
[h]=o,
[d]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);"},
[k]={{y,8445,"ExprResult Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D, ParsedType &Ty, SourceLocation RParenLoc, Expr *CastExpr) {\n  if ((getLangOpts().AltiVec || getLangOpts().ZVector || getLangOpts().OpenCL) && castType->isVectorType() && (PE || PLE)) {\n    if (PLE && PLE->getNumExprs() == 0) {\n      Diag(PLE->getExprLoc(), diag::err_altivec_empty_initializer);"}}
},
},
["err_ambiguous_base_to_derived_cast"]={
["err_ambiguous_base_to_derived_cast"]={
[f]="ambiguous cast from base A to derived B:C",
[h]="ambiguous cast from base A to derived B:C",
[c]=l,
[j]=n,
[e]=n,
[g]="ambiguous cast from base %0 to derived %1:%2",
[i]=m,
[i]=m,
[j]="ambiguous cast from base (.*?) to derived (.*?)\\:(.*?)",
[b]="ambiguous cast from base %0 to derived %1:%2",
[b]=a,
[g]=l,
[h]=o,
[f]="ambiguous cast from base (.*?) to derived (.*?)\\:(.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,1714,"/// 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  if (Paths.isAmbiguous(SrcType.getUnqualifiedType())) {\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast) << QualType(SrcType).getUnqualifiedType() << QualType(DestType).getUnqualifiedType() << PathDisplayStr << OpRange;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,1714,"/// 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  if (Paths.isAmbiguous(SrcType.getUnqualifiedType())) {\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast) << QualType(SrcType).getUnqualifiedType() << QualType(DestType).getUnqualifiedType() << PathDisplayStr << OpRange;"}},
[o]={
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:130:9: error: ambiguous cast from base \'A\' to derived \'H\':","clang/test/SemaCXX/cstyle-cast.cpp:131:9: error: ambiguous cast from base \'A\' to derived \'H\':"}
}
},
},
["err_ambiguous_delete_operand"]={
["err_ambiguous_delete_operand"]={
[f]="ambiguous conversion of delete expression of type A to a pointer",
[h]="ambiguous conversion of delete expression of type A to a pointer",
[c]=l,
[j]=n,
[e]=n,
[g]="ambiguous conversion of delete expression of type %0 to a pointer",
[i]=m,
[i]=m,
[j]="ambiguous conversion of delete expression of type (.*?) to a pointer",
[b]="ambiguous conversion of delete expression of type %0 to a pointer",
[b]=a,
[g]=l,
[h]=o,
[f]="ambiguous conversion of delete expression of type (.*?) to a pointer",
[d]={"c34c179f4bcd",1253035307,"Perform overload resolution when selecting a pointer conversion"},
[e]=a,
[k]={{x,3646,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    class DeleteConverter : public ContextualImplicitConverter {\n      SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ambiguous_delete_operand) << T; }"}}
[d]=p,
[c]={"c34c179f4bcd",1253035307,"Perform overload resolution when selecting a pointer conversion"},
[k]={{y,3646,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    class DeleteConverter : public ContextualImplicitConverter {\n      SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ambiguous_delete_operand) << T; }"}},
[o]={
["clang/test/SemaCXX/conversion-delete-expr.cpp"]={"clang/test/SemaCXX/conversion-delete-expr.cpp:14:4: error: ambiguous conversion of delete expression of type \'D\' to a pointer","clang/test/SemaCXX/conversion-delete-expr.cpp:42:4: error: ambiguous conversion of delete expression of type \'D2\' to a pointer","clang/test/SemaCXX/conversion-delete-expr.cpp:59:4: error: ambiguous conversion of delete expression of type \'D3\' to a pointer"}
}
},
},
["err_ambiguous_derived_to_base_conv"]={
["err_ambiguous_derived_to_base_conv"]={
[f]="ambiguous conversion from derived class A to base class B:C",
[h]="ambiguous conversion from derived class A to base class B:C",
[c]=l,
[j]=n,
[e]=n,
[g]="ambiguous conversion from derived class %0 to base class %1:%2",
[i]=m,
[i]=m,
[j]="ambiguous conversion from derived class (.*?) to base class (.*?)\\:(.*?)",
[b]="ambiguous conversion from derived class %0 to base class %1:%2",
[b]=a,
[g]=l,
[h]=o,
[f]="ambiguous conversion from derived class (.*?) to base class (.*?)\\:(.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{v,3167,"bool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, SourceLocation Loc, SourceRange Range, CXXCastPath *BasePath, bool IgnoreAccess) { return CheckDerivedToBaseConversion(Derived, Base, diag::err_upcast_to_inaccessible_base, diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(), BasePath, IgnoreAccess); }"},{Q,3147,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {\n        if (Diagnose) {\n          AmbiguousID = diag::err_ambiguous_derived_to_base_conv;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{w,3167,"bool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, SourceLocation Loc, SourceRange Range, CXXCastPath *BasePath, bool IgnoreAccess) { return CheckDerivedToBaseConversion(Derived, Base, diag::err_upcast_to_inaccessible_base, diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(), BasePath, IgnoreAccess); }"},{T,3147,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {\n        if (Diagnose) {\n          AmbiguousID = diag::err_ambiguous_derived_to_base_conv;"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:62:9: error: ambiguous conversion from derived class \'F\' to base class \'A\':","clang/test/SemaCXX/dynamic-cast.cpp:63:9: error: ambiguous conversion from derived class \'F\' to base class \'A\':"}
}
},
},
["err_ambiguous_destructor"]={
["err_ambiguous_destructor"]={
[f]="destructor of class A is ambiguous",
[h]="destructor of class A is ambiguous",
[c]=l,
[j]=n,
[e]=n,
[g]="destructor of class %0 is ambiguous",
[i]=m,
[i]=m,
[j]="destructor of class (.*?) is ambiguous",
[b]="destructor of class %0 is ambiguous",
[b]=a,
[g]=l,
[h]=o,
[f]="destructor of class (.*?) is ambiguous",
[d]={N,1625925174,M},
[e]=a,
[k]={{q,18540,"/// [class.dtor]p4:\n///  At the end of the definition of a class, overload resolution is\n///  performed among the prospective destructors declared in that class with\n///  an empty argument list to select the destructor for the class, also\n///  known as the selected destructor.\n///\n/// We do the overload resolution here, then mark the selected constructor in the AST.\n/// Later CXXRecordDecl::getDestructor() will return the selected constructor.\nstatic void ComputeSelectedDestructor(Sema &S, CXXRecordDecl *Record) {\n  case OR_Ambiguous:\n    Msg = diag::err_ambiguous_destructor;"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{r,18540,"/// [class.dtor]p4:\n///  At the end of the definition of a class, overload resolution is\n///  performed among the prospective destructors declared in that class with\n///  an empty argument list to select the destructor for the class, also\n///  known as the selected destructor.\n///\n/// We do the overload resolution here, then mark the selected constructor in the AST.\n/// Later CXXRecordDecl::getDestructor() will return the selected constructor.\nstatic void ComputeSelectedDestructor(Sema &S, CXXRecordDecl *Record) {\n  case OR_Ambiguous:\n    Msg = diag::err_ambiguous_destructor;"}},
[o]={
["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:62:17: error: destructor of class \'D<1>\' is ambiguous"}
}
},
},
["err_ambiguous_inherited_constructor"]={
["err_ambiguous_inherited_constructor"]={
[f]="constructor of A inherited from multiple base class subobjects",
[h]="constructor of A inherited from multiple base class subobjects",
[c]=l,
[j]=n,
[e]=n,
[g]="constructor of %0 inherited from multiple base class subobjects",
[i]=m,
[i]=m,
[j]="constructor of (.*?) inherited from multiple base class subobjects",
[b]="constructor of %0 inherited from multiple base class subobjects",
[b]=a,
[g]=l,
[h]=o,
[f]="constructor of (.*?) inherited from multiple base class subobjects",
[d]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[e]=a,
[k]={{v,7302,"class Sema::InheritedConstructorInfo {\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        if (!DiagnosedMultipleConstructedBases) {\n          S.Diag(UseLoc, diag::err_ambiguous_inherited_constructor) << Shadow->getTargetDecl();"}}
[d]=p,
[c]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[k]={{w,7302,"class Sema::InheritedConstructorInfo {\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        if (!DiagnosedMultipleConstructedBases) {\n          S.Diag(UseLoc, diag::err_ambiguous_inherited_constructor) << Shadow->getTargetDecl();"}},
[o]={
["clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp"]={"clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp:23:6: error: constructor of \'A\' inherited from multiple base class subobjects"}
}
},
},
["err_ambiguous_member_multiple_subobject_types"]={
["err_ambiguous_member_multiple_subobject_types"]={
[f]="member A found in multiple base classes of different types",
[h]="member A found in multiple base classes of different types",
[c]=l,
[j]=n,
[e]=n,
[g]="member %0 found in multiple base classes of different types",
[i]=m,
[i]=m,
[j]="member (.*?) found in multiple base classes of different types",
[b]="member %0 found in multiple base classes of different types",
[b]=a,
[g]=l,
[h]=o,
[f]="member (.*?) found in multiple base classes of different types",
[d]={u,1237025389,t},
[e]=a,
[k]={{"clang/lib/Sema/SemaLookup.cpp",2812,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobject_types) << Name << LookupRange;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{"clang/lib/Sema/SemaLookup.cpp",2812,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobject_types) << Name << LookupRange;"}},
[o]={
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:38:19: error: member \'f\' found in multiple base classes of different types"}
}
},
},
["err_ambiguous_member_multiple_subobjects"]={
["err_ambiguous_member_multiple_subobjects"]={
[f]="non-static member A found in multiple base-class subobjects of type B:C",
[h]="non-static member A found in multiple base-class subobjects of type B:C",
[c]=l,
[j]=n,
[e]=n,
[g]="non-static member %0 found in multiple base-class subobjects of type %1:%2",
[i]=m,
[i]=m,
[j]="non\\-static member (.*?) found in multiple base\\-class subobjects of type (.*?)\\:(.*?)",
[b]="non-static member %0 found in multiple base-class subobjects of type %1:%2",
[b]=a,
[g]=l,
[h]=o,
[f]="non\\-static member (.*?) found in multiple base\\-class subobjects of type (.*?)\\:(.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{"clang/lib/Sema/SemaLookup.cpp",2798,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjects: {\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobjects) << Name << SubobjectType << getAmbiguousPathsDisplayString(*Paths) << LookupRange;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{"clang/lib/Sema/SemaLookup.cpp",2798,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjects: {\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobjects) << Name << SubobjectType << getAmbiguousPathsDisplayString(*Paths) << LookupRange;"}},
[o]={
["clang/test/SemaCXX/member-name-lookup.cpp"]={"clang/test/SemaCXX/member-name-lookup.cpp:38:5: error: non-static member \'a\' found in multiple base-class subobjects of type \'A\':","clang/test/SemaCXX/member-name-lookup.cpp:42:5: error: non-static member \'f\' found in multiple base-class subobjects of type \'A\':","clang/test/SemaCXX/member-name-lookup.cpp:54:3: error: non-static member \'a\' found in multiple base-class subobjects of type \'A\':","clang/test/SemaCXX/member-name-lookup.cpp:58:3: error: non-static member \'f\' found in multiple base-class subobjects of type \'A\':","clang/test/SemaCXX/member-name-lookup.cpp:108:5: error: non-static member \'a\' found in multiple base-class subobjects of type \'A\':","clang/test/SemaCXX/member-name-lookup.cpp:129:3: error: non-static member \'a\' found in multiple base-class subobjects of type \'A\':"}
}
},
},
["err_ambiguous_memptr_conv"]={
["err_ambiguous_memptr_conv"]={
[f]="ambiguous conversion from pointer to member of ... class A to pointer to member of ... class B:C",
[h]="ambiguous conversion from pointer to member of ... class A to pointer to member of ... class B:C",
[c]=l,
[j]=n,
[e]=n,
[g]="ambiguous conversion from pointer to member of %select{base|derived}0 class %1 to pointer to member of %select{derived|base}0 class %2:%3",
[i]=m,
[i]=m,
[j]="ambiguous conversion from pointer to member of (?:base|derived) class (.*?) to pointer to member of (?:derived|base) class (.*?)\\:(.*?)",
[b]="ambiguous conversion from pointer to member of %select{base|derived}0 class %1 to pointer to member of %select{derived|base}0 class %2:%3",
[b]=a,
[g]=l,
[h]=o,
[f]="ambiguous conversion from pointer to member of (?:base|derived) class (.*?) to pointer to member of (?:derived|base) class (.*?)\\:(.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,1816,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///  An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///  converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///  where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // B is a base of D. But is it an allowed base? If not, it\'s a hard error.\n  if (Paths.isAmbiguous(Self.Context.getCanonicalType(DestClass))) {\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_memptr_conv) << 1 << SrcClass << DestClass << PathDisplayStr << OpRange;"},{Q,3278,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).getUnqualifiedType())) {\n    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,1816,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///  An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///  converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///  where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // B is a base of D. But is it an allowed base? If not, it\'s a hard error.\n  if (Paths.isAmbiguous(Self.Context.getCanonicalType(DestClass))) {\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_memptr_conv) << 1 << SrcClass << DestClass << PathDisplayStr << OpRange;"},{T,3278,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).getUnqualifiedType())) {\n    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();"}},
[o]={
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:33:25: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test2::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:34:27: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test2::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:52:25: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test4::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:53:27: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test4::Derived\':"}
}
},
},
["err_ambiguous_reference"]={
["err_ambiguous_reference"]={
[f]="reference to A is ambiguous",
[h]="reference to A is ambiguous",
[c]=l,
[j]=n,
[e]=n,
[g]="reference to %0 is ambiguous",
[i]=m,
[i]=m,
[j]="reference to (.*?) is ambiguous",
[b]="reference to %0 is ambiguous",
[b]=a,
[g]=l,
[h]=o,
[f]="reference to (.*?) is ambiguous",
[d]={u,1237025389,t},
[e]=a,
[k]={{"clang/lib/Sema/SemaLookup.cpp",2863,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousReference: {\n    Diag(NameLoc, diag::err_ambiguous_reference) << Name << LookupRange;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{"clang/lib/Sema/SemaLookup.cpp",2863,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousReference: {\n    Diag(NameLoc, diag::err_ambiguous_reference) << Name << LookupRange;"}},
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:28:14: error: reference to \'x\' is ambiguous","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:29:15: error: reference to \'x\' is ambiguous"}
}
},
},
["err_ambiguous_suitable_delete_member_function_found"]={
["err_ambiguous_suitable_delete_member_function_found"]={
[f]="multiple suitable A functions in B",
[h]="multiple suitable A functions in B",
[c]=l,
[j]=n,
[e]=n,
[g]="multiple suitable %0 functions in %1",
[i]=m,
[i]=m,
[j]="multiple suitable (.*?) functions in (.*?)",
[b]="multiple suitable %0 functions in %1",
[b]=a,
[g]=l,
[h]=o,
[f]="multiple suitable (.*?) functions in (.*?)",
[d]={"66a8759400a9",1280881886,"Look through using declarations when deciding whether to use an operator"},
[e]=a,
[k]={{x,3300,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // We found multiple suitable operators; complain about the ambiguity.\n  // FIXME: The standard doesn\'t say to do this; it appears that the intent\n  // is that this should never happen.\n  if (!Matches.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found) << Name << RD;"}}
[d]=p,
[c]={"66a8759400a9",1280881886,"Look through using declarations when deciding whether to use an operator"},
[k]={{y,3300,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // We found multiple suitable operators; complain about the ambiguity.\n  // FIXME: The standard doesn\'t say to do this; it appears that the intent\n  // is that this should never happen.\n  if (!Matches.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found) << Name << RD;"}},
[o]={
["clang/test/CXX/special/class.dtor/p9.cpp"]={"clang/test/CXX/special/class.dtor/p9.cpp:65:6: error: multiple suitable \'operator delete\' functions in \'D\'"}
}
},
},
["err_ambiguous_tag_hiding"]={
["err_ambiguous_tag_hiding"]={
[f]="a type named A is hidden by a declaration in a different namespace",
[h]="a type named A is hidden by a declaration in a different namespace",
[c]=l,
[j]=n,
[e]=n,
[g]="a type named %0 is hidden by a declaration in a different namespace",
[i]=m,
[i]=m,
[j]="a type named (.*?) is hidden by a declaration in a different namespace",
[b]="a type named %0 is hidden by a declaration in a different namespace",
[b]=a,
[g]=l,
[h]=o,
[f]="a type named (.*?) is hidden by a declaration in a different namespace",
[d]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[e]=a,
[k]={{"clang/lib/Sema/SemaLookup.cpp",2838,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousTagHiding: {\n    Diag(NameLoc, diag::err_ambiguous_tag_hiding) << Name << LookupRange;"}}
[d]=p,
[c]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[k]={{"clang/lib/Sema/SemaLookup.cpp",2838,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousTagHiding: {\n    Diag(NameLoc, diag::err_ambiguous_tag_hiding) << Name << LookupRange;"}},
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:32:17: error: a type named \'y\' is hidden by a declaration in a different namespace"}
}
},
},
["err_analyzer_checker_incompatible_analyzer_option"]={
["err_analyzer_checker_incompatible_analyzer_option"]={
[f]="checker cannot be enabled with analyzer option \'A\' == B",
[h]="checker cannot be enabled with analyzer option \'A\' == B",
[c]=l,
[j]=n,
[e]=n,
[g]="checker cannot be enabled with analyzer option \'%0\' == %1",
[i]=m,
[i]=m,
[j]="checker cannot be enabled with analyzer option \'(.*?)\' \\=\\= (.*?)",
[b]="checker cannot be enabled with analyzer option \'%0\' == %1",
[b]=a,
[g]=l,
[h]=a,
[f]="checker cannot be enabled with analyzer option \'(.*?)\' \\=\\= (.*?)",
[d]={tb,1534346725,rb},
[e]=a,
[k]={{"clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp",1064,"bool ento::shouldRegisterContainerModeling(const CheckerManager &mgr) {\n  if (!mgr.getAnalyzerOptions().ShouldAggressivelySimplifyBinaryOperation) {\n    mgr.getASTContext().getDiagnostics().Report(diag::err_analyzer_checker_incompatible_analyzer_option) << \"aggressive-binary-operation-simplification\""}}
[d]=a,
[c]={Hb,1534346725,Fb},
[k]={{"clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp",1064,"bool ento::shouldRegisterContainerModeling(const CheckerManager &mgr) {\n  if (!mgr.getAnalyzerOptions().ShouldAggressivelySimplifyBinaryOperation) {\n    mgr.getASTContext().getDiagnostics().Report(diag::err_analyzer_checker_incompatible_analyzer_option) << \"aggressive-binary-operation-simplification\""}},
[o]={
["clang/test/Analysis/iterator-modeling-no-aggressive-binary-operation-simplification-no-crash.cpp"]={"error: checker cannot be enabled with analyzer option \'aggressive-binary-operation-simplification\' == false","error: checker cannot be enabled with analyzer option \'aggressive-binary-operation-simplification\' == false"}
}
},
},
["err_analyzer_checker_option_invalid_input"]={
["err_analyzer_checker_option_invalid_input"]={
[f]="invalid input for checker option \'A\', that expects B",
[h]="invalid input for checker option \'A\', that expects B",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid input for checker option \'%0\', that expects %1",
[i]=m,
[i]=m,
[j]="invalid input for checker option \'(.*?)\', that expects (.*?)",
[b]="invalid input for checker option \'%0\', that expects %1",
[b]=a,
[g]=l,
[h]=a,
[f]="invalid input for checker option \'(.*?)\', that expects (.*?)",
[d]={tb,1534346725,rb},
[e]=a,
[d]=a,
[c]={Hb,1534346725,Fb},
[k]={{"clang/lib/StaticAnalyzer/Core/CheckerManager.cpp",66,"void CheckerManager::reportInvalidCheckerOptionValue(const CheckerBase *C, StringRef OptionName, StringRef ExpectedValueDesc) const { getDiagnostics().Report(diag::err_analyzer_checker_option_invalid_input) << (llvm::Twine() + C->getTagDescription() + \":\" + OptionName).str() << ExpectedValueDesc; }"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",366,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  if (Option.OptionType == \"bool\") {\n    if (SuppliedValue != \"true\" && SuppliedValue != \"false\") {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"a boolean value\";"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",380,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  if (Option.OptionType == \"int\") {\n    if (HasFailed) {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"an integer value\";"}}
[k]={{"clang/lib/StaticAnalyzer/Core/CheckerManager.cpp",66,"void CheckerManager::reportInvalidCheckerOptionValue(const CheckerBase *C, StringRef OptionName, StringRef ExpectedValueDesc) const { getDiagnostics().Report(diag::err_analyzer_checker_option_invalid_input) << (llvm::Twine() + C->getTagDescription() + \":\" + OptionName).str() << ExpectedValueDesc; }"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",366,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  if (Option.OptionType == \"bool\") {\n    if (SuppliedValue != \"true\" && SuppliedValue != \"false\") {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"a boolean value\";"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",380,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  if (Option.OptionType == \"int\") {\n    if (HasFailed) {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"an integer value\";"}}
},
},
["err_analyzer_checker_option_unknown"]={
["err_analyzer_checker_option_unknown"]={
[f]="checker \'A\' has no option called \'B\'",
[h]="checker \'A\' has no option called \'B\'",
[c]=l,
[j]=n,
[e]=n,
[g]="checker \'%0\' has no option called \'%1\'",
[i]=m,
[i]=m,
[j]="checker \'(.*?)\' has no option called \'(.*?)\'",
[b]="checker \'%0\' has no option called \'%1\'",
[b]=a,
[g]=l,
[h]=a,
[f]="checker \'(.*?)\' has no option called \'(.*?)\'",
[d]={tb,1534346725,rb},
[e]=a,
[d]=a,
[c]={Hb,1534346725,Fb},
[k]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",484,"static void isOptionContainedIn(const CmdLineOptionList &OptionList, StringRef SuppliedChecker, StringRef SuppliedOption, const AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  if (llvm::none_of(OptionList, SameOptName)) {\n    Diags.Report(diag::err_analyzer_checker_option_unknown) << SuppliedChecker << SuppliedOption;"}}
[k]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",484,"static void isOptionContainedIn(const CmdLineOptionList &OptionList, StringRef SuppliedChecker, StringRef SuppliedOption, const AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  if (llvm::none_of(OptionList, SameOptName)) {\n    Diags.Report(diag::err_analyzer_checker_option_unknown) << SuppliedChecker << SuppliedOption;"}}
},
},
["err_analyzer_config_invalid_input"]={
["err_analyzer_config_invalid_input"]={
[f]="invalid input for analyzer-config option \'A\', that expects B value",
[h]="invalid input for analyzer-config option \'A\', that expects B value",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid input for analyzer-config option \'%0\', that expects %1 value",
[i]=m,
[i]=m,
[j]="invalid input for analyzer\\-config option \'(.*?)\', that expects (.*?) value",
[b]="invalid input for analyzer-config option \'%0\', that expects %1 value",
[b]=a,
[g]=l,
[h]=a,
[f]="invalid input for analyzer\\-config option \'(.*?)\', that expects (.*?) value",
[d]={tb,1534346725,rb},
[e]=a,
[k]={{O,1106,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, bool &OptionField, StringRef Name, bool DefaultVal) {\n  if (!PossiblyInvalidVal) {\n    if (Diags)\n      Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"a boolean\";"},{O,1123,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, unsigned &OptionField, StringRef Name, unsigned DefaultVal) {\n  if (Diags && HasFailed)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"an unsigned\";"},{O,1181,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"track-conditions-debug\""},{O,1185,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"ctu-dir\""},{O,1190,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  if (!AnOpts.ModelPath.empty() && !llvm::sys::fs::is_directory(AnOpts.ModelPath))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"model-path\""}}
[d]=a,
[c]={Hb,1534346725,Fb},
[k]={{P,1106,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, bool &OptionField, StringRef Name, bool DefaultVal) {\n  if (!PossiblyInvalidVal) {\n    if (Diags)\n      Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"a boolean\";"},{P,1123,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, unsigned &OptionField, StringRef Name, unsigned DefaultVal) {\n  if (Diags && HasFailed)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"an unsigned\";"},{P,1181,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"track-conditions-debug\""},{P,1185,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"ctu-dir\""},{P,1190,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  if (!AnOpts.ModelPath.empty() && !llvm::sys::fs::is_directory(AnOpts.ModelPath))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"model-path\""}}
},
},
["err_analyzer_config_multiple_values"]={
["err_analyzer_config_multiple_values"]={
[f]="analyzer-config option \'A\' should contain only one \'=\'",
[h]="analyzer-config option \'A\' should contain only one \'=\'",
[c]=l,
[j]=n,
[e]=n,
[g]="analyzer-config option \'%0\' should contain only one \'=\'",
[i]=m,
[i]=m,
[j]="analyzer\\-config option \'(.*?)\' should contain only one \'\\=\'",
[b]="analyzer-config option \'%0\' should contain only one \'=\'",
[b]=a,
[g]=l,
[h]=a,
[f]="analyzer\\-config option \'(.*?)\' should contain only one \'\\=\'",
[d]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify"},
[e]=a,
[k]={{O,1045,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    for (const auto &configVal : configVals) {\n      if (val.contains(\'=\')) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_multiple_values) << configVal;"}}
[d]=a,
[c]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify"},
[k]={{P,1045,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    for (const auto &configVal : configVals) {\n      if (val.contains(\'=\')) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_multiple_values) << configVal;"}}
},
},
["err_analyzer_config_no_value"]={
["err_analyzer_config_no_value"]={
[f]="analyzer-config option \'A\' has a key but no value",
[h]="analyzer-config option \'A\' has a key but no value",
[c]=l,
[j]=n,
[e]=n,
[g]="analyzer-config option \'%0\' has a key but no value",
[i]=m,
[i]=m,
[j]="analyzer\\-config option \'(.*?)\' has a key but no value",
[b]="analyzer-config option \'%0\' has a key but no value",
[b]=a,
[g]=l,
[h]=a,
[f]="analyzer\\-config option \'(.*?)\' has a key but no value",
[d]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify"},
[e]=a,
[k]={{O,1040,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    for (const auto &configVal : configVals) {\n      if (val.empty()) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_no_value) << configVal;"}}
[d]=a,
[c]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify"},
[k]={{P,1040,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    for (const auto &configVal : configVals) {\n      if (val.empty()) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_no_value) << configVal;"}}
},
},
["err_analyzer_config_unknown"]={
["err_analyzer_config_unknown"]={
[f]="unknown analyzer-config \'A\'",
[h]="unknown analyzer-config \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="unknown analyzer-config \'%0\'",
[i]=m,
[i]=m,
[j]="unknown analyzer\\-config \'(.*?)\'",
[b]="unknown analyzer-config \'%0\'",
[b]=a,
[g]=l,
[h]=a,
[f]="unknown analyzer\\-config \'(.*?)\'",
[d]={tb,1534346725,rb},
[e]=a,
[k]={{O,1054,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    for (const auto &configVal : configVals) {\n      // TODO: Check checker options too, possibly in CheckerRegistry.\n      // Leave unknown non-checker configs unclaimed.\n      if (!key.contains(\":\") && Opts.isUnknownAnalyzerConfig(key)) {\n        if (Opts.ShouldEmitErrorsOnInvalidConfigValue)\n          Diags.Report(diag::err_analyzer_config_unknown) << key;"}}
[d]=a,
[c]={Hb,1534346725,Fb},
[k]={{P,1054,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    for (const auto &configVal : configVals) {\n      // TODO: Check checker options too, possibly in CheckerRegistry.\n      // Leave unknown non-checker configs unclaimed.\n      if (!key.contains(\":\") && Opts.isUnknownAnalyzerConfig(key)) {\n        if (Opts.ShouldEmitErrorsOnInvalidConfigValue)\n          Diags.Report(diag::err_analyzer_config_unknown) << key;"}}
},
},
["err_analyzer_not_built_with_z3"]={
["err_analyzer_not_built_with_z3"]={
[f]="analyzer constraint manager \'z3\' is only available if LLVM was built with -DLLVM_ENABLE_Z3_SOLVER=ON",
[h]="analyzer constraint manager \'z3\' is only available if LLVM was built with -DLLVM_ENABLE_Z3_SOLVER=ON",
[c]=l,
[j]=n,
[e]=n,
[g]="analyzer constraint manager \'z3\' is only available if LLVM was built with -DLLVM_ENABLE_Z3_SOLVER=ON",
[i]=m,
[i]=m,
[j]="analyzer constraint manager \'z3\' is only available if LLVM was built with \\-DLLVM_ENABLE_Z3_SOLVER\\=ON",
[b]="analyzer constraint manager \'z3\' is only available if LLVM was built with -DLLVM_ENABLE_Z3_SOLVER=ON",
[b]=a,
[g]=l,
[h]=a,
[f]="analyzer constraint manager \'z3\' is only available if LLVM was built with \\-DLLVM_ENABLE_Z3_SOLVER\\=ON",
[d]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."},
[e]=a,
[k]={{O,960,"#ifndef LLVM_WITH_Z3\n      if (Value == AnalysisConstraints::Z3ConstraintsModel) {\n        Diags.Report(diag::err_analyzer_not_built_with_z3);"}}
[d]=a,
[c]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."},
[k]={{P,960,"#ifndef LLVM_WITH_Z3\n      if (Value == AnalysisConstraints::Z3ConstraintsModel) {\n        Diags.Report(diag::err_analyzer_not_built_with_z3);"}}
},
},
["err_anon_bitfield_has_negative_width"]={
["err_anon_bitfield_has_negative_width"]={
[f]="anonymous bit-field has negative width (A)",
[h]="anonymous bit-field has negative width (A)",
[c]=l,
[j]=n,
[e]=n,
[g]="anonymous bit-field has negative width (%0)",
[i]=m,
[i]=m,
[j]="anonymous bit\\-field has negative width \\((.*?)\\)",
[b]="anonymous bit-field has negative width (%0)",
[b]=a,
[g]=l,
[h]=o,
[f]="anonymous bit\\-field has negative width \\((.*?)\\)",
[d]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017"},
[e]=a,
[k]={{q,17926,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (Value.isSigned() && Value.isNegative()) {\n    return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width) << toString(Value, 10);"}}
[d]=p,
[c]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017"},
[k]={{r,17926,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (Value.isSigned() && Value.isNegative()) {\n    return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width) << toString(Value, 10);"}},
[o]={
["clang/test/Sema/bitfield.c"]={"clang/test/Sema/bitfield.c:26:3: error: anonymous bit-field has negative width (-2)"}
}
},
},
["err_anon_bitfield_member_init"]={
["err_anon_bitfield_member_init"]={
[f]="anonymous bit-field cannot have a default member initializer",
[h]="anonymous bit-field cannot have a default member initializer",
[c]=l,
[j]=n,
[e]=n,
[g]="anonymous bit-field cannot have a default member initializer",
[i]=m,
[i]=m,
[j]="anonymous bit\\-field cannot have a default member initializer",
[b]="anonymous bit-field cannot have a default member initializer",
[b]=a,
[g]=l,
[h]=B,
[f]="anonymous bit\\-field cannot have a default member initializer",
[d]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[e]=a,
[k]={{K,3021,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n        Diag(Tok, diag::err_anon_bitfield_member_init);"}}
[d]=A,
[c]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[k]={{L,3021,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n        Diag(Tok, diag::err_anon_bitfield_member_init);"}},
[o]={
["clang/test/CXX/class/class.bit/p1.cpp"]={"clang/test/CXX/class/class.bit/p1.cpp:10:11: error: anonymous bit-field cannot have a default member initializer","clang/test/CXX/class/class.bit/p1.cpp:11:11: error: anonymous bit-field cannot have a default member initializer","clang/test/CXX/class/class.bit/p1.cpp:13:11: error: anonymous bit-field cannot have a default member initializer"}
}
},
},
["err_anon_bitfield_qualifiers"]={
["err_anon_bitfield_qualifiers"]={
[f]="anonymous bit-field cannot have qualifiers",
[h]="anonymous bit-field cannot have qualifiers",
[c]=l,
[j]=n,
[e]=n,
[g]="anonymous bit-field cannot have qualifiers",
[i]=m,
[i]=m,
[j]="anonymous bit\\-field cannot have qualifiers",
[b]="anonymous bit-field cannot have qualifiers",
[b]=a,
[g]=l,
[h]=o,
[f]="anonymous bit\\-field cannot have qualifiers",
[d]={"33e90d160b1b",1521320920,"Implement DR2229, which prohibits unnamed bit-fields from having qualifiers in C++."},
[e]=a,
[k]={{q,18153,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // Anonymous bit-fields cannot be cv-qualified (CWG 2229).\n  if (!InvalidDecl && getLangOpts().CPlusPlus && !II && BitWidth && T.hasQualifiers()) {\n    Diag(Loc, diag::err_anon_bitfield_qualifiers);"}}
[d]=p,
[c]={"33e90d160b1b",1521320920,"Implement DR2229, which prohibits unnamed bit-fields from having qualifiers in C++."},
[k]={{r,18153,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // Anonymous bit-fields cannot be cv-qualified (CWG 2229).\n  if (!InvalidDecl && getLangOpts().CPlusPlus && !II && BitWidth && T.hasQualifiers()) {\n    Diag(Loc, diag::err_anon_bitfield_qualifiers);"}},
[o]={
["clang/test/CXX/class/class.bit/p2.cpp"]={"clang/test/CXX/class/class.bit/p2.cpp:12:13: error: anonymous bit-field cannot have qualifiers"}
}
},
},
["err_anon_type_definition"]={
["err_anon_type_definition"]={
[f]="declaration of anonymous A must be a definition",
[h]="declaration of anonymous A must be a definition",
[c]=l,
[j]=n,
[e]=n,
[g]="declaration of anonymous %0 must be a definition",
[i]=m,
[i]=m,
[j]="declaration of anonymous (.*?) must be a definition",
[b]="declaration of anonymous %0 must be a definition",
[b]=a,
[g]=l,
[h]=B,
[f]="declaration of anonymous (.*?) must be a definition",
[d]={A,1236199783,z},
[e]=a,
[k]={{K,1949,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (!Name && !TemplateId && (DS.getTypeSpecType() == DeclSpec::TST_error || TUK != Sema::TUK_Definition)) {\n    if (DS.getTypeSpecType() != DeclSpec::TST_error) {\n      Diag(StartLoc, diag::err_anon_type_definition) << DeclSpec::getSpecifierName(TagType, Policy);"}}
[d]=A,
[c]={C,1236199783,B},
[k]={{L,1949,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (!Name && !TemplateId && (DS.getTypeSpecType() == DeclSpec::TST_error || TUK != Sema::TUK_Definition)) {\n    if (DS.getTypeSpecType() != DeclSpec::TST_error) {\n      Diag(StartLoc, diag::err_anon_type_definition) << DeclSpec::getSpecifierName(TagType, Policy);"}},
[o]={
["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:4:9: error: declaration of anonymous union must be a definition","clang/test/Sema/decl-invalid.c:19:1: error: declaration of anonymous struct must be a definition"}
}
},
},
["err_anonymous_enum_bitfield"]={
["err_anonymous_enum_bitfield"]={
[f]="ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field",
[h]="ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field",
[c]=l,
[j]=n,
[e]=n,
[g]="ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field",
[i]=m,
[i]=m,
[j]="ISO C\\+\\+ only allows \'\\:\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit\\-field",
[b]="ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field",
[b]=a,
[g]=l,
[h]=B,
[f]="ISO C\\+\\+ only allows \'\\:\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit\\-field",
[d]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules."},
[e]=a,
[k]={{D,4919,"/// 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  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n      // Outside C++11, do not interpret the tokens as an enum-base if they do\n      // not make sense as one. In C++11, it\'s an error if this happens.\n      if (getLangOpts().CPlusPlus11)\n        Diag(Tok.getLocation(), diag::err_anonymous_enum_bitfield);"}}
[d]=A,
[c]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules."},
[k]={{E,4919,"/// 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  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n      // Outside C++11, do not interpret the tokens as an enum-base if they do\n      // not make sense as one. In C++11, it\'s an error if this happens.\n      if (getLangOpts().CPlusPlus11)\n        Diag(Tok.getLocation(), diag::err_anonymous_enum_bitfield);"}},
[o]={
["clang/test/SemaCXX/enum-bitfield.cpp"]={"clang/test/SemaCXX/enum-bitfield.cpp:9:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field","clang/test/SemaCXX/enum-bitfield.cpp:16:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field","clang/test/SemaCXX/enum-bitfield.cpp:17:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field"}
}
},
},
["err_anonymous_property"]={
["err_anonymous_property"]={
[h]="anonymous property is not supported",
[j]=n,
[i]=m,
[b]="anonymous property is not supported",
[g]=l,
[f]="anonymous property is not supported",
[f]="anonymous property is not supported",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="anonymous property is not supported",
[c]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and"},
[i]=m,
[k]={{w,18817,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  if (!II) {\n    Diag(DeclStart, diag::err_anonymous_property);"}},
[j]="anonymous property is not supported",
[o]={
[b]=a,
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:410:38: error: anonymous property is not supported"}
[h]=o,
}
[d]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and"},
[k]={{v,18817,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  if (!II) {\n    Diag(DeclStart, diag::err_anonymous_property);"}}
},
},
["err_anonymous_record_bad_member"]={
["err_anonymous_record_bad_member"]={
[f]="anonymous ... can only contain non-static data members",
[h]="anonymous ... can only contain non-static data members",
[c]=l,
[j]=n,
[e]=n,
[g]="anonymous %select{struct|union}0 can only contain non-static data members",
[i]=m,
[i]=m,
[j]="anonymous (?:struct|union) can only contain non\\-static data members",
[b]="anonymous %select{struct|union}0 can only contain non-static data members",
[b]=a,
[g]=l,
[h]=o,
[f]="anonymous (?:struct|union) can only contain non\\-static data members",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,5645,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        unsigned DK = diag::err_anonymous_record_bad_member;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,5645,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        unsigned DK = diag::err_anonymous_record_bad_member;"}}
},
},
["err_anonymous_record_member_redecl"]={
["err_anonymous_record_member_redecl"]={
[f]="member of anonymous ... redeclares A",
[h]="member of anonymous ... redeclares A",
[c]=l,
[j]=n,
[e]=n,
[g]="member of anonymous %select{struct|union}0 redeclares %1",
[i]=m,
[i]=m,
[j]="member of anonymous (?:struct|union) redeclares (.*?)",
[b]="member of anonymous %select{struct|union}0 redeclares %1",
[b]=a,
[g]=l,
[h]=o,
[f]="member of anonymous (?:struct|union) redeclares (.*?)",
[d]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"},
[e]=a,
[k]={{q,5358,"/// We are trying to inject an anonymous member into the given scope;\n/// check if there\'s an existing declaration that can\'t be overloaded.\n///\n/// \\return true if this is a forbidden redeclaration\nstatic bool CheckAnonMemberRedeclaration(Sema &SemaRef, Scope *S, DeclContext *Owner, DeclarationName Name, SourceLocation NameLoc, bool IsUnion) {\n  SemaRef.Diag(NameLoc, diag::err_anonymous_record_member_redecl) << IsUnion << Name;"}}
[d]=p,
[c]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"},
[k]={{r,5358,"/// We are trying to inject an anonymous member into the given scope;\n/// check if there\'s an existing declaration that can\'t be overloaded.\n///\n/// \\return true if this is a forbidden redeclaration\nstatic bool CheckAnonMemberRedeclaration(Sema &SemaRef, Scope *S, DeclContext *Owner, DeclarationName Name, SourceLocation NameLoc, bool IsUnion) {\n  SemaRef.Diag(NameLoc, diag::err_anonymous_record_member_redecl) << IsUnion << Name;"}},
[o]={
["clang/test/Sema/anonymous-struct-union.c"]={"clang/test/Sema/anonymous-struct-union.c:44:9: error: member of anonymous union redeclares \'x\'","clang/test/Sema/anonymous-struct-union.c:88:9: error: member of anonymous union redeclares \'f0\'"}
}
},
},
["err_anonymous_record_nonpublic_member"]={
["err_anonymous_record_nonpublic_member"]={
[f]="anonymous ... cannot contain a ... data member",
[h]="anonymous ... cannot contain a ... data member",
[c]=l,
[j]=n,
[e]=n,
[g]="anonymous %select{struct|union}0 cannot contain a %select{private|protected}1 data member",
[i]=m,
[i]=m,
[j]="anonymous (?:struct|union) cannot contain a (?:private|protected) data member",
[b]="anonymous %select{struct|union}0 cannot contain a %select{private|protected}1 data member",
[b]=a,
[g]=l,
[h]=o,
[f]="anonymous (?:struct|union) cannot contain a (?:private|protected) data member",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,5598,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n        if (FD->getAccess() != AS_public) {\n          Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member) << Record->isUnion() << (FD->getAccess() == AS_protected);"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,5598,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n        if (FD->getAccess() != AS_public) {\n          Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member) << Record->isUnion() << (FD->getAccess() == AS_protected);"}},
[o]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:116:16: error: anonymous union cannot contain a private data member","clang/test/SemaCXX/anonymous-union.cpp:117:20: error: anonymous union cannot contain a protected data member"}
}
},
},
["err_anonymous_record_with_function"]={
["err_anonymous_record_with_function"]={
[f]="functions cannot be declared in an anonymous ...",
[h]="functions cannot be declared in an anonymous ...",
[c]=l,
[j]=n,
[e]=n,
[g]="functions cannot be declared in an anonymous %select{struct|union}0",
[i]=m,
[i]=m,
[j]="functions cannot be declared in an anonymous (?:struct|union)",
[b]="functions cannot be declared in an anonymous %select{struct|union}0",
[b]=a,
[g]=l,
[h]=o,
[f]="functions cannot be declared in an anonymous (?:struct|union)",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,5649,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (isa<TypeDecl>(Mem))\n        else if (isa<FunctionDecl>(Mem))\n          DK = diag::err_anonymous_record_with_function;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,5649,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (isa<TypeDecl>(Mem))\n        else if (isa<FunctionDecl>(Mem))\n          DK = diag::err_anonymous_record_with_function;"}},
[o]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:115:10: error: functions cannot be declared in an anonymous union"}
}
},
},
["err_anonymous_record_with_static"]={
["err_anonymous_record_with_static"]={
[f]="static members cannot be declared in an anonymous ...",
[h]="static members cannot be declared in an anonymous ...",
[c]=l,
[j]=n,
[e]=n,
[g]="static members cannot be declared in an anonymous %select{struct|union}0",
[i]=m,
[i]=m,
[j]="static members cannot be declared in an anonymous (?:struct|union)",
[b]="static members cannot be declared in an anonymous %select{struct|union}0",
[b]=a,
[g]=l,
[h]=o,
[f]="static members cannot be declared in an anonymous (?:struct|union)",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,5651,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (isa<TypeDecl>(Mem))\n        else if (isa<FunctionDecl>(Mem))\n        else if (isa<VarDecl>(Mem))\n          DK = diag::err_anonymous_record_with_static;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,5651,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (isa<TypeDecl>(Mem))\n        else if (isa<FunctionDecl>(Mem))\n        else if (isa<VarDecl>(Mem))\n          DK = diag::err_anonymous_record_with_static;"}}
},
},
["err_anonymous_record_with_type"]={
["err_anonymous_record_with_type"]={
[f]="types cannot be declared in an anonymous ...",
[h]="types cannot be declared in an anonymous ...",
[c]=l,
[j]=n,
[e]=n,
[g]="types cannot be declared in an anonymous %select{struct|union}0",
[i]=m,
[i]=m,
[j]="types cannot be declared in an anonymous (?:struct|union)",
[b]="types cannot be declared in an anonymous %select{struct|union}0",
[b]=a,
[g]=l,
[h]=o,
[f]="types cannot be declared in an anonymous (?:struct|union)",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,5626,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n        if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n          // Visual C++ allows type definition in anonymous struct or union.\n          if (getLangOpts().MicrosoftExt)\n          else {\n            Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type) << Record->isUnion();"},{q,5647,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (isa<TypeDecl>(Mem))\n          DK = diag::err_anonymous_record_with_type;"},{q,5655,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (getLangOpts().MicrosoftExt && DK == diag::err_anonymous_record_with_type)"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,5626,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n        if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n          // Visual C++ allows type definition in anonymous struct or union.\n          if (getLangOpts().MicrosoftExt)\n          else {\n            Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type) << Record->isUnion();"},{r,5647,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (isa<TypeDecl>(Mem))\n          DK = diag::err_anonymous_record_with_type;"},{r,5655,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      } else if (Mem->isImplicit()) {\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      } else {\n        if (getLangOpts().MicrosoftExt && DK == diag::err_anonymous_record_with_type)"}},
[o]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:112:12: error: types cannot be declared in an anonymous union"}
}
},
},
["err_anonymous_struct_not_member"]={
["err_anonymous_struct_not_member"]={
[f]="anonymous ... must be ... members",
[h]="anonymous ... must be ... members",
[c]=l,
[j]=n,
[e]=n,
[g]="anonymous %select{structs|structs and classes}0 must be %select{struct or union|class}0 members",
[i]=m,
[i]=m,
[j]="anonymous (?:structs|structs and classes) must be (?:struct or union|class) members",
[b]="anonymous %select{structs|structs and classes}0 must be %select{struct or union|class}0 members",
[b]=a,
[g]=l,
[h]=o,
[f]="anonymous (?:structs|structs and classes) must be (?:struct or union|class) members",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,5675,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (!Record->isUnion() && !Owner->isRecord()) {\n    Diag(Record->getLocation(), diag::err_anonymous_struct_not_member) << getLangOpts().CPlusPlus;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,5675,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (!Record->isUnion() && !Owner->isRecord()) {\n    Diag(Record->getLocation(), diag::err_anonymous_struct_not_member) << getLangOpts().CPlusPlus;"}},
[o]={
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:19:8: error: anonymous structs and classes must be class members"}
}
},
},
["err_anonymous_union_not_static"]={
["err_anonymous_union_not_static"]={
[h]="anonymous unions at namespace or global scope must be declared \'static\'",
[j]=n,
[i]=m,
[b]="anonymous unions at namespace or global scope must be declared \'static\'",
[g]=l,
[f]="anonymous unions at namespace or global scope must be declared \'static\'",
[f]="anonymous unions at namespace or global scope must be declared \'static\'",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="anonymous unions at namespace or global scope must be declared \'static\'",
[c]={v,1237025389,u},
[i]=m,
[k]={{r,5530,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    if (Record->isUnion()) {\n      if (DS.getStorageClassSpec() != DeclSpec::SCS_static && (OwnerScope->isTranslationUnit() || (OwnerScope->isNamespace() && !cast<NamespaceDecl>(OwnerScope)->isAnonymousNamespace()))) {\n        Diag(Record->getLocation(), diag::err_anonymous_union_not_static) << FixItHint::CreateInsertion(Record->getLocation(), \"static \");"}},
[j]="anonymous unions at namespace or global scope must be declared \'static\'",
[o]={
[b]=a,
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:21:8: error: anonymous unions at namespace or global scope must be declared \'static\'"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{q,5530,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    if (Record->isUnion()) {\n      if (DS.getStorageClassSpec() != DeclSpec::SCS_static && (OwnerScope->isTranslationUnit() || (OwnerScope->isNamespace() && !cast<NamespaceDecl>(OwnerScope)->isAnonymousNamespace()))) {\n        Diag(Record->getLocation(), diag::err_anonymous_union_not_static) << FixItHint::CreateInsertion(Record->getLocation(), \"static \");"}}
},
},
["err_anonymous_union_with_storage_spec"]={
["err_anonymous_union_with_storage_spec"]={
[h]="anonymous union at class scope must not have a storage specifier",
[j]=n,
[i]=m,
[b]="anonymous union at class scope must not have a storage specifier",
[g]=l,
[f]="anonymous union at class scope must not have a storage specifier",
[f]="anonymous union at class scope must not have a storage specifier",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="anonymous union at class scope must not have a storage specifier",
[c]={v,1237025389,u},
[i]=m,
[k]={{r,5543,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    if (Record->isUnion()) {\n      }\n      // C++ [class.union]p6:\n      //  A storage class is not allowed in a declaration of an\n      //  anonymous union in a class scope.\n      else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && isa<RecordDecl>(Owner)) {\n        Diag(DS.getStorageClassSpecLoc(), diag::err_anonymous_union_with_storage_spec) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[j]="anonymous union at class scope must not have a storage specifier",
[o]={
[b]=a,
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:27:3: error: anonymous union at class scope must not have a storage specifier"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{q,5543,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  if (getLangOpts().CPlusPlus) {\n    if (Record->isUnion()) {\n      }\n      // C++ [class.union]p6:\n      //  A storage class is not allowed in a declaration of an\n      //  anonymous union in a class scope.\n      else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && isa<RecordDecl>(Owner)) {\n        Diag(DS.getStorageClassSpecLoc(), diag::err_anonymous_union_with_storage_spec) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}
},
},
["err_anyx86_interrupt_attribute"]={
["err_anyx86_interrupt_attribute"]={
[f]="... \'interrupt\' attribute only applies to functions that have ...",
[h]="... \'interrupt\' attribute only applies to functions that have ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{x86|x86-64}0 \'interrupt\' attribute only applies to functions that have %select{a \'void\' return type|only a pointer parameter optionally followed by an integer parameter|a pointer as the first parameter|a %2 type as the second parameter}1",
[i]=m,
[i]=m,
[j]="(?:x86|x86\\-64) \'interrupt\' attribute only applies to functions that have (?:a \'void\' return type|only a pointer parameter optionally followed by an integer parameter|a pointer as the first parameter|a (.*?) type as the second parameter)",
[b]="%select{x86|x86-64}0 \'interrupt\' attribute only applies to functions that have %select{a \'void\' return type|only a pointer parameter optionally followed by an integer parameter|a pointer as the first parameter|a %2 type as the second parameter}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:x86|x86\\-64) \'interrupt\' attribute only applies to functions that have (?:a \'void\' return type|only a pointer parameter optionally followed by an integer parameter|a pointer as the first parameter|a (.*?) type as the second parameter)",
[d]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86"},
[e]=a,
[k]={{p,7536,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Interrupt handler must have void return type.\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(getFunctionOrMethodResultSourceRange(D).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 0;"},{p,7546,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (NumParams < 1 || NumParams > 2) {\n    S.Diag(D->getBeginLoc(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 1;"},{p,7556,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The first argument must be a pointer.\n  if (!getFunctionOrMethodParamType(D, 0)->isPointerType()) {\n    S.Diag(getFunctionOrMethodParamRange(D, 0).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 2;"},{p,7572,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (NumParams == 2 && (!getFunctionOrMethodParamType(D, 1)->isUnsignedIntegerType() || S.Context.getTypeSize(getFunctionOrMethodParamType(D, 1)) != TypeSize)) {\n    S.Diag(getFunctionOrMethodParamRange(D, 1).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 3 << S.Context.getIntTypeForBitwidth(TypeSize, /*Signed=*/false);"}}
[d]=p,
[c]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86"},
[k]={{q,7536,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Interrupt handler must have void return type.\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(getFunctionOrMethodResultSourceRange(D).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 0;"},{q,7546,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (NumParams < 1 || NumParams > 2) {\n    S.Diag(D->getBeginLoc(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 1;"},{q,7556,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The first argument must be a pointer.\n  if (!getFunctionOrMethodParamType(D, 0)->isPointerType()) {\n    S.Diag(getFunctionOrMethodParamRange(D, 0).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 2;"},{q,7572,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (NumParams == 2 && (!getFunctionOrMethodParamType(D, 1)->isUnsignedIntegerType() || S.Context.getTypeSize(getFunctionOrMethodParamType(D, 1)) != TypeSize)) {\n    S.Diag(getFunctionOrMethodParamRange(D, 1).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 3 << S.Context.getIntTypeForBitwidth(TypeSize, /*Signed=*/false);"}},
[o]={
["clang/test/SemaCXX/attr-x86-interrupt.cpp"]={"clang/test/SemaCXX/attr-x86-interrupt.cpp:15:28: error: x86-64 \'interrupt\' attribute only applies to functions that have a \'void\' return type","clang/test/SemaCXX/attr-x86-interrupt.cpp:16:1: error: x86-64 \'interrupt\' attribute only applies to functions that have only a pointer parameter optionally followed by an integer parameter","clang/test/SemaCXX/attr-x86-interrupt.cpp:17:1: error: x86-64 \'interrupt\' attribute only applies to functions that have only a pointer parameter optionally followed by an integer parameter","clang/test/SemaCXX/attr-x86-interrupt.cpp:18:38: error: x86-64 \'interrupt\' attribute only applies to functions that have a pointer as the first parameter","clang/test/SemaCXX/attr-x86-interrupt.cpp:26:47: error: x86-64 \'interrupt\' attribute only applies to functions that have a \'unsigned long long\' type as the second parameter","clang/test/SemaCXX/attr-x86-interrupt.cpp:34:48: error: x86-64 \'interrupt\' attribute only applies to functions that have a \'unsigned long long\' type as the second parameter","clang/test/SemaCXX/attr-x86-interrupt.cpp:41:46: error: x86-64 \'interrupt\' attribute only applies to functions that have a \'unsigned long long\' type as the second parameter"}
}
},
},
["err_anyx86_interrupt_called"]={
["err_anyx86_interrupt_called"]={
[h]="interrupt service routine cannot be called directly",
[j]=n,
[i]=m,
[b]="interrupt service routine cannot be called directly",
[g]=l,
[f]="interrupt service routine cannot be called directly",
[f]="interrupt service routine cannot be called directly",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="interrupt service routine cannot be called directly",
[c]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86"},
[i]=m,
[k]={{z,7356,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Functions with \'interrupt\' attribute cannot be called directly.\n  if (FDecl && FDecl->hasAttr<AnyX86InterruptAttr>()) {\n    Diag(Fn->getExprLoc(), diag::err_anyx86_interrupt_called);"}},
[j]="interrupt service routine cannot be called directly",
[o]={
[b]=a,
["clang/test/SemaCXX/attr-x86-interrupt.cpp"]={"clang/test/SemaCXX/attr-x86-interrupt.cpp:62:3: error: interrupt service routine cannot be called directly","clang/test/SemaCXX/attr-x86-interrupt.cpp:68:3: error: interrupt service routine cannot be called directly","clang/test/SemaCXX/attr-x86-interrupt.cpp:48:3: error: interrupt service routine cannot be called directly"}
[h]=o,
}
[d]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86"},
[k]={{y,7356,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Functions with \'interrupt\' attribute cannot be called directly.\n  if (FDecl && FDecl->hasAttr<AnyX86InterruptAttr>()) {\n    Diag(Fn->getExprLoc(), diag::err_anyx86_interrupt_called);"}}
},
},
["err_arc_array_param_no_ownership"]={
["err_arc_array_param_no_ownership"]={
[h]="must explicitly describe intended ownership of an object array parameter",
[j]=n,
[i]=m,
[b]="must explicitly describe intended ownership of an object array parameter",
[g]=l,
[f]="must explicitly describe intended ownership of an object array parameter",
[f]="must explicitly describe intended ownership of an object array parameter",
[c]=l,
[e]=a,
[e]=n,
[d]=M,
[g]="must explicitly describe intended ownership of an object array parameter",
[c]={ab,1308874139,bb},
[i]=m,
[k]={{r,14905,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n          DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(NameLoc, diag::err_arc_array_param_no_ownership, T, false));"},{r,14907,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n        else\n          Diag(NameLoc, diag::err_arc_array_param_no_ownership) << TSInfo->getTypeLoc().getSourceRange();"},{q,9835,"/// Handle a delayed forbidden-type diagnostic.\nstatic void handleDelayedForbiddenType(Sema &S, DelayedDiagnostic &DD, Decl *D) {\n  if (S.getLangOpts().ObjCAutoRefCount)\n    if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n      if (FD->hasAttr<UnavailableAttr>() && DD.getForbiddenTypeDiagnostic() == diag::err_arc_array_param_no_ownership) {"}},
[j]="must explicitly describe intended ownership of an object array parameter",
[o]={
[b]=a,
["clang/test/SemaObjCXX/arc-0x.mm"]={"clang/test/SemaObjCXX/arc-0x.mm:110:16: error: must explicitly describe intended ownership of an object array parameter","clang/test/SemaObjCXX/arc-0x.mm:111:15: error: must explicitly describe intended ownership of an object array parameter"}
[h]=L,
}
[d]={Z,1308874139,Y},
[k]={{q,14905,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n          DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(NameLoc, diag::err_arc_array_param_no_ownership, T, false));"},{q,14907,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n        else\n          Diag(NameLoc, diag::err_arc_array_param_no_ownership) << TSInfo->getTypeLoc().getSourceRange();"},{p,9835,"/// Handle a delayed forbidden-type diagnostic.\nstatic void handleDelayedForbiddenType(Sema &S, DelayedDiagnostic &DD, Decl *D) {\n  if (S.getLangOpts().ObjCAutoRefCount)\n    if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n      if (FD->hasAttr<UnavailableAttr>() && DD.getForbiddenTypeDiagnostic() == diag::err_arc_array_param_no_ownership) {"}}
},
},
["err_arc_assign_property_ownership"]={
["err_arc_assign_property_ownership"]={
[f]="existing instance variable A for property B with ... attribute must be __unsafe_unretained",
[h]="existing instance variable A for property B with ... attribute must be __unsafe_unretained",
[c]=l,
[j]=n,
[e]=n,
[g]="existing instance variable %1 for property %0 with %select{unsafe_unretained|assign}2 attribute must be __unsafe_unretained",
[i]=m,
[i]=m,
[j]="existing instance variable (.*?) for property (.*?) with (?:unsafe_unretained|assign) attribute must be __unsafe_unretained",
[b]="existing instance variable %1 for property %0 with %select{unsafe_unretained|assign}2 attribute must be __unsafe_unretained",
[b]=a,
[g]=l,
[h]="ARC and @properties",
[f]="existing instance variable (.*?) for property (.*?) with (?:unsafe_unretained|assign) attribute must be __unsafe_unretained",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{X,208,"class PropertiesRewriter {\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{X,237,"class PropertiesRewriter {\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{X,262,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{P,777,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  case Qualifiers::OCL_ExplicitNone:\n    S.Diag(ivar->getLocation(), diag::err_arc_assign_property_ownership) << property->getDeclName() << ivar->getDeclName() << ((property->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_assign) != 0);"}}
[d]="ARC and @properties",
[c]={ab,1308874139,bb},
[k]={{Z,208,"class PropertiesRewriter {\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Z,237,"class PropertiesRewriter {\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Z,262,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{R,777,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  case Qualifiers::OCL_ExplicitNone:\n    S.Diag(ivar->getLocation(), diag::err_arc_assign_property_ownership) << property->getDeclName() << ivar->getDeclName() << ((property->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_assign) != 0);"}},
[o]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:24:13: error: existing instance variable \'_ub\' for property \'ub\' with unsafe_unretained attribute must be __unsafe_unretained"}
}
},
},
["err_arc_atomic_ownership"]={
["err_arc_atomic_ownership"]={
[f]="cannot perform atomic operation on a pointer to type A: type has non-trivial ownership",
[h]="cannot perform atomic operation on a pointer to type A: type has non-trivial ownership",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot perform atomic operation on a pointer to type %0: type has non-trivial ownership",
[i]=m,
[i]=m,
[j]="cannot perform atomic operation on a pointer to type (.*?)\\: type has non\\-trivial ownership",
[b]="cannot perform atomic operation on a pointer to type %0: type has non-trivial ownership",
[b]=a,
[g]=l,
[h]=L,
[f]="cannot perform atomic operation on a pointer to type (.*?)\\: type has non\\-trivial ownership",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{s,3238,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << PointerArg->getSourceRange();"},{s,7247,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(ExprRange.getBegin(), diag::err_arc_atomic_ownership) << ValType << Ptr->getSourceRange();"},{s,7582,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << FirstArg->getSourceRange();"}}
[d]=M,
[c]={ab,1308874139,bb},
[k]={{t,3238,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << PointerArg->getSourceRange();"},{t,7247,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(ExprRange.getBegin(), diag::err_arc_atomic_ownership) << ValType << Ptr->getSourceRange();"},{t,7582,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << FirstArg->getSourceRange();"}},
[o]={
[ub]={"clang/test/SemaObjC/arc.m:515:3: error: cannot perform atomic operation on a pointer to type \'__strong id\': type has non-trivial ownership"}
}
},
},
["err_arc_autoreleasing_capture"]={
["err_arc_autoreleasing_capture"]={
[f]="cannot capture __autoreleasing variable in a ...",
[h]="cannot capture __autoreleasing variable in a ...",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot capture __autoreleasing variable in a %select{block|lambda by copy}0",
[i]=m,
[i]=m,
[j]="cannot capture __autoreleasing variable in a (?:block|lambda by copy)",
[b]="cannot capture __autoreleasing variable in a %select{block|lambda by copy}0",
[b]=a,
[g]=l,
[h]=L,
[f]="cannot capture __autoreleasing variable in a (?:block|lambda by copy)",
[d]={"67cd5e094e43",1333085028,"Forbid the block and lambda copy-capture of __autoreleasing variables"},
[e]=a,
[k]={{y,19244,"// 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  // Forbid the block-capture of autoreleasing variables.\n  if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*block*/ 0;"},{y,19394,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  } else {\n    // Forbid the lambda copy-capture of autoreleasing variables.\n    if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*lambda*/ 1;"}}
[d]=M,
[c]={"67cd5e094e43",1333085028,"Forbid the block and lambda copy-capture of __autoreleasing variables"},
[k]={{z,19244,"// 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  // Forbid the block-capture of autoreleasing variables.\n  if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*block*/ 0;"},{z,19394,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  } else {\n    // Forbid the lambda copy-capture of autoreleasing variables.\n    if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*lambda*/ 1;"}},
[o]={
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:17:23: error: cannot capture __autoreleasing variable in a block"}
}
},
},
["err_arc_autoreleasing_var"]={
["err_arc_autoreleasing_var"]={
[f]="... cannot have __autoreleasing ownership",
[h]="... cannot have __autoreleasing ownership",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{__block variables|global variables|fields|instance variables}0 cannot have __autoreleasing ownership",
[i]=m,
[i]=m,
[j]="(?:__block variables|global variables|fields|instance variables) cannot have __autoreleasing ownership",
[b]="%select{__block variables|global variables|fields|instance variables}0 cannot have __autoreleasing ownership",
[b]=a,
[g]=l,
[h]=L,
[f]="(?:__block variables|global variables|fields|instance variables) cannot have __autoreleasing ownership",
[d]={H,1308178962,J},
[e]=a,
[k]={{q,6876,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  if (lifetime == Qualifiers::OCL_Autoreleasing) {\n    if (kind != -1U) {\n      Diag(decl->getLocation(), diag::err_arc_autoreleasing_var) << kind;"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{r,6876,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  if (lifetime == Qualifiers::OCL_Autoreleasing) {\n    if (kind != -1U) {\n      Diag(decl->getLocation(), diag::err_arc_autoreleasing_var) << kind;"}},
[o]={
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:8:24: error: instance variables cannot have __autoreleasing ownership","clang/test/SemaObjC/arc-property-decl-attrs.m:19:24: error: instance variables cannot have __autoreleasing ownership","clang/test/SemaObjC/arc-property-decl-attrs.m:30:24: error: instance variables cannot have __autoreleasing ownership"}
}
},
},
["err_arc_bridge_cast_incompatible"]={
["err_arc_bridge_cast_incompatible"]={
[f]="incompatible types casting A to B with a ... cast",
[h]="incompatible types casting A to B with a ... cast",
[c]=l,
[j]=n,
[e]=n,
[g]="incompatible types casting %0 to %1 with a %select{__bridge|__bridge_transfer|__bridge_retained}2 cast",
[i]=m,
[i]=m,
[j]="incompatible types casting (.*?) to (.*?) with a (?:__bridge|__bridge_transfer|__bridge_retained) cast",
[b]="incompatible types casting %0 to %1 with a %select{__bridge|__bridge_transfer|__bridge_retained}2 cast",
[b]=a,
[g]=l,
[h]="ARC Casting Rules",
[f]="incompatible types casting (.*?) to (.*?) with a (?:__bridge|__bridge_transfer|__bridge_retained) cast",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,4728,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n  } else {\n    Diag(LParenLoc, diag::err_arc_bridge_cast_incompatible) << FromType << T << Kind << SubExpr->getSourceRange() << TSInfo->getTypeLoc().getSourceRange();"}}
[d]="ARC Casting Rules",
[c]={J,1308178962,I},
[k]={{F,4728,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n  } else {\n    Diag(LParenLoc, diag::err_arc_bridge_cast_incompatible) << FromType << T << Kind << SubExpr->getSourceRange() << TSInfo->getTypeLoc().getSourceRange();"}},
[o]={
["clang/test/SemaObjCXX/arc-bridged-cast.mm"]={"clang/test/SemaObjCXX/arc-bridged-cast.mm:21:3: error: incompatible types casting \'CFTypeRef\' (aka \'const void *\') to \'int *\' with a __bridge cast"}
}
},
},
["err_arc_bridge_cast_wrong_kind"]={
["err_arc_bridge_cast_wrong_kind"]={
[f]="cast of ... pointer type A to ... pointer type B cannot use ...",
[h]="cast of ... pointer type A to ... pointer type B cannot use ...",
[c]=l,
[j]=n,
[e]=n,
[g]="cast of %select{Objective-C|block|C}0 pointer type %1 to %select{Objective-C|block|C}2 pointer type %3 cannot use %select{__bridge|__bridge_transfer|__bridge_retained}4",
[i]=m,
[i]=m,
[j]="cast of (?:Objective\\-C|block|C) pointer type (.*?) to (?:Objective\\-C|block|C) pointer type (.*?) cannot use (?:__bridge|__bridge_transfer|__bridge_retained)",
[b]="cast of %select{Objective-C|block|C}0 pointer type %1 to %select{Objective-C|block|C}2 pointer type %3 cannot use %select{__bridge|__bridge_transfer|__bridge_retained}4",
[b]=a,
[g]=l,
[h]="ARC Casting Rules",
[f]="cast of (?:Objective\\-C|block|C) pointer type (.*?) to (?:Objective\\-C|block|C) pointer type (.*?) cannot use (?:__bridge|__bridge_transfer|__bridge_retained)",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,4665,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    case OBC_BridgeRetained: {\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << 2 << FromType << (T->isBlockPointerType() ? 1 : 0) << T << SubExpr->getSourceRange() << Kind;"},{G,4708,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    case OBC_BridgeTransfer: {\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << (FromType->isBlockPointerType() ? 1 : 0) << FromType << 2 << T << SubExpr->getSourceRange() << Kind;"}}
[d]="ARC Casting Rules",
[c]={J,1308178962,I},
[k]={{F,4665,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    case OBC_BridgeRetained: {\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << 2 << FromType << (T->isBlockPointerType() ? 1 : 0) << T << SubExpr->getSourceRange() << Kind;"},{F,4708,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    case OBC_BridgeTransfer: {\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << (FromType->isBlockPointerType() ? 1 : 0) << FromType << 2 << T << SubExpr->getSourceRange() << Kind;"}}
},
},
["err_arc_bridge_retain"]={
["err_arc_bridge_retain"]={
[f]="unknown cast annotation __bridge_retain; did you mean __bridge_retained?",
[h]="unknown cast annotation __bridge_retain; did you mean __bridge_retained?",
[c]=l,
[j]=n,
[e]=n,
[g]="unknown cast annotation __bridge_retain; did you mean __bridge_retained?",
[i]=m,
[i]=m,
[j]="unknown cast annotation __bridge_retain; did you mean __bridge_retained\\?",
[b]="unknown cast annotation __bridge_retain; did you mean __bridge_retained?",
[b]=a,
[g]=l,
[h]="ARC Parse Issue",
[f]="unknown cast annotation __bridge_retain; did you mean __bridge_retained\\?",
[d]={"0c07bee8bd2c",1308347772,"Only accept __bridge_retain in system headers, as Doug suggested."},
[e]=a,
[k]={{kb,2982,"/// 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  // 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  } else if (ExprType >= CompoundLiteral && BridgeCast) {\n    if (tokenKind == tok::kw___bridge)\n    else if (tokenKind == tok::kw___bridge_transfer)\n    else if (tokenKind == tok::kw___bridge_retained)\n    else {\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::err_arc_bridge_retain) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge_retained\");"}}
[d]="ARC Parse Issue",
[c]={"0c07bee8bd2c",1308347772,"Only accept __bridge_retain in system headers, as Doug suggested."},
[k]={{mb,2982,"/// 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  // 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  } else if (ExprType >= CompoundLiteral && BridgeCast) {\n    if (tokenKind == tok::kw___bridge)\n    else if (tokenKind == tok::kw___bridge_transfer)\n    else if (tokenKind == tok::kw___bridge_retained)\n    else {\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::err_arc_bridge_retain) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge_retained\");"}},
[o]={
["clang/test/SemaObjC/arc-bridged-cast.m"]={"clang/test/SemaObjC/arc-bridged-cast.m:35:20: error: unknown cast annotation __bridge_retain; did you mean __bridge_retained?"}
}
},
},
["err_arc_cast_requires_bridge"]={
["err_arc_cast_requires_bridge"]={
[f]="... of ... pointer type A to ... pointer type B requires a bridged cast",
[h]="... of ... pointer type A to ... pointer type B requires a bridged cast",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{cast|implicit conversion}0 of %select{Objective-C|block|C}1 pointer type %2 to %select{Objective-C|block|C}3 pointer type %4 requires a bridged cast",
[i]=m,
[i]=m,
[j]="(?:cast|implicit conversion) of (?:Objective\\-C|block|C) pointer type (.*?) to (?:Objective\\-C|block|C) pointer type (.*?) requires a bridged cast",
[b]="%select{cast|implicit conversion}0 of %select{Objective-C|block|C}1 pointer type %2 to %select{Objective-C|block|C}3 pointer type %4 requires a bridged cast",
[b]=a,
[g]=l,
[h]="ARC Casting Rules",
[f]="(?:cast|implicit conversion) of (?:Objective\\-C|block|C) pointer type (.*?) to (?:Objective\\-C|block|C) pointer type (.*?) requires a bridged cast",
[d]={H,1308178962,J},
[e]=a,
[k]={{hb,210,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{hb,227,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{hb,303,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{hb,313,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void removeBlockReleaseMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{G,3918,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << 2                                    // of C pointer type"},{G,3960,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << unsigned(castExprType->isBlockPointerType()) // of ObjC|block type"}}
[d]="ARC Casting Rules",
[c]={J,1308178962,I},
[k]={{db,210,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{db,227,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{db,303,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{db,313,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void removeBlockReleaseMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{F,3918,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << 2                                    // of C pointer type"},{F,3960,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << unsigned(castExprType->isBlockPointerType()) // of ObjC|block type"}},
[o]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:10: error: cast of C pointer type \'CFTestingRef\' (aka \'__CFError *\') to Objective-C pointer type \'NSString *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:56:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'NSString *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:60:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'NSError *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:63:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'MyError *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:67:9: error: cast of C pointer type \'CFUColor2Ref\' (aka \'__CFUPrimeColor *\') to Objective-C pointer type \'NSUColor *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:70:21: error: cast of Objective-C pointer type \'NSError *\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:73:21: error: cast of Objective-C pointer type \'NSString *\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:77:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'Class\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:81:21: error: cast of Objective-C pointer type \'Class\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:89:9: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:92:8: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id<P1,P2>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:95:8: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id<P1,P2,P4>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:102:10: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:105:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:108:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2,P3>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:111:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P2,P3>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:114:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2,P4>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:121:20: error: cast of Objective-C pointer type \'id\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:124:20: error: cast of Objective-C pointer type \'id<P1,P2,P3>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:127:20: error: cast of Objective-C pointer type \'id<P1,P2,P3,P4>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:130:20: error: cast of Objective-C pointer type \'id<P1,P2>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:133:20: error: cast of Objective-C pointer type \'id<P2,P3>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast"}
}
},
},
["err_arc_collection_forward"]={
["err_arc_collection_forward"]={
[f]="collection expression type A is a forward declaration",
[h]="collection expression type A is a forward declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="collection expression type %0 is a forward declaration",
[i]=m,
[i]=m,
[j]="collection expression type (.*?) is a forward declaration",
[b]="collection expression type %0 is a forward declaration",
[b]=a,
[g]=l,
[h]=L,
[f]="collection expression type (.*?) is a forward declaration",
[d]={"538482373bba",1311728835,"Clean up the analysis of the collection operand to ObjC"},
[e]=a,
[k]={{R,2244,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {"}}
[d]=M,
[c]={"538482373bba",1311728835,"Clean up the analysis of the collection operand to ObjC"},
[k]={{S,2244,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {"}},
[o]={
[ub]={"clang/test/SemaObjC/arc.m:690:3: error: collection expression type \'Test37\' is a forward declaration"}
}
},
},
["err_arc_convesion_of_weak_unavailable"]={
["err_arc_convesion_of_weak_unavailable"]={
[f]="... of weak-unavailable object of type A to a __weak object of type B",
[h]="... of weak-unavailable object of type A to a __weak object of type B",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{implicit conversion|cast}0 of weak-unavailable object of type %1 to a __weak object of type %2",
[i]=m,
[i]=m,
[j]="(?:implicit conversion|cast) of weak\\-unavailable object of type (.*?) to a __weak object of type (.*?)",
[b]="%select{implicit conversion|cast}0 of weak-unavailable object of type %1 to a __weak object of type %2",
[b]=a,
[g]=l,
[h]=Ab,
[f]="(?:implicit conversion|cast) of weak\\-unavailable object of type (.*?) to a __weak object of type (.*?)",
[d]={"f2913401fc81",1310146902,"objc++-arc: more diagnosis of converting a weak-unavailable"},
[e]=a,
[k]={{w,3215,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ARC imposes extra restrictions on casts.\n  if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n    } else if (!Self.CheckObjCARCUnavailableWeakConversion(DestType, SrcType)) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << 1 << SrcType << DestType << SrcExpr.get()->getSourceRange();"},{x,4497,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n      else\n        Diag(From->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << (Action == AA_Casting) << From->getType() << ToType << From->getSourceRange();"}}
[d]=Eb,
[c]={"f2913401fc81",1310146902,"objc++-arc: more diagnosis of converting a weak-unavailable"},
[k]={{x,3215,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ARC imposes extra restrictions on casts.\n  if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n    } else if (!Self.CheckObjCARCUnavailableWeakConversion(DestType, SrcType)) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << 1 << SrcType << DestType << SrcExpr.get()->getSourceRange();"},{y,4497,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n      else\n        Diag(From->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << (Action == AA_Casting) << From->getType() << ToType << From->getSourceRange();"}},
[o]={
["clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm"]={"clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm:35:21: error: cast of weak-unavailable object of type \'NOWEAK *\' to a __weak object of type \'__weak id\'","clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm:48:28: error: cast of weak-unavailable object of type \'NOWEAK<P,P1> *\' to a __weak object of type \'__weak id<P,P1>\'"}
}
},
},
["err_arc_gained_method_convention"]={
["err_arc_gained_method_convention"]={
[h]="method implementation does not match its declaration",
[j]=n,
[i]=m,
[b]="method implementation does not match its declaration",
[g]=l,
[f]="method implementation does not match its declaration",
[f]="method implementation does not match its declaration",
[c]=l,
[e]=a,
[e]=n,
[d]=M,
[g]="method implementation does not match its declaration",
[c]={J,1308178962,I},
[i]=m,
[k]={{K,2530,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  if (declFamily == OMF_None) {\n    errorID = diag::err_arc_gained_method_convention;"}},
[j]="method implementation does not match its declaration",
[o]={
[b]=a,
[Lb]={"clang/test/ARCMT/checking.m:240:1: error: method implementation does not match its declaration","clang/test/ARCMT/checking.m:261:1: error: method implementation does not match its declaration","clang/test/ARCMT/checking.m:268:1: error: method implementation does not match its declaration"}
[h]=L,
}
[d]={H,1308178962,J},
[k]={{I,2530,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  if (declFamily == OMF_None) {\n    errorID = diag::err_arc_gained_method_convention;"}}
},
},
["err_arc_illegal_explicit_message"]={
["err_arc_illegal_explicit_message"]={
[f]="ARC forbids explicit message send of A",
[h]="ARC forbids explicit message send of A",
[c]=l,
[j]=n,
[e]=n,
[g]="ARC forbids explicit message send of %0",
[i]=m,
[i]=m,
[j]="ARC forbids explicit message send of (.*?)",
[b]="ARC forbids explicit message send of %0",
[b]=a,
[g]=l,
[h]=jb,
[f]="ARC forbids explicit message send of (.*?)",
[d]={H,1308178962,J},
[e]=a,
[k]={{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",390,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n  void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{G,3269,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_retainCount:\n      Diag(SelLoc, diag::err_arc_illegal_explicit_message) << Sel << RecRange;"}}
[d]=kb,
[c]={J,1308178962,I},
[k]={{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",390,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n  void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{F,3269,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_retainCount:\n      Diag(SelLoc, diag::err_arc_illegal_explicit_message) << Sel << RecRange;"}},
[o]={
[Lb]={"clang/test/ARCMT/checking.m:76:17: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:78:15: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:80:23: error: ARC forbids explicit message send of \'retain\'","clang/test/ARCMT/checking.m:84:15: error: ARC forbids explicit message send of \'retain\'","clang/test/ARCMT/checking.m:86:15: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:90:6: error: ARC forbids explicit message send of \'retainCount\'","clang/test/ARCMT/checking.m:93:6: error: ARC forbids explicit message send of \'autorelease\'","clang/test/ARCMT/checking.m:96:6: error: ARC forbids explicit message send of \'autorelease\'","clang/test/ARCMT/checking.m:307:3: error: ARC forbids explicit message send of \'release\'"}
}
},
},
["err_arc_illegal_method_def"]={
["err_arc_illegal_method_def"]={
[f]="ARC forbids ... of A",
[h]="ARC forbids ... of A",
[c]=l,
[j]=n,
[e]=n,
[g]="ARC forbids %select{implementation|synthesis}0 of %1",
[i]=m,
[i]=m,
[j]="ARC forbids (?:implementation|synthesis) of (.*?)",
[b]="ARC forbids %select{implementation|synthesis}0 of %1",
[b]=a,
[g]=l,
[h]=jb,
[f]="ARC forbids (?:implementation|synthesis) of (.*?)",
[d]={H,1308178962,J},
[e]=a,
[k]={{I,417,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // In ARC, disallow definition of retain/release/autorelease/retainCount\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_autorelease:\n      Diag(MDecl->getLocation(), diag::err_arc_illegal_method_def) << 0 << MDecl->getSelector();"},{P,1491,"/// 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  if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n    if (getLangOpts().ObjCAutoRefCount && Synthesize)\n      case OMF_autorelease:\n        Diag(getterMethod->getLocation(), diag::err_arc_illegal_method_def) << 1 << getterMethod->getSelector();"}}
[d]=kb,
[c]={J,1308178962,I},
[k]={{K,417,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // In ARC, disallow definition of retain/release/autorelease/retainCount\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_autorelease:\n      Diag(MDecl->getLocation(), diag::err_arc_illegal_method_def) << 0 << MDecl->getSelector();"},{R,1491,"/// 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  if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n    if (getLangOpts().ObjCAutoRefCount && Synthesize)\n      case OMF_autorelease:\n        Diag(getterMethod->getLocation(), diag::err_arc_illegal_method_def) << 1 << getterMethod->getSelector();"}},
[o]={
["clang/test/SemaObjC/arc-property-lifetime.m"]={"clang/test/SemaObjC/arc-property-lifetime.m:199:36: error: ARC forbids synthesis of \'retain\'"}
}
},
},
["err_arc_illegal_selector"]={
["err_arc_illegal_selector"]={
[f]="ARC forbids use of A in a @selector",
[h]="ARC forbids use of A in a @selector",
[c]=l,
[j]=n,
[e]=n,
[g]="ARC forbids use of %0 in a @selector",
[i]=m,
[i]=m,
[j]="ARC forbids use of (.*?) in a @selector",
[b]="ARC forbids use of %0 in a @selector",
[b]=a,
[g]=l,
[h]=jb,
[f]="ARC forbids use of (.*?) in a @selector",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,1364,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // In ARC, forbid the user from using @selector for\n  // retain/release/autorelease/dealloc/retainCount.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_dealloc:\n      Diag(AtLoc, diag::err_arc_illegal_selector) << Sel << SourceRange(LParenLoc, RParenLoc);"}}
[d]=kb,
[c]={J,1308178962,I},
[k]={{F,1364,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // In ARC, forbid the user from using @selector for\n  // retain/release/autorelease/dealloc/retainCount.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_dealloc:\n      Diag(AtLoc, diag::err_arc_illegal_selector) << Sel << SourceRange(LParenLoc, RParenLoc);"}},
[o]={
[Lb]={"clang/test/ARCMT/checking.m:110:11: error: ARC forbids use of \'retain\' in a @selector","clang/test/ARCMT/checking.m:111:7: error: ARC forbids use of \'release\' in a @selector","clang/test/ARCMT/checking.m:112:7: error: ARC forbids use of \'autorelease\' in a @selector","clang/test/ARCMT/checking.m:113:7: error: ARC forbids use of \'dealloc\' in a @selector"}
}
},
},
["err_arc_inconsistent_property_ownership"]={
["err_arc_inconsistent_property_ownership"]={
[f]="... property A may not also be declared ...",
[h]="... property A may not also be declared ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{|unsafe_unretained|strong|weak}1 property %0 may not also be declared %select{|__unsafe_unretained|__strong|__weak|__autoreleasing}2",
[i]=m,
[i]=m,
[j]="(?:|unsafe_unretained|strong|weak) property (.*?) may not also be declared (?:|__unsafe_unretained|__strong|__weak|__autoreleasing)",
[b]="%select{|unsafe_unretained|strong|weak}1 property %0 may not also be declared %select{|__unsafe_unretained|__strong|__weak|__autoreleasing}2",
[b]=a,
[g]=l,
[h]="ARC and @properties",
[f]="(?:|unsafe_unretained|strong|weak) property (.*?) may not also be declared (?:|__unsafe_unretained|__strong|__weak|__autoreleasing)",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",291,"static void checkAllAtProps(MigrationContext &MigrateCtx, SourceLocation AtLoc, IndivPropsTy &IndProps) {\n  for (unsigned i = 0, e = ATLs.size(); i != e; ++i) {\n    TA.clearDiagnostic(diag::err_arc_inconsistent_property_ownership, ATLs[i].second->getLocation());"},{X,209,"class PropertiesRewriter {\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{X,238,"class PropertiesRewriter {\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{X,263,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{P,99,"/// Check the internal consistency of a property declaration with\n/// an explicit ownership qualifier.\nstatic void checkPropertyDeclWithOwnership(Sema &S, ObjCPropertyDecl *property) {\n  S.Diag(property->getLocation(), diag::err_arc_inconsistent_property_ownership) << property->getDeclName() << expectedLifetime << propertyLifetime;"}}
[d]="ARC and @properties",
[c]={ab,1308874139,bb},
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",291,"static void checkAllAtProps(MigrationContext &MigrateCtx, SourceLocation AtLoc, IndivPropsTy &IndProps) {\n  for (unsigned i = 0, e = ATLs.size(); i != e; ++i) {\n    TA.clearDiagnostic(diag::err_arc_inconsistent_property_ownership, ATLs[i].second->getLocation());"},{Z,209,"class PropertiesRewriter {\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Z,238,"class PropertiesRewriter {\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Z,263,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{R,99,"/// Check the internal consistency of a property declaration with\n/// an explicit ownership qualifier.\nstatic void checkPropertyDeclWithOwnership(Sema &S, ObjCPropertyDecl *property) {\n  S.Diag(property->getLocation(), diag::err_arc_inconsistent_property_ownership) << property->getDeclName() << expectedLifetime << propertyLifetime;"}},
[o]={
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:40:42: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:41:29: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:42:38: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:46:42: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:47:29: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:48:38: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:52:40: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:53:27: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:54:36: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:59:29: error: unsafe_unretained property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:60:38: error: unsafe_unretained property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:65:40: error: unsafe_unretained property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:66:49: error: unsafe_unretained property \'z\' may not also be declared __autoreleasing"}
}
},
},
["err_arc_indirect_no_ownership"]={
["err_arc_indirect_no_ownership"]={
[f]="... to non-const type A with no explicit ownership",
[h]="... to non-const type A with no explicit ownership",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{pointer|reference}1 to non-const type %0 with no explicit ownership",
[i]=m,
[i]=m,
[j]="(?:pointer|reference) to non\\-const type (.*?) with no explicit ownership",
[b]="%select{pointer|reference}1 to non-const type %0 with no explicit ownership",
[b]=a,
[g]=l,
[h]=L,
[f]="(?:pointer|reference) to non\\-const type (.*?) with no explicit ownership",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{r,2073,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  } else if (S.isUnevaluatedContext()) {\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n      S.DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(loc, diag::err_arc_indirect_no_ownership, type, isReference));"},{r,2075,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  } else if (S.isUnevaluatedContext()) {\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n    } else {\n      S.Diag(loc, diag::err_arc_indirect_no_ownership) << type << isReference;"}}
[d]=M,
[c]={ab,1308874139,bb},
[k]={{s,2073,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  } else if (S.isUnevaluatedContext()) {\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n      S.DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(loc, diag::err_arc_indirect_no_ownership, type, isReference));"},{s,2075,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  } else if (S.isUnevaluatedContext()) {\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n    } else {\n      S.Diag(loc, diag::err_arc_indirect_no_ownership) << type << isReference;"}},
[o]={
["clang/test/SemaObjCXX/arc-ppe.mm"]={"clang/test/SemaObjCXX/arc-ppe.mm:16:41: error: pointer to non-const type \'id\' with no explicit ownership"}
}
},
},
["err_arc_init_method_unrelated_result_type"]={
["err_arc_init_method_unrelated_result_type"]={
[h]="init methods must return a type related to the receiver type",
[j]=n,
[i]=m,
[b]="init methods must return a type related to the receiver type",
[g]=l,
[f]="init methods must return a type related to the receiver type",
[f]="init methods must return a type related to the receiver type",
[c]=l,
[e]=a,
[e]=n,
[d]=M,
[g]="init methods must return a type related to the receiver type",
[c]={J,1308178962,I},
[i]=m,
[k]={{K,108,"/// Check whether the given method, which must be in the \'init\'\n/// family, is a valid member of that family.\n///\n/// \\param receiverTypeIfCall - if null, check this as if declaring it;\n///  if non-null, check this as if making a call to it with the given\n///  receiver type\n///\n/// \\return true to indicate that there was an error and appropriate\n///  actions were taken\nbool Sema::checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall) {\n  Diag(loc, diag::err_arc_init_method_unrelated_result_type);"}},
[j]="init methods must return a type related to the receiver type",
[o]={
[b]=a,
[Lb]={"clang/test/ARCMT/checking.m:231:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:232:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:233:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:234:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:235:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:236:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:253:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:254:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:255:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:256:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:257:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:258:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:274:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:275:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:276:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:277:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:278:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:279:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:284:1: error: init methods must return a type related to the receiver type"}
[h]=L,
}
[d]={H,1308178962,J},
[k]={{I,108,"/// Check whether the given method, which must be in the \'init\'\n/// family, is a valid member of that family.\n///\n/// \\param receiverTypeIfCall - if null, check this as if declaring it;\n///  if non-null, check this as if making a call to it with the given\n///  receiver type\n///\n/// \\return true to indicate that there was an error and appropriate\n///  actions were taken\nbool Sema::checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall) {\n  Diag(loc, diag::err_arc_init_method_unrelated_result_type);"}}
},
},
["err_arc_lost_method_convention"]={
["err_arc_lost_method_convention"]={
[f]="method was declared as ... method, but its implementation doesn\'t match because ...",
[h]="method was declared as ... method, but its implementation doesn\'t match because ...",
[c]=l,
[j]=n,
[e]=n,
[g]="method was declared as %select{an \'alloc\'|a \'copy\'|an \'init\'|a \'new\'}0 method, but its implementation doesn\'t match because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1",
[i]=m,
[i]=m,
[j]="method was declared as (?:an \'alloc\'|a \'copy\'|an \'init\'|a \'new\') method, but its implementation doesn\'t match because (?:its result type is not an object pointer|its result type is unrelated to its receiver type)",
[b]="method was declared as %select{an \'alloc\'|a \'copy\'|an \'init\'|a \'new\'}0 method, but its implementation doesn\'t match because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1",
[b]=a,
[g]=l,
[h]=L,
[f]="method was declared as (?:an \'alloc\'|a \'copy\'|an \'init\'|a \'new\') method, but its implementation doesn\'t match because (?:its result type is not an object pointer|its result type is unrelated to its receiver type)",
[d]={H,1308178962,J},
[e]=a,
[k]={{I,2525,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  unsigned errorID = diag::err_arc_lost_method_convention;"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{K,2525,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  unsigned errorID = diag::err_arc_lost_method_convention;"}},
[o]={
[Lb]={"clang/test/ARCMT/checking.m:246:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:248:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:249:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:250:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer"}
}
},
},
["err_arc_may_not_respond"]={
["err_arc_may_not_respond"]={
[f]="no visible @interface for A declares the selector B",
[h]="no visible @interface for A declares the selector B",
[c]=l,
[j]=n,
[e]=n,
[g]="no visible @interface for %0 declares the selector %1",
[i]=m,
[i]=m,
[j]="no visible @interface for (.*?) declares the selector (.*?)",
[b]="no visible @interface for %0 declares the selector %1",
[b]=a,
[g]=l,
[h]=L,
[f]="no visible @interface for (.*?) declares the selector (.*?)",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,3089,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (!Method) {\n          if (!Method && getLangOpts().ObjCAutoRefCount) {\n            Diag(SelLoc, diag::err_arc_may_not_respond) << OCIType->getPointeeType() << Sel << RecRange << SourceRange(SelectorLocs.front(), SelectorLocs.back());"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{F,3089,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (!Method) {\n          if (!Method && getLangOpts().ObjCAutoRefCount) {\n            Diag(SelLoc, diag::err_arc_may_not_respond) << OCIType->getPointeeType() << Sel << RecRange << SourceRange(SelectorLocs.front(), SelectorLocs.back());"}},
[o]={
["clang/test/SemaObjC/typo-correction-subscript.m"]={"clang/test/SemaObjC/typo-correction-subscript.m:10:9: error: no visible @interface for \'Test\' declares the selector \'undeclaredMethod:\'"}
}
},
},
["err_arc_method_not_found"]={
["err_arc_method_not_found"]={
[f]="no known ... method for selector A",
[h]="no known ... method for selector A",
[c]=l,
[j]=n,
[e]=n,
[g]="no known %select{instance|class}1 method for selector %0",
[i]=m,
[i]=m,
[j]="no known (?:instance|class) method for selector (.*?)",
[b]="no known %select{instance|class}1 method for selector %0",
[b]=a,
[g]=l,
[h]=L,
[f]="no known (?:instance|class) method for selector (.*?)",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,1743,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  if (!Method) {\n    if (getLangOpts().ObjCAutoRefCount)\n      DiagID = diag::err_arc_method_not_found;"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{F,1743,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  if (!Method) {\n    if (getLangOpts().ObjCAutoRefCount)\n      DiagID = diag::err_arc_method_not_found;"}},
[o]={
["clang/test/SemaObjC/method-direct-arc.m"]={"clang/test/SemaObjC/method-direct-arc.m:46:9: error: no known class method for selector \'directMethod\'"}
}
},
},
["err_arc_mismatched_cast"]={
["err_arc_mismatched_cast"]={
[f]="... of ... to A is disallowed with ARC",
[h]="... of ... to A is disallowed with ARC",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{implicit conversion|cast}0 of %select{%2|a non-Objective-C pointer type %2|a block pointer|an Objective-C pointer|an indirect pointer to an Objective-C pointer}1 to %3 is disallowed with ARC",
[i]=m,
[i]=m,
[j]="(?:implicit conversion|cast) of (?:(.*?)|a non\\-Objective\\-C pointer type (.*?)|a block pointer|an Objective\\-C pointer|an indirect pointer to an Objective\\-C pointer) to (.*?) is disallowed with ARC",
[b]="%select{implicit conversion|cast}0 of %select{%2|a non-Objective-C pointer type %2|a block pointer|an Objective-C pointer|an indirect pointer to an Objective-C pointer}1 to %3 is disallowed with ARC",
[b]=a,
[g]=l,
[h]=jb,
[f]="(?:implicit conversion|cast) of (?:(.*?)|a non\\-Objective\\-C pointer type (.*?)|a block pointer|an Objective\\-C pointer|an indirect pointer to an Objective\\-C pointer) to (.*?) is disallowed with ARC",
[d]={H,1308178962,J},
[e]=a,
[k]={{hb,209,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{hb,226,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{hb,302,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{hb,312,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void removeBlockReleaseMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{G,3997,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  S.Diag(loc, diag::err_arc_mismatched_cast) << !convKindForDiag << srcKind << castExprType << castType << castRange << castExpr->getSourceRange();"}}
[d]=kb,
[c]={J,1308178962,I},
[k]={{db,209,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{db,226,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{db,302,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{db,312,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  void removeBlockReleaseMacro(CastExpr *E) {\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{F,3997,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  S.Diag(loc, diag::err_arc_mismatched_cast) << !convKindForDiag << srcKind << castExprType << castType << castRange << castExpr->getSourceRange();"}},
[o]={
["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:10:9: error: cast of an Objective-C pointer to \'int *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:12:9: error: cast of an Objective-C pointer to \'__autoreleasing id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:13:9: error: cast of an Objective-C pointer to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:17:9: error: cast of an Objective-C pointer to \'void **\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:58:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:59:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__weak id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:60:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__autoreleasing id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:61:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__unsafe_unretained id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:86:9: error: cast of an indirect pointer to an Objective-C pointer to \'id\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:87:9: error: cast of an Objective-C pointer to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:88:9: error: cast of an indirect pointer to an Objective-C pointer to \'NSString *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:89:9: error: cast of an Objective-C pointer to \'NSString *__strong *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:90:9: error: cast of an indirect pointer to an Objective-C pointer to \'Block\' (aka \'void (^)(void)\') is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:91:9: error: cast of an Objective-C pointer to \'__strong Block *\' (aka \'void (^__strong *)(void)\') is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:106:7: error: implicit conversion of a non-Objective-C pointer type \'struct S *\' to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:108:7: error: implicit conversion of an indirect pointer to an Objective-C pointer to \'struct S *\' is disallowed with ARC"}
}
},
},
["err_arc_multiple_method_decl"]={
["err_arc_multiple_method_decl"]={
[f]="multiple methods named A found with mismatched result, parameter type or attributes",
[h]="multiple methods named A found with mismatched result, parameter type or attributes",
[c]=l,
[j]=n,
[e]=n,
[g]="multiple methods named %0 found with mismatched result, parameter type or attributes",
[i]=m,
[i]=m,
[j]="multiple methods named (.*?) found with mismatched result, parameter type or attributes",
[b]="multiple methods named %0 found with mismatched result, parameter type or attributes",
[b]=a,
[g]=l,
[h]=L,
[f]="multiple methods named (.*?) found with mismatched result, parameter type or attributes",
[d]={H,1308178962,J},
[e]=a,
[k]={{I,3635,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    if (issueError)\n      Diag(R.getBegin(), diag::err_arc_multiple_method_decl) << Sel << R;"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{K,3635,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    if (issueError)\n      Diag(R.getBegin(), diag::err_arc_multiple_method_decl) << Sel << R;"}},
[o]={
[ub]={"clang/test/SemaObjC/arc.m:407:3: error: multiple methods named \'test16_1:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:408:3: error: multiple methods named \'test16_2:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:409:3: error: multiple methods named \'test16_3:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:410:3: error: multiple methods named \'test16_4:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:411:3: error: multiple methods named \'test16_5:\' found with mismatched result, parameter type or attributes"}
}
},
},
["err_arc_new_array_without_ownership"]={
["err_arc_new_array_without_ownership"]={
[f]="\'new\' cannot allocate an array of A with no explicit ownership",
[h]="\'new\' cannot allocate an array of A with no explicit ownership",
[c]=l,
[j]=n,
[e]=n,
[g]="\'new\' cannot allocate an array of %0 with no explicit ownership",
[i]=m,
[i]=m,
[j]="\'new\' cannot allocate an array of (.*?) with no explicit ownership",
[b]="\'new\' cannot allocate an array of %0 with no explicit ownership",
[b]=a,
[g]=l,
[h]=L,
[f]="\'new\' cannot allocate an array of (.*?) with no explicit ownership",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{x,2483,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  else if (AllocType->isReferenceType())\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  else if (AllocType->isVariablyModifiedType())\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n  else if (getLangOpts().ObjCAutoRefCount) {\n    if (const ArrayType *AT = Context.getAsArrayType(AllocType)) {\n      if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None && BaseAllocType->isObjCLifetimeType())\n        return Diag(Loc, diag::err_arc_new_array_without_ownership) << BaseAllocType;"}}
[d]=M,
[c]={ab,1308874139,bb},
[k]={{y,2483,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  else if (AllocType->isReferenceType())\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  else if (AllocType->isVariablyModifiedType())\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n  else if (getLangOpts().ObjCAutoRefCount) {\n    if (const ArrayType *AT = Context.getAsArrayType(AllocType)) {\n      if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None && BaseAllocType->isObjCLifetimeType())\n        return Diag(Loc, diag::err_arc_new_array_without_ownership) << BaseAllocType;"}}
},
},
["err_arc_nolifetime_behavior"]={
["err_arc_nolifetime_behavior"]={
[h]="explicit ownership qualifier on cast result has no effect",
[j]=n,
[i]=m,
[b]="explicit ownership qualifier on cast result has no effect",
[g]=l,
[f]="explicit ownership qualifier on cast result has no effect",
[f]="explicit ownership qualifier on cast result has no effect",
[c]=l,
[e]=a,
[e]=n,
[d]=kb,
[g]="explicit ownership qualifier on cast result has no effect",
[c]={"2fa646d59623",1319832367,"objective-c arc: type-casting of an objc pointer to"},
[i]=m,
[k]={{F,4426,"Sema::ARCConversionResult Sema::CheckObjCConversion(SourceRange castRange, QualType castType, Expr *&castExpr, CheckedConversionKind CCK, bool Diagnose, bool DiagnoseCFAudited, BinaryOperatorKind Opc) {\n  if (exprACTC == castACTC) {\n    // Check for viability and report error if casting an rvalue to a\n    // life-time qualifier.\n    if (castACTC == ACTC_retainable && (CCK == CCK_CStyleCast || CCK == CCK_OtherCast) && castType != castExprType) {\n      if (QDT != castType && QDT.getObjCLifetime() != Qualifiers::OCL_None) {\n        if (Diagnose) {\n          Diag(loc, diag::err_arc_nolifetime_behavior);"}},
[j]="explicit ownership qualifier on cast result has no effect",
[o]={
[b]=a,
["clang/test/SemaObjCXX/arc-objc-lifetime.mm"]={"clang/test/SemaObjCXX/arc-objc-lifetime.mm:19:30: error: explicit ownership qualifier on cast result has no effect","clang/test/SemaObjCXX/arc-objc-lifetime.mm:22:30: error: explicit ownership qualifier on cast result has no effect","clang/test/SemaObjCXX/arc-objc-lifetime.mm:26:30: error: explicit ownership qualifier on cast result has no effect"}
[h]=jb,
}
[d]={"2fa646d59623",1319832367,"objective-c arc: type-casting of an objc pointer to"},
[k]={{G,4426,"Sema::ARCConversionResult Sema::CheckObjCConversion(SourceRange castRange, QualType castType, Expr *&castExpr, CheckedConversionKind CCK, bool Diagnose, bool DiagnoseCFAudited, BinaryOperatorKind Opc) {\n  if (exprACTC == castACTC) {\n    // Check for viability and report error if casting an rvalue to a\n    // life-time qualifier.\n    if (castACTC == ACTC_retainable && (CCK == CCK_CStyleCast || CCK == CCK_OtherCast) && castType != castExprType) {\n      if (QDT != castType && QDT.getObjCLifetime() != Qualifiers::OCL_None) {\n        if (Diagnose) {\n          Diag(loc, diag::err_arc_nolifetime_behavior);"}}
},
},
["err_arc_nonlocal_writeback"]={
["err_arc_nonlocal_writeback"]={
[f]="passing address of ... object to __autoreleasing parameter for write-back",
[h]="passing address of ... object to __autoreleasing parameter for write-back",
[c]=l,
[j]=n,
[e]=n,
[g]="passing address of %select{non-local|non-scalar}0 object to __autoreleasing parameter for write-back",
[i]=m,
[i]=m,
[j]="passing address of (?:non\\-local|non\\-scalar) object to __autoreleasing parameter for write\\-back",
[b]="passing address of %select{non-local|non-scalar}0 object to __autoreleasing parameter for write-back",
[b]=a,
[g]=l,
[h]=L,
[f]="passing address of (?:non\\-local|non\\-scalar) object to __autoreleasing parameter for write\\-back",
[d]={H,1308178962,J},
[e]=a,
[k]={{E,5948,"/// Check whether the given expression is a valid operand for an\n/// indirect copy/restore.\nstatic void checkIndirectCopyRestoreSource(Sema &S, Expr *src) {\n  S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) << ((unsigned)iik - 1) // shift index into diagnostic explanations"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{H,5948,"/// Check whether the given expression is a valid operand for an\n/// indirect copy/restore.\nstatic void checkIndirectCopyRestoreSource(Sema &S, Expr *src) {\n  S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) << ((unsigned)iik - 1) // shift index into diagnostic explanations"}},
[o]={
["clang/test/SemaObjCXX/arc-overloading.mm"]={"clang/test/SemaObjCXX/arc-overloading.mm:85:17: error: passing address of non-local object to __autoreleasing parameter for write-back"}
}
},
},
["err_arc_objc_property_default_assign_on_object"]={
["err_arc_objc_property_default_assign_on_object"]={
[f]="ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute",
[h]="ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute",
[c]=l,
[j]=n,
[e]=n,
[g]="ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute",
[i]=m,
[i]=m,
[j]="ARC forbids synthesizing a property of an Objective\\-C object with unspecified ownership or storage attribute",
[b]="ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute",
[b]=a,
[g]=l,
[h]=jb,
[f]="ARC forbids synthesizing a property of an Objective\\-C object with unspecified ownership or storage attribute",
[d]={H,1308178962,J},
[e]=a,
[k]={{X,266,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_objc_property_default_assign_on_object, I->ImplD->getLocation());"},{P,1306,"/// 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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      // In ARC, give the ivar a lifetime qualifier based on the\n      // property attributes.\n      if ((getLangOpts().ObjCAutoRefCount || isARCWeak) && !PropertyIvarType.getObjCLifetime() && PropertyIvarType->isObjCRetainableType()) {\n        // It\'s an error if we have to do this and the user didn\'t\n        // explicitly write an ownership attribute on the property.\n        if (!hasWrittenStorageAttribute(property, QueryKind) && !(kind & ObjCPropertyAttribute::kind_strong)) {\n          Diag(PropertyDiagLoc, diag::err_arc_objc_property_default_assign_on_object);"}}
[d]=kb,
[c]={J,1308178962,I},
[k]={{Z,266,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_objc_property_default_assign_on_object, I->ImplD->getLocation());"},{R,1306,"/// 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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      // In ARC, give the ivar a lifetime qualifier based on the\n      // property attributes.\n      if ((getLangOpts().ObjCAutoRefCount || isARCWeak) && !PropertyIvarType.getObjCLifetime() && PropertyIvarType->isObjCRetainableType()) {\n        // It\'s an error if we have to do this and the user didn\'t\n        // explicitly write an ownership attribute on the property.\n        if (!hasWrittenStorageAttribute(property, QueryKind) && !(kind & ObjCPropertyAttribute::kind_strong)) {\n          Diag(PropertyDiagLoc, diag::err_arc_objc_property_default_assign_on_object);"}}
},
},
["err_arc_perform_selector_retains"]={
["err_arc_perform_selector_retains"]={
[h]="performSelector names a selector which retains the object",
[j]=n,
[i]=m,
[b]="performSelector names a selector which retains the object",
[g]=l,
[f]="performSelector names a selector which retains the object",
[f]="performSelector names a selector which retains the object",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="performSelector names a selector which retains the object",
[c]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors"},
[i]=m,
[k]={{F,3297,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            case OMF_init:\n              // Issue error, unless ns_returns_not_retained.\n              if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"},{F,3307,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            default:\n              // +0 call. OK. unless ns_returns_retained.\n              if (SelMethod->hasAttr<NSReturnsRetainedAttr>()) {\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"}},
[j]="performSelector names a selector which retains the object",
[o]={
[b]=a,
["clang/test/SemaObjC/arc-peformselector.m"]={"clang/test/SemaObjC/arc-peformselector.m:28:16: error: performSelector names a selector which retains the object","clang/test/SemaObjC/arc-peformselector.m:29:16: error: performSelector names a selector which retains the object","clang/test/SemaObjC/arc-peformselector.m:30:16: error: performSelector names a selector which retains the object","clang/test/SemaObjC/arc-peformselector.m:37:16: error: performSelector names a selector which retains the object"}
[h]=o,
}
[d]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors"},
[k]={{G,3297,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            case OMF_init:\n              // Issue error, unless ns_returns_not_retained.\n              if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"},{G,3307,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            default:\n              // +0 call. OK. unless ns_returns_retained.\n              if (SelMethod->hasAttr<NSReturnsRetainedAttr>()) {\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"}}
},
},
["err_arc_pseudo_dtor_inconstant_quals"]={
["err_arc_pseudo_dtor_inconstant_quals"]={
[f]="pseudo-destructor destroys object of type A with inconsistently-qualified type B",
[h]="pseudo-destructor destroys object of type A with inconsistently-qualified type B",
[c]=l,
[j]=n,
[e]=n,
[g]="pseudo-destructor destroys object of type %0 with inconsistently-qualified type %1",
[i]=m,
[i]=m,
[j]="pseudo\\-destructor destroys object of type (.*?) with inconsistently\\-qualified type (.*?)",
[b]="pseudo-destructor destroys object of type %0 with inconsistently-qualified type %1",
[b]=a,
[g]=l,
[h]=L,
[f]="pseudo\\-destructor destroys object of type (.*?) with inconsistently\\-qualified type (.*?)",
[d]={H,1308178962,J},
[e]=a,
[k]={{x,7822,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n      } else if (DestructedType.getObjCLifetime() != ObjectType.getObjCLifetime()) {\n        if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {\n        } else {\n          Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{y,7822,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n      } else if (DestructedType.getObjCLifetime() != ObjectType.getObjCLifetime()) {\n        if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {\n        } else {\n          Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"}}
},
},
["err_arc_receiver_forward_class"]={
["err_arc_receiver_forward_class"]={
[f]="receiver A for class message is a forward declaration",
[h]="receiver A for class message is a forward declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="receiver %0 for class message is a forward declaration",
[i]=m,
[i]=m,
[j]="receiver (.*?) for class message is a forward declaration",
[b]="receiver %0 for class message is a forward declaration",
[b]=a,
[g]=l,
[h]=L,
[f]="receiver (.*?) for class message is a forward declaration",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,2663,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Find the method we are messaging.\n  if (!Method) {\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{F,2663,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Find the method we are messaging.\n  if (!Method) {\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {"}},
[o]={
[ub]={"clang/test/SemaObjC/arc.m:427:4: error: receiver \'Test17\' for class message is a forward declaration"}
}
},
},
["err_arc_receiver_forward_instance"]={
["err_arc_receiver_forward_instance"]={
[f]="receiver type A for instance message is a forward declaration",
[h]="receiver type A for instance message is a forward declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="receiver type %0 for instance message is a forward declaration",
[i]=m,
[i]=m,
[j]="receiver type (.*?) for instance message is a forward declaration",
[b]="receiver type %0 for instance message is a forward declaration",
[b]=a,
[g]=l,
[h]=L,
[f]="receiver type (.*?) for instance message is a forward declaration",
[d]={H,1308178962,J},
[e]=a,
[k]={{G,3066,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {"}}
[d]=M,
[c]={J,1308178962,I},
[k]={{F,3066,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {"}},
[o]={
[ub]={"clang/test/SemaObjC/arc.m:422:4: error: receiver type \'Test17\' for instance message is a forward declaration","clang/test/SemaObjC/arc.m:425:4: error: receiver type \'Test17<Test17p>\' for instance message is a forward declaration"}
}
},
},
["err_arc_strong_property_ownership"]={
["err_arc_strong_property_ownership"]={
[f]="existing instance variable A for strong property B may not be ...",
[h]="existing instance variable A for strong property B may not be ...",
[c]=l,
[j]=n,
[e]=n,
[g]="existing instance variable %1 for strong property %0 may not be %select{|__unsafe_unretained||__weak}2",
[i]=m,
[i]=m,
[j]="existing instance variable (.*?) for strong property (.*?) may not be (?:|__unsafe_unretained||__weak)",
[b]="existing instance variable %1 for strong property %0 may not be %select{|__unsafe_unretained||__weak}2",
[b]=a,
[g]=l,
[h]="ARC and @properties",
[f]="existing instance variable (.*?) for strong property (.*?) may not be (?:|__unsafe_unretained||__weak)",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{X,207,"class PropertiesRewriter {\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{X,236,"class PropertiesRewriter {\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{X,261,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{P,764,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  case Qualifiers::OCL_Strong:\n    S.Diag(ivar->getLocation(), diag::err_arc_strong_property_ownership) << property->getDeclName() << ivar->getDeclName() << ivarLifetime;"}}
[d]="ARC and @properties",
[c]={ab,1308874139,bb},
[k]={{Z,207,"class PropertiesRewriter {\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Z,236,"class PropertiesRewriter {\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Z,261,"class PropertiesRewriter {\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{R,764,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  case Qualifiers::OCL_Strong:\n    S.Diag(ivar->getLocation(), diag::err_arc_strong_property_ownership) << property->getDeclName() << ivar->getDeclName() << ivarLifetime;"}},
[o]={
["clang/test/SemaObjC/arc-property-lifetime.m"]={"clang/test/SemaObjC/arc-property-lifetime.m:6:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained","clang/test/SemaObjC/arc-property-lifetime.m:23:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained","clang/test/SemaObjC/arc-property-lifetime.m:40:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained"}
}
},
},
["err_arc_thread_ownership"]={
["err_arc_thread_ownership"]={
[f]="thread-local variable has non-trivial ownership: type is A",
[h]="thread-local variable has non-trivial ownership: type is A",
[c]=l,
[j]=n,
[e]=n,
[g]="thread-local variable has non-trivial ownership: type is %0",
[i]=m,
[i]=m,
[j]="thread\\-local variable has non\\-trivial ownership\\: type is (.*?)",
[b]="thread-local variable has non-trivial ownership: type is %0",
[b]=a,
[g]=l,
[h]=L,
[f]="thread\\-local variable has non\\-trivial ownership\\: type is (.*?)",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{q,6893,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  if (VarDecl *var = dyn_cast<VarDecl>(decl)) {\n    // Thread-local variables cannot have lifetime.\n    if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone && var->getTLSKind()) {\n      Diag(var->getLocation(), diag::err_arc_thread_ownership) << var->getType();"}}
[d]=M,
[c]={ab,1308874139,bb},
[k]={{r,6893,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  if (VarDecl *var = dyn_cast<VarDecl>(decl)) {\n    // Thread-local variables cannot have lifetime.\n    if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone && var->getTLSKind()) {\n      Diag(var->getLocation(), diag::err_arc_thread_ownership) << var->getType();"}},
[o]={
[ub]={"clang/test/SemaObjC/arc.m:448:20: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:449:29: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:450:27: error: thread-local variable has non-trivial ownership: type is \'__weak id\'","clang/test/SemaObjC/arc.m:451:36: error: thread-local variable has non-trivial ownership: type is \'__autoreleasing id\'","clang/test/SemaObjC/arc.m:454:22: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:455:31: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:456:29: error: thread-local variable has non-trivial ownership: type is \'__weak id\'","clang/test/SemaObjC/arc.m:457:38: error: thread-local variable has non-trivial ownership: type is \'__autoreleasing id\'"}
}
},
},
["err_arc_typecheck_convert_incompatible_pointer"]={
["err_arc_typecheck_convert_incompatible_pointer"]={
[f]="incompatible pointer types passing retainable parameter of type Ato a CF function expecting B type",
[h]="incompatible pointer types passing retainable parameter of type Ato a CF function expecting B type",
[c]=l,
[j]=n,
[e]=n,
[g]="incompatible pointer types passing retainable parameter of type %0to a CF function expecting %1 type",
[i]=m,
[i]=m,
[j]="incompatible pointer types passing retainable parameter of type (.*?)to a CF function expecting (.*?) type",
[b]="incompatible pointer types passing retainable parameter of type %0to a CF function expecting %1 type",
[b]=a,
[g]=l,
[h]=o,
[f]="incompatible pointer types passing retainable parameter of type (.*?)to a CF function expecting (.*?) type",
[d]={"3a25d0d59395",1375312774,"ObjectiveC ARC: finishing off issuing error when"},
[e]=a,
[k]={{y,17563,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointer:\n    if (Action == AA_Passing_CFAudited) {\n      DiagKind = diag::err_arc_typecheck_convert_incompatible_pointer;"}}
[d]=p,
[c]={"3a25d0d59395",1375312774,"ObjectiveC ARC: finishing off issuing error when"},
[k]={{z,17563,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointer:\n    if (Action == AA_Passing_CFAudited) {\n      DiagKind = diag::err_arc_typecheck_convert_incompatible_pointer;"}},
[o]={
["clang/test/SemaObjC/arc-cf.m"]={"clang/test/SemaObjC/arc-cf.m:58:35: error: incompatible pointer types passing retainable parameter of type \'NSString *__strong\'to a CF function expecting \'CFStringRef\' (aka \'const struct __CFString *\') type"}
}
},
},
["err_arc_unsupported_on_runtime"]={
["err_arc_unsupported_on_runtime"]={
[f]="-fobjc-arc is not supported on platforms using the legacy runtime",
[h]="-fobjc-arc is not supported on platforms using the legacy runtime",
[c]=l,
[j]=n,
[e]=n,
[g]="-fobjc-arc is not supported on platforms using the legacy runtime",
[i]=m,
[i]=m,
[j]="\\-fobjc\\-arc is not supported on platforms using the legacy runtime",
[b]="-fobjc-arc is not supported on platforms using the legacy runtime",
[b]=a,
[g]=l,
[h]=a,
[f]="\\-fobjc\\-arc is not supported on platforms using the legacy runtime",
[d]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the"},
[e]=a,
[k]={{O,3665,"#include \"clang/Driver/Options.inc\"\n  if (Opts.ObjC) {\n    if (Args.hasArg(OPT_fobjc_gc_only))\n    else if (Args.hasArg(OPT_fobjc_gc))\n    else if (Args.hasArg(OPT_fobjc_arc)) {\n      if (!Opts.ObjCRuntime.allowsARC())\n        Diags.Report(diag::err_arc_unsupported_on_runtime);"}}
[d]=a,
[c]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the"},
[k]={{P,3665,"#include \"clang/Driver/Options.inc\"\n  if (Opts.ObjC) {\n    if (Args.hasArg(OPT_fobjc_gc_only))\n    else if (Args.hasArg(OPT_fobjc_gc))\n    else if (Args.hasArg(OPT_fobjc_arc)) {\n      if (!Opts.ObjCRuntime.allowsARC())\n        Diags.Report(diag::err_arc_unsupported_on_runtime);"}}
},
},
["err_arc_unsupported_on_toolchain"]={
["err_arc_unsupported_on_toolchain"]={
[f]="-fobjc-arc is not supported on versions of OS X prior to 10.6",
[h]="-fobjc-arc is not supported on versions of OS X prior to 10.6",
[c]=l,
[j]=n,
[e]=n,
[g]="-fobjc-arc is not supported on versions of OS X prior to 10.6",
[i]=m,
[i]=m,
[j]="\\-fobjc\\-arc is not supported on versions of OS X prior to 10\\.6",
[b]="-fobjc-arc is not supported on versions of OS X prior to 10.6",
[b]=a,
[g]=l,
[h]=a,
[f]="\\-fobjc\\-arc is not supported on versions of OS X prior to 10\\.6",
[d]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the"},
[e]=a,
[d]=a,
[c]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the"},
[k]={{"clang/lib/Driver/ToolChains/Darwin.cpp",3295,"void Darwin::CheckObjCARC() const {\n  getDriver().Diag(diag::err_arc_unsupported_on_toolchain);"}}
[k]={{"clang/lib/Driver/ToolChains/Darwin.cpp",3295,"void Darwin::CheckObjCARC() const {\n  getDriver().Diag(diag::err_arc_unsupported_on_toolchain);"}}
},
},
["err_arc_unsupported_weak_class"]={
["err_arc_unsupported_weak_class"]={
[h]="class is incompatible with __weak references",
[j]=n,
[i]=m,
[b]="class is incompatible with __weak references",
[g]=l,
[f]="class is incompatible with __weak references",
[f]="class is incompatible with __weak references",
[c]=l,
[e]=a,
[e]=n,
[d]=Eb,
[g]="class is incompatible with __weak references",
[c]={"1f626d6fd1ca",1309980245,"objc-arc: Support objc_arc_weak_unavailable on those"},
[i]=m,
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",211,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{s,7074,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Forbid __weak for class objects marked as\n  // objc_arc_weak_reference_unavailable\n  if (lifetime == Qualifiers::OCL_Weak) {\n    if (const ObjCObjectPointerType *ObjT = type->getAs<ObjCObjectPointerType>()) {\n      if (ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl()) {\n        if (Class->isArcWeakrefUnavailable()) {\n          S.Diag(AttrLoc, diag::err_arc_unsupported_weak_class);"}},
[j]="class is incompatible with __weak references",
[o]={
[b]=a,
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:21:34: error: class is incompatible with __weak references","clang/test/SemaObjCXX/objc-weak.mm:25:29: error: class is incompatible with __weak references"}
[h]=Ab,
}
[d]={"1f626d6fd1ca",1309980245,"objc-arc: Support objc_arc_weak_unavailable on those"},
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",211,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{r,7074,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Forbid __weak for class objects marked as\n  // objc_arc_weak_reference_unavailable\n  if (lifetime == Qualifiers::OCL_Weak) {\n    if (const ObjCObjectPointerType *ObjT = type->getAs<ObjCObjectPointerType>()) {\n      if (ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl()) {\n        if (Class->isArcWeakrefUnavailable()) {\n          S.Diag(AttrLoc, diag::err_arc_unsupported_weak_class);"}}
},
},
["err_arc_unused_init_message"]={
["err_arc_unused_init_message"]={
[h]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[j]=n,
[i]=m,
[b]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[g]=l,
[f]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[f]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[c]=l,
[e]=a,
[e]=n,
[d]=kb,
[g]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[c]={J,1308178962,I},
[i]=m,
[k]={{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",53,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {"},{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",56,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {\n      Pass.TA.clearDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc());"},{S,328,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n    if (getLangOpts().ObjCAutoRefCount && ME->isDelegateInitCall()) {\n      Diag(Loc, diag::err_arc_unused_init_message) << R1;"}},
[j]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[o]={
[b]=a,
[ub]={"clang/test/SemaObjC/arc.m:528:3: error: the result of a delegate init call must be immediately returned or assigned to \'self\'"}
[h]=jb,
}
[d]={H,1308178962,J},
[k]={{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",53,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {"},{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",56,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {\n      Pass.TA.clearDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc());"},{R,328,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n    if (getLangOpts().ObjCAutoRefCount && ME->isDelegateInitCall()) {\n      Diag(Loc, diag::err_arc_unused_init_message) << R1;"}}
},
},
["err_arc_weak_disabled"]={
["err_arc_weak_disabled"]={
[h]="cannot create __weak reference in file using manual reference counting",
[j]=n,
[i]=m,
[b]="cannot create __weak reference in file using manual reference counting",
[g]=l,
[f]="cannot create __weak reference in file using manual reference counting",
[f]="cannot create __weak reference in file using manual reference counting",
[c]=l,
[e]=a,
[e]=n,
[d]=Eb,
[g]="cannot create __weak reference in file using manual reference counting",
[c]={"460ce58fa6a1",1445539097,"Define weak and __weak to mean ARC-style weak references, even in MRC."},
[i]=m,
[k]={{q,9802,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{K,3794,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_disabled);"},{s,7057,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}},
[j]="cannot create __weak reference in file using manual reference counting",
[o]={
[b]=a,
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:15:13: error: cannot create __weak reference in file using manual reference counting"}
[h]=Ab,
}
[d]={"460ce58fa6a1",1445539097,"Define weak and __weak to mean ARC-style weak references, even in MRC."},
[k]={{p,9802,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{I,3794,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_disabled);"},{r,7057,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}}
},
},
["err_arc_weak_ivar_access"]={
["err_arc_weak_ivar_access"]={
[h]="dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first",
[j]=n,
[i]=m,
[b]="dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first",
[g]=l,
[f]="dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first",
[f]="dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first",
[c]={zb,1480718311,vb},
[i]=m,
[k]={{"clang/lib/Sema/SemaExprMember.cpp",1462,"/// 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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (S.getLangOpts().ObjCWeak) {\n      if (DeclRefExpr *DE = dyn_cast<DeclRefExpr>(BaseExp))\n        if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n          S.Diag(DE->getLocation(), diag::err_arc_weak_ivar_access);"}},
[j]="dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first",
[o]={
[b]=a,
["clang/test/SemaObjC/warn-direct-ivar-access.m"]={"clang/test/SemaObjC/warn-direct-ivar-access.m:52:3: error: dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first","clang/test/SemaObjC/warn-direct-ivar-access.m:53:14: error: dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first","clang/test/SemaObjC/warn-direct-ivar-access.m:54:16: error: dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first"}
[h]=o,
}
[d]={ub,1480718311,yb},
[k]={{"clang/lib/Sema/SemaExprMember.cpp",1462,"/// 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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (S.getLangOpts().ObjCWeak) {\n      if (DeclRefExpr *DE = dyn_cast<DeclRefExpr>(BaseExp))\n        if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n          S.Diag(DE->getLocation(), diag::err_arc_weak_ivar_access);"}}
},
},
["err_arc_weak_no_runtime"]={
["err_arc_weak_no_runtime"]={
[h]="cannot create __weak reference because the current deployment target does not support weak references",
[j]=n,
[i]=m,
[b]="cannot create __weak reference because the current deployment target does not support weak references",
[g]=l,
[f]="cannot create __weak reference because the current deployment target does not support weak references",
[f]="cannot create __weak reference because the current deployment target does not support weak references",
[c]=l,
[e]=a,
[e]=n,
[d]=Eb,
[g]="cannot create __weak reference because the current deployment target does not support weak references",
[c]={J,1308178962,I},
[i]=m,
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",210,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{q,9803,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{K,3796,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n      } else {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_no_runtime);"},{s,7058,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}},
[j]="cannot create __weak reference because the current deployment target does not support weak references",
[o]={
[b]=a,
["clang/test/SemaObjC/arc-no-runtime.m"]={"clang/test/SemaObjC/arc-no-runtime.m:5:3: error: cannot create __weak reference because the current deployment target does not support weak references"}
[h]=Ab,
}
[d]={H,1308178962,J},
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",210,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{p,9803,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{I,3796,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n      } else {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_no_runtime);"},{r,7058,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}}
},
},
["err_arc_weak_unavailable_assign"]={
["err_arc_weak_unavailable_assign"]={
[f]="assignment of a weak-unavailable object to a __weak object",
[h]="assignment of a weak-unavailable object to a __weak object",
[c]=l,
[j]=n,
[e]=n,
[g]="assignment of a weak-unavailable object to a __weak object",
[i]=m,
[i]=m,
[j]="assignment of a weak\\-unavailable object to a __weak object",
[b]="assignment of a weak-unavailable object to a __weak object",
[b]=a,
[g]=l,
[h]=Ab,
[f]="assignment of a weak\\-unavailable object to a __weak object",
[d]={"6f472e803bf8",1310064947,"objc-arc: diagnose assignment/cast of a weak-unavailable"},
[e]=a,
[k]={{y,17705,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleObjCWeakRef:\n    DiagKind = diag::err_arc_weak_unavailable_assign;"},{x,4495,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n        Diag(From->getBeginLoc(), diag::err_arc_weak_unavailable_assign);"}}
[d]=Eb,
[c]={"6f472e803bf8",1310064947,"objc-arc: diagnose assignment/cast of a weak-unavailable"},
[k]={{z,17705,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleObjCWeakRef:\n    DiagKind = diag::err_arc_weak_unavailable_assign;"},{y,4495,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n        Diag(From->getBeginLoc(), diag::err_arc_weak_unavailable_assign);"}},
[o]={
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:21:17: error: assignment of a weak-unavailable object to a __weak object","clang/test/SemaObjCXX/objc-weak.mm:25:17: error: assignment of a weak-unavailable object to a __weak object"}
}
},
},
["err_arc_weak_unavailable_property"]={
["err_arc_weak_unavailable_property"]={
[f]="synthesizing __weak instance variable of type A, which does not support weak references",
[h]="synthesizing __weak instance variable of type A, which does not support weak references",
[c]=l,
[j]=n,
[e]=n,
[g]="synthesizing __weak instance variable of type %0, which does not support weak references",
[i]=m,
[i]=m,
[j]="synthesizing __weak instance variable of type (.*?), which does not support weak references",
[b]="synthesizing __weak instance variable of type %0, which does not support weak references",
[b]=a,
[g]=l,
[h]=Ab,
[f]="synthesizing __weak instance variable of type (.*?), which does not support weak references",
[d]={"e283346d0bf4",1323460511,"objc-arc: diagnose synthesis of a \'weak unavailable\' property."},
[e]=a,
[k]={{P,1265,"/// 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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n        } else {\n          if (const ObjCObjectPointerType *ObjT = PropertyIvarType->getAs<ObjCObjectPointerType>()) {\n            if (ObjI && ObjI->isArcWeakrefUnavailable()) {\n              Diag(property->getLocation(), diag::err_arc_weak_unavailable_property) << PropertyIvarType;"}}
[d]=Eb,
[c]={"e283346d0bf4",1323460511,"objc-arc: diagnose synthesis of a \'weak unavailable\' property."},
[k]={{R,1265,"/// 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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n        } else {\n          if (const ObjCObjectPointerType *ObjT = PropertyIvarType->getAs<ObjCObjectPointerType>()) {\n            if (ObjI && ObjI->isArcWeakrefUnavailable()) {\n              Diag(property->getLocation(), diag::err_arc_weak_unavailable_property) << PropertyIvarType;"}},
[o]={
["clang/test/SemaObjC/arc-unavailable-for-weakref.m"]={"clang/test/SemaObjC/arc-unavailable-for-weakref.m:60:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references","clang/test/SemaObjC/arc-unavailable-for-weakref.m:69:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references","clang/test/SemaObjC/arc-unavailable-for-weakref.m:80:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references"}
}
},
},
["err_arch_unsupported_isa"]={
["err_arch_unsupported_isa"]={
[f]="architecture \'A\' does not support \'B\' execution mode",
[h]="architecture \'A\' does not support \'B\' execution mode",
[c]=l,
[j]=n,
[e]=n,
[g]="architecture \'%0\' does not support \'%1\' execution mode",
[i]=m,
[i]=m,
[j]="architecture \'(.*?)\' does not support \'(.*?)\' execution mode",
[b]="architecture \'%0\' does not support \'%1\' execution mode",
[b]=a,
[g]=l,
[h]=a,
[f]="architecture \'(.*?)\' does not support \'(.*?)\' execution mode",
[d]={"83e57c232702",1501843218,"[Driver] Error if ARM mode was selected explicitly for M-profile CPUs."},
[e]=a,
[d]=a,
[c]={"83e57c232702",1501843218,"[Driver] Error if ARM mode was selected explicitly for M-profile CPUs."},
[k]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",267,"void arm::setArchNameInTriple(const Driver &D, const ArgList &Args, types::ID InputType, llvm::Triple &Triple) {\n  if (IsMProfile && ARMModeRequested) {\n    if (MCPU.size())\n    else\n      D.Diag(diag::err_arch_unsupported_isa) << tools::arm::getARMArch(MArch, Triple) << \"ARM\";"}}
[k]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",267,"void arm::setArchNameInTriple(const Driver &D, const ArgList &Args, types::ID InputType, llvm::Triple &Triple) {\n  if (IsMProfile && ARMModeRequested) {\n    if (MCPU.size())\n    else\n      D.Diag(diag::err_arch_unsupported_isa) << tools::arm::getARMArch(MArch, Triple) << \"ARM\";"}}
},
},
["err_arcmt_nsinvocation_ownership"]={
["err_arcmt_nsinvocation_ownership"]={
[f]="NSInvocation\'s A is not safe to be used with an object with ownership other than __unsafe_unretained",
[h]="NSInvocation\'s A is not safe to be used with an object with ownership other than __unsafe_unretained",
[c]=l,
[j]=n,
[e]=n,
[g]="NSInvocation\'s %0 is not safe to be used with an object with ownership other than __unsafe_unretained",
[i]=m,
[i]=m,
[j]="NSInvocation\'s (.*?) is not safe to be used with an object with ownership other than __unsafe_unretained",
[b]="NSInvocation\'s %0 is not safe to be used with an object with ownership other than __unsafe_unretained",
[b]=a,
[g]=l,
[h]=a,
[f]="NSInvocation\'s (.*?) is not safe to be used with an object with ownership other than __unsafe_unretained",
[d]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"},
[e]=a,
[k]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",79,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n  bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n    // NSInvocation.\n    if (E->isInstanceMessage() && E->getReceiverInterface() && E->getReceiverInterface()->getName() == \"NSInvocation\") {\n      if (pointee.getObjCLifetime() > Qualifiers::OCL_ExplicitNone)\n        Pass.TA.report(parm->getBeginLoc(), diag::err_arcmt_nsinvocation_ownership, parm->getSourceRange()) << selName;"}}
[d]=a,
[c]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"},
[k]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",79,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n  bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n    // NSInvocation.\n    if (E->isInstanceMessage() && E->getReceiverInterface() && E->getReceiverInterface()->getName() == \"NSInvocation\") {\n      if (pointee.getObjCLifetime() > Qualifiers::OCL_ExplicitNone)\n        Pass.TA.report(parm->getBeginLoc(), diag::err_arcmt_nsinvocation_ownership, parm->getSourceRange()) << selName;"}},
[o]={
["clang/test/ARCMT/check-api.m"]={"clang/test/ARCMT/check-api.m:23:25: error: NSInvocation\'s getReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:24:25: error: NSInvocation\'s getReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:28:25: error: NSInvocation\'s setReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:29:25: error: NSInvocation\'s setReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:33:22: error: NSInvocation\'s getArgument is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:34:22: error: NSInvocation\'s getArgument is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:38:22: error: NSInvocation\'s setArgument is not safe to be used with an object with ownership other than __unsafe_unretained","clang/test/ARCMT/check-api.m:39:22: error: NSInvocation\'s setArgument is not safe to be used with an object with ownership other than __unsafe_unretained"}
}
},
},
["err_arg_with_address_space"]={
["err_arg_with_address_space"]={
[h]="parameter may not be qualified with an address space",
[j]=n,
[i]=m,
[b]="parameter may not be qualified with an address space",
[g]=l,
[f]="parameter may not be qualified with an address space",
[f]="parameter may not be qualified with an address space",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="parameter may not be qualified with an address space",
[c]={"fd2dcba7f3a6",1254343663,"Add an error for function parameters that have a qualified address space since this is not allowed b..."},
[i]=m,
[k]={{r,14958,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default &&\n    Diag(NameLoc, diag::err_arg_with_address_space);"},{K,5151,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default) {\n    Diag(IdLoc, diag::err_arg_with_address_space);"}},
[j]="parameter may not be qualified with an address space",
[o]={
[b]=a,
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:52:32: error: parameter may not be qualified with an address space","clang/test/SemaHLSL/group_shared.hlsl:73:30: error: parameter may not be qualified with an address space","clang/test/SemaHLSL/group_shared.hlsl:107:29: error: parameter may not be qualified with an address space"}
[h]=o,
}
[d]={"fd2dcba7f3a6",1254343663,"Add an error for function parameters that have a qualified address space since this is not allowed b..."},
[k]={{q,14958,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default &&\n    Diag(NameLoc, diag::err_arg_with_address_space);"},{I,5151,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default) {\n    Diag(IdLoc, diag::err_arg_with_address_space);"}}
},
},
["err_argument_invalid_range"]={
["err_argument_invalid_range"]={
[f]="argument value A is outside the valid range [B, C]",
[h]="argument value A is outside the valid range [B, C]",
[c]=l,
[j]=n,
[e]=n,
[g]="argument value %0 is outside the valid range [%1, %2]",
[i]=m,
[i]=m,
[j]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]",
[b]="argument value %0 is outside the valid range [%1, %2]",
[b]=a,
[g]=l,
[h]=o,
[f]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]",
[d]={u,1237025389,t},
[e]=a,
[k]={{s,8809,"/// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression in the range [Low, High].\nbool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError) {\n  if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n    if (RangeIsError)\n      return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{t,8809,"/// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression in the range [Low, High].\nbool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError) {\n  if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n    if (RangeIsError)\n      return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange();"}},
[o]={
["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:13:8: error: argument value 4294967295 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:18:8: error: argument value 1048575 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:32:8: error: argument value 4294967295 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:37:8: error: argument value 1048575 is outside the valid range [0, 65535]"}
}
},
},
["err_argument_not_contiguous_bit_field"]={
["err_argument_not_contiguous_bit_field"]={
[f]="argument A value should represent a contiguous bit field",
[h]="argument A value should represent a contiguous bit field",
[c]=l,
[j]=n,
[e]=n,
[g]="argument %0 value should represent a contiguous bit field",
[i]=m,
[i]=m,
[j]="argument (.*?) value should represent a contiguous bit field",
[b]="argument %0 value should represent a contiguous bit field",
[b]=a,
[g]=l,
[h]=o,
[f]="argument (.*?) value should represent a contiguous bit field",
[d]={Lb,1615397021,Kb},
[e]=a,
[k]={{s,4238,"/// Returns true if the argument consists of one contiguous run of 1s with any\n/// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB, so\n/// 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not,\n/// since all 1s are not contiguous.\nbool Sema::SemaValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_contiguous_bit_field) << ArgNum << Arg->getSourceRange();"}}
[d]=p,
[c]={Kb,1615397021,Mb},
[k]={{t,4238,"/// Returns true if the argument consists of one contiguous run of 1s with any\n/// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB, so\n/// 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not,\n/// since all 1s are not contiguous.\nbool Sema::SemaValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_contiguous_bit_field) << ArgNum << Arg->getSourceRange();"}},
[o]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:32:9: error: argument 3 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:40:9: error: argument 3 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:46:9: error: argument 2 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:73:10: error: argument 2 value should represent a contiguous bit field"}
}
},
},
["err_argument_not_multiple"]={
["err_argument_not_multiple"]={
[f]="argument should be a multiple of A",
[h]="argument should be a multiple of A",
[c]=l,
[j]=n,
[e]=n,
[g]="argument should be a multiple of %0",
[i]=m,
[i]=m,
[j]="argument should be a multiple of (.*?)",
[b]="argument should be a multiple of %0",
[b]=a,
[g]=l,
[h]=o,
[f]="argument should be a multiple of (.*?)",
[d]={"1f90f2d33f72",1476899452,"[mips][msa] Range check MSA intrinsics with immediates"},
[e]=a,
[k]={{s,8839,"/// SemaBuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression is a multiple of Num..\nbool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, unsigned Num) {\n  if (Result.getSExtValue() % Num != 0)\n    return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) << Num << Arg->getSourceRange();"}}
[d]=p,
[c]={"1f90f2d33f72",1476899452,"[mips][msa] Range check MSA intrinsics with immediates"},
[k]={{t,8839,"/// SemaBuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression is a multiple of Num..\nbool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, unsigned Num) {\n  if (Result.getSExtValue() % Num != 0)\n    return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) << Num << Arg->getSourceRange();"}},
[o]={
["clang/test/CodeGen/hexagon-check-builtins.c"]={"clang/test/CodeGen/hexagon-check-builtins.c:19:10: error: argument should be a multiple of 4","clang/test/CodeGen/hexagon-check-builtins.c:22:10: error: argument should be a multiple of 4","clang/test/CodeGen/hexagon-check-builtins.c:28:10: error: argument should be a multiple of 4"}
}
},
},
["err_argument_not_power_of_2"]={
["err_argument_not_power_of_2"]={
[h]="argument should be a power of 2",
[j]=n,
[i]=m,
[b]="argument should be a power of 2",
[g]=l,
[f]="argument should be a power of 2",
[f]="argument should be a power of 2",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="argument should be a power of 2",
[c]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE."},
[i]=m,
[k]={{t,8864,"/// SemaBuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a\n/// constant expression representing a power of 2.\nbool Sema::SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2) << Arg->getSourceRange();"}},
[j]="argument should be a power of 2",
[o]={
[b]=a,
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:80:3: error: argument should be a power of 2","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:82:3: error: argument should be a power of 2"}
[h]=o,
}
[d]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE."},
[k]={{s,8864,"/// SemaBuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a\n/// constant expression representing a power of 2.\nbool Sema::SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2) << Arg->getSourceRange();"}}
},
},
["err_argument_not_shifted_byte"]={
["err_argument_not_shifted_byte"]={
[f]="argument should be an 8-bit value shifted by a multiple of 8 bits",
[h]="argument should be an 8-bit value shifted by a multiple of 8 bits",
[c]=l,
[j]=n,
[e]=n,
[g]="argument should be an 8-bit value shifted by a multiple of 8 bits",
[i]=m,
[i]=m,
[j]="argument should be an 8\\-bit value shifted by a multiple of 8 bits",
[b]="argument should be an 8-bit value shifted by a multiple of 8 bits",
[b]=a,
[g]=l,
[h]=o,
[f]="argument should be an 8\\-bit value shifted by a multiple of 8 bits",
[d]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE."},
[e]=a,
[k]={{s,8913,"/// SemaBuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is\n/// a constant expression representing an arbitrary byte value shifted left by\n/// a multiple of 8 bits.\nbool Sema::SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte) << Arg->getSourceRange();"}}
[d]=p,
[c]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE."},
[k]={{t,8913,"/// SemaBuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is\n/// a constant expression representing an arbitrary byte value shifted left by\n/// a multiple of 8 bits.\nbool Sema::SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte) << Arg->getSourceRange();"}},
[o]={
["clang/test/Sema/arm-mve-immediates.c"]={"clang/test/Sema/arm-mve-immediates.c:215:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:216:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:228:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:229:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:235:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:236:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:248:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:249:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits"}
}
},
},
["err_argument_not_shifted_byte_or_xxff"]={
["err_argument_not_shifted_byte_or_xxff"]={
[f]="argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF",
[h]="argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF",
[c]=l,
[j]=n,
[e]=n,
[g]="argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF",
[i]=m,
[i]=m,
[j]="argument should be an 8\\-bit value shifted by a multiple of 8 bits, or in the form 0x\\?\\?FF",
[b]="argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF",
[b]=a,
[g]=l,
[h]=o,
[f]="argument should be an 8\\-bit value shifted by a multiple of 8 bits, or in the form 0x\\?\\?FF",
[d]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE."},
[e]=a,
[k]={{s,8946,"/// SemaBuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of\n/// TheCall is a constant expression representing either a shifted byte value,\n/// or a value of the form 0x??FF (i.e. a member of the arithmetic progression\n/// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some\n/// Arm MVE intrinsics.\nbool Sema::SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte_or_xxff) << Arg->getSourceRange();"}}
[d]=p,
[c]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE."},
[k]={{t,8946,"/// SemaBuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of\n/// TheCall is a constant expression representing either a shifted byte value,\n/// or a value of the form 0x??FF (i.e. a member of the arithmetic progression\n/// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some\n/// Arm MVE intrinsics.\nbool Sema::SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte_or_xxff) << Arg->getSourceRange();"}},
[o]={
["clang/test/Sema/arm-mve-immediates.c"]={"clang/test/Sema/arm-mve-immediates.c:259:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:273:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:274:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:275:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF"}
}
},
},
["err_argument_required_after_attribute"]={
["err_argument_required_after_attribute"]={
[h]="argument required after attribute",
[j]=n,
[i]=m,
[b]="argument required after attribute",
[g]=l,
[f]="argument required after attribute",
[f]="argument required after attribute",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="argument required after attribute",
[c]={C,1236199783,B},
[i]=m,
[k]={{E,1569,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (Tok.is(tok::r_paren)) {\n    Diag(Tok.getLocation(), diag::err_argument_required_after_attribute);"},{E,7006,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  if (isFunctionDeclaratorIdentifierList()) {\n    if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"},{E,7023,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  if (isFunctionDeclaratorIdentifierList()) {\n  } else {\n    if (Tok.isNot(tok::r_paren))\n    else if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"}},
[j]="argument required after attribute",
[o]={
[b]=a,
["clang/test/SemaObjC/attr-swift_newtype.m"]={"clang/test/SemaObjC/attr-swift_newtype.m:5:47: error: argument required after attribute"}
[h]=B,
}
[d]={A,1236199783,z},
[k]={{D,1569,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (Tok.is(tok::r_paren)) {\n    Diag(Tok.getLocation(), diag::err_argument_required_after_attribute);"},{D,7006,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  if (isFunctionDeclaratorIdentifierList()) {\n    if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"},{D,7023,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  if (isFunctionDeclaratorIdentifierList()) {\n  } else {\n    if (Tok.isNot(tok::r_paren))\n    else if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"}}
},
},
["err_arithmetic_nonfragile_interface"]={
["err_arithmetic_nonfragile_interface"]={
[f]="arithmetic on pointer to interface A, which is not a constant size for this architecture and platform",
[h]="arithmetic on pointer to interface A, which is not a constant size for this architecture and platform",
[c]=l,
[j]=n,
[e]=n,
[g]="arithmetic on pointer to interface %0, which is not a constant size for this architecture and platform",
[i]=m,
[i]=m,
[j]="arithmetic on pointer to interface (.*?), which is not a constant size for this architecture and platform",
[b]="arithmetic on pointer to interface %0, which is not a constant size for this architecture and platform",
[b]=a,
[g]=l,
[h]=o,
[f]="arithmetic on pointer to interface (.*?), which is not a constant size for this architecture and platform",
[d]={"12bdebbbf7ff",1240617008,"reject explicit pointer arithmetic on interface pointers in 64-bit objc ABI"},
[e]=a,
[k]={{y,4986,"/// Diagnose if arithmetic on the given ObjC pointer is illegal.\n///\n/// \\return true on error\nstatic bool checkArithmeticOnObjCPointer(Sema &S, SourceLocation opLoc, Expr *op) {\n  S.Diag(opLoc, diag::err_arithmetic_nonfragile_interface) << op->getType()->castAs<ObjCObjectPointerType>()->getPointeeType() << op->getSourceRange();"}}
[d]=p,
[c]={"12bdebbbf7ff",1240617008,"reject explicit pointer arithmetic on interface pointers in 64-bit objc ABI"},
[k]={{z,4986,"/// Diagnose if arithmetic on the given ObjC pointer is illegal.\n///\n/// \\return true on error\nstatic bool checkArithmeticOnObjCPointer(Sema &S, SourceLocation opLoc, Expr *op) {\n  S.Diag(opLoc, diag::err_arithmetic_nonfragile_interface) << op->getType()->castAs<ObjCObjectPointerType>()->getPointeeType() << op->getSourceRange();"}},
[o]={
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:54:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:55:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:56:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:88:3: error: arithmetic on pointer to interface \'Foo\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:89:3: error: arithmetic on pointer to interface \'Foo\', which is not a constant size for this architecture and platform"}
}
},
},
["err_arm_invalid_coproc"]={
["err_arm_invalid_coproc"]={
[f]="coprocessor A must be configured as ...",
[h]="coprocessor A must be configured as ...",
[c]=l,
[j]=n,
[e]=n,
[g]="coprocessor %0 must be configured as %select{GCP|CDE}1",
[i]=m,
[i]=m,
[j]="coprocessor (.*?) must be configured as (?:GCP|CDE)",
[b]="coprocessor %0 must be configured as %select{GCP|CDE}1",
[b]=a,
[g]=l,
[h]=o,
[f]="coprocessor (.*?) must be configured as (?:GCP|CDE)",
[d]={W,1576908663,V},
[e]=a,
[k]={{s,3142,"bool Sema::CheckARMCoprocessorImmediate(const TargetInfo &TI, const Expr *CoprocArg, bool WantCDE) {\n  if (IsCDECoproc != WantCDE)\n    return Diag(CoprocArg->getBeginLoc(), diag::err_arm_invalid_coproc) << (int)CoprocNo << (int)WantCDE << CoprocArg->getSourceRange();"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{t,3142,"bool Sema::CheckARMCoprocessorImmediate(const TargetInfo &TI, const Expr *CoprocArg, bool WantCDE) {\n  if (IsCDECoproc != WantCDE)\n    return Diag(CoprocArg->getBeginLoc(), diag::err_arm_invalid_coproc) << (int)CoprocNo << (int)WantCDE << CoprocArg->getSourceRange();"}},
[o]={
["clang/test/Sema/arm-cde-immediates.c"]={"clang/test/Sema/arm-cde-immediates.c:9:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:10:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:11:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:12:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:13:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:14:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:15:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:16:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:17:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:18:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:19:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:20:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:21:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:22:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:23:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:24:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:25:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:26:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:34:13: error: coprocessor 1 must be configured as CDE"}
}
},
},
["err_arm_invalid_specialreg"]={
["err_arm_invalid_specialreg"]={
[h]="invalid special register for builtin",
[j]=n,
[i]=m,
[b]="invalid special register for builtin",
[g]=l,
[f]="invalid special register for builtin",
[f]="invalid special register for builtin",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="invalid special register for builtin",
[c]={"59b2d8390941",1434390661,"This patch implements clang support for the ACLE special register intrinsics"},
[i]=m,
[k]={{t,9141,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  if (Fields.size() != ExpectedFieldNum && !(AllowName && Fields.size() == 1))\n    return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"},{t,9183,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  // If the string is the name of a register then we cannot check that it is\n  // valid here but if the string is of one the forms described in ACLE then we\n  // can check that the supplied fields are integers and within the valid\n  // ranges.\n  if (Fields.size() > 1) {\n    if (!ValidString)\n      return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"}},
[j]="invalid special register for builtin",
[o]={
[b]=a,
["clang/test/Sema/arm-special-register.c"]={"clang/test/Sema/arm-special-register.c:16:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:28:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:40:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:52:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:56:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:60:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:68:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:72:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:80:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:84:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:88:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:92:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:96:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:100:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:104:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:108:10: error: invalid special register for builtin"}
[h]=o,
}
[d]={"59b2d8390941",1434390661,"This patch implements clang support for the ACLE special register intrinsics"},
[k]={{s,9141,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  if (Fields.size() != ExpectedFieldNum && !(AllowName && Fields.size() == 1))\n    return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"},{s,9183,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  // If the string is the name of a register then we cannot check that it is\n  // valid here but if the string is of one the forms described in ACLE then we\n  // can check that the supplied fields are integers and within the valid\n  // ranges.\n  if (Fields.size() > 1) {\n    if (!ValidString)\n      return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"}}
},
},
["err_array_designator_empty_range"]={
["err_array_designator_empty_range"]={
[f]="array designator range [A, B] is empty",
[h]="array designator range [A, B] is empty",
[c]=l,
[j]=n,
[e]=n,
[g]="array designator range [%0, %1] is empty",
[i]=m,
[i]=m,
[j]="array designator range \\[(.*?), (.*?)\\] is empty",
[b]="array designator range [%0, %1] is empty",
[b]=a,
[g]=l,
[h]=o,
[f]="array designator range \\[(.*?), (.*?)\\] is empty",
[d]={A,1236199783,z},
[e]=a,
[k]={{E,3400,"ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, SourceLocation EqualOrColonLoc, bool GNUSyntax, ExprResult Init) {\n  // Build designators and check array designator expressions.\n  for (unsigned Idx = 0; Idx < Desig.getNumDesignators(); ++Idx) {\n    if (D.isFieldDesignator()) {\n    } else if (D.isArrayDesignator()) {\n    } else if (D.isArrayRangeDesignator()) {\n      if (!StartIndex || !EndIndex)\n      else {\n        if (!StartDependent && !EndDependent && EndValue < StartValue) {\n          Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range) << toString(StartValue, 10) << toString(EndValue, 10) << StartIndex->getSourceRange() << EndIndex->getSourceRange();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{H,3400,"ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, SourceLocation EqualOrColonLoc, bool GNUSyntax, ExprResult Init) {\n  // Build designators and check array designator expressions.\n  for (unsigned Idx = 0; Idx < Desig.getNumDesignators(); ++Idx) {\n    if (D.isFieldDesignator()) {\n    } else if (D.isArrayDesignator()) {\n    } else if (D.isArrayRangeDesignator()) {\n      if (!StartIndex || !EndIndex)\n      else {\n        if (!StartDependent && !EndDependent && EndValue < StartValue) {\n          Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range) << toString(StartValue, 10) << toString(EndValue, 10) << StartIndex->getSourceRange() << EndIndex->getSourceRange();"}},
[o]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:11:7: error: array designator range [8, 7] is empty"}
}
},
},
["err_array_designator_negative"]={
["err_array_designator_negative"]={
[f]="array designator value \'A\' is negative",
[h]="array designator value \'A\' is negative",
[c]=l,
[j]=n,
[e]=n,
[g]="array designator value \'%0\' is negative",
[i]=m,
[i]=m,
[j]="array designator value \'(.*?)\' is negative",
[b]="array designator value \'%0\' is negative",
[b]=a,
[g]=l,
[h]=o,
[f]="array designator value \'(.*?)\' is negative",
[d]={A,1236199783,z},
[e]=a,
[k]={{E,3337,"/// Check that the given Index expression is a valid array designator\n/// value. This is essentially just a wrapper around\n/// VerifyIntegerConstantExpression that also checks for negative values\n/// and produces a reasonable diagnostic if there is a\n/// failure. Returns the index expression, possibly with an implicit cast\n/// added, on success.  If everything went okay, Value will receive the\n/// value of the constant expression.\nstatic ExprResult CheckArrayDesignatorExpr(Sema &S, Expr *Index, llvm::APSInt &Value) {\n  if (Value.isSigned() && Value.isNegative())\n    return S.Diag(Loc, diag::err_array_designator_negative) << toString(Value, 10) << Index->getSourceRange();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{H,3337,"/// Check that the given Index expression is a valid array designator\n/// value. This is essentially just a wrapper around\n/// VerifyIntegerConstantExpression that also checks for negative values\n/// and produces a reasonable diagnostic if there is a\n/// failure. Returns the index expression, possibly with an implicit cast\n/// added, on success.  If everything went okay, Value will receive the\n/// value of the constant expression.\nstatic ExprResult CheckArrayDesignatorExpr(Sema &S, Expr *Index, llvm::APSInt &Value) {\n  if (Value.isSigned() && Value.isNegative())\n    return S.Diag(Loc, diag::err_array_designator_negative) << toString(Value, 10) << Index->getSourceRange();"}},
[o]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:13:4: error: array designator value \'-1\' is negative"}
}
},
},
["err_array_designator_non_array"]={
["err_array_designator_non_array"]={
[f]="array designator cannot initialize non-array type A",
[h]="array designator cannot initialize non-array type A",
[c]=l,
[j]=n,
[e]=n,
[g]="array designator cannot initialize non-array type %0",
[i]=m,
[i]=m,
[j]="array designator cannot initialize non\\-array type (.*?)",
[b]="array designator cannot initialize non-array type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="array designator cannot initialize non\\-array type (.*?)",
[d]={A,1236199783,z},
[e]=a,
[k]={{E,3001,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (!AT) {\n    if (!VerifyOnly)\n      SemaRef.Diag(D->getLBracketLoc(), diag::err_array_designator_non_array) << CurrentObjectType;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{H,3001,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (!AT) {\n    if (!VerifyOnly)\n      SemaRef.Diag(D->getLBracketLoc(), diag::err_array_designator_non_array) << CurrentObjectType;"}},
[o]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:37:3: error: array designator cannot initialize non-array type \'struct point\'"}
}
},
},
["err_array_designator_too_large"]={
["err_array_designator_too_large"]={
[f]="array designator index (A) exceeds array bounds (B)",
[h]="array designator index (A) exceeds array bounds (B)",
[c]=l,
[j]=n,
[e]=n,
[g]="array designator index (%0) exceeds array bounds (%1)",
[i]=m,
[i]=m,
[j]="array designator index \\((.*?)\\) exceeds array bounds \\((.*?)\\)",
[b]="array designator index (%0) exceeds array bounds (%1)",
[b]=a,
[g]=l,
[h]=o,
[f]="array designator index \\((.*?)\\) exceeds array bounds \\((.*?)\\)",
[d]={A,1236199783,z},
[e]=a,
[k]={{E,3043,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (isa<ConstantArrayType>(AT)) {\n    if (DesignatedEndIndex >= MaxElements) {\n      if (!VerifyOnly)\n        SemaRef.Diag(IndexExpr->getBeginLoc(), diag::err_array_designator_too_large) << toString(DesignatedEndIndex, 10) << toString(MaxElements, 10) << IndexExpr->getSourceRange();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{H,3043,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (isa<ConstantArrayType>(AT)) {\n    if (DesignatedEndIndex >= MaxElements) {\n      if (!VerifyOnly)\n        SemaRef.Diag(IndexExpr->getBeginLoc(), diag::err_array_designator_too_large) << toString(DesignatedEndIndex, 10) << toString(MaxElements, 10) << IndexExpr->getSourceRange();"}},
[o]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:17:4: error: array designator index (10) exceeds array bounds (10)","clang/test/Sema/designated-initializers.c:22:10: error: array designator index (12) exceeds array bounds (10)","clang/test/Sema/designated-initializers.c:47:4: error: array designator index (10) exceeds array bounds (10)"}
}
},
},
["err_array_element_alignment"]={
["err_array_element_alignment"]={
[f]="size of array element of type A (B bytes) isn\'t a multiple of its alignment (C bytes)",
[h]="size of array element of type A (B bytes) isn\'t a multiple of its alignment (C bytes)",
[c]=l,
[j]=n,
[e]=n,
[g]="size of array element of type %0 (%1 bytes) isn\'t a multiple of its alignment (%2 bytes)",
[i]=m,
[i]=m,
[j]="size of array element of type (.*?) \\((.*?) bytes\\) isn\'t a multiple of its alignment \\((.*?) bytes\\)",
[b]="size of array element of type %0 (%1 bytes) isn\'t a multiple of its alignment (%2 bytes)",
[b]=a,
[g]=l,
[h]=o,
[f]="size of array element of type (.*?) \\((.*?) bytes\\) isn\'t a multiple of its alignment \\((.*?) bytes\\)",
[d]={N,1625925174,M},
[e]=a,
[k]={{r,2448,"bool Sema::checkArrayElementAlignment(QualType EltTy, SourceLocation Loc) {\n  Diag(Loc, diag::err_array_element_alignment) << EltTy << Size.getQuantity() << Alignment.getQuantity();"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{s,2448,"bool Sema::checkArrayElementAlignment(QualType EltTy, SourceLocation Loc) {\n  Diag(Loc, diag::err_array_element_alignment) << EltTy << Size.getQuantity() << Alignment.getQuantity();"}},
[o]={
["clang/test/Sema/align-x86-64.c"]={"clang/test/Sema/align-x86-64.c:9:19: error: size of array element of type \'UINT192\' (24 bytes) isn\'t a multiple of its alignment (16 bytes)"}
}
},
},
["err_array_incomplete_or_sizeless_type"]={
["err_array_incomplete_or_sizeless_type"]={
[f]="array has ... element type A",
[h]="array has ... element type A",
[c]=l,
[j]=n,
[e]=n,
[g]="array has %select{incomplete|sizeless}0 element type %1",
[i]=m,
[i]=m,
[j]="array has (?:incomplete|sizeless) element type (.*?)",
[b]="array has %select{incomplete|sizeless}0 element type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="array has (?:incomplete|sizeless) element type (.*?)",
[d]={W,1576908663,V},
[e]=a,
[k]={{q,13802,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::TentativeDefinition:\n      // File scope. C99 6.9.2p2: A declaration of an identifier for an\n      // object that has file scope without an initializer, and without a\n      // storage-class specifier or with the storage-class specifier \"static\",\n      // constitutes a tentative definition. Note: A tentative definition with\n      // external linkage is valid (C99 6.2.2p5).\n      if (!Var->isInvalidDecl()) {\n        if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(Type)) {\n          if (RequireCompleteSizedType(Var->getLocation(), ArrayT->getElementType(), diag::err_array_incomplete_or_sizeless_type))"},{y,7674,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  if (literalType->isArrayType()) {\n    if (RequireCompleteSizedType(LParenLoc, Context.getBaseElementType(literalType), diag::err_array_incomplete_or_sizeless_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"},{r,2492,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (getLangOpts().CPlusPlus) {\n    if (T->isVoidType() || T->isIncompleteArrayType()) {\n      Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 0 << T;"},{r,2512,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    if (!T.isWebAssemblyReferenceType() && RequireCompleteSizedType(Loc, T, diag::err_array_incomplete_or_sizeless_type))"},{r,2526,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 1 << T;"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{r,13802,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::TentativeDefinition:\n      // File scope. C99 6.9.2p2: A declaration of an identifier for an\n      // object that has file scope without an initializer, and without a\n      // storage-class specifier or with the storage-class specifier \"static\",\n      // constitutes a tentative definition. Note: A tentative definition with\n      // external linkage is valid (C99 6.2.2p5).\n      if (!Var->isInvalidDecl()) {\n        if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(Type)) {\n          if (RequireCompleteSizedType(Var->getLocation(), ArrayT->getElementType(), diag::err_array_incomplete_or_sizeless_type))"},{z,7674,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  if (literalType->isArrayType()) {\n    if (RequireCompleteSizedType(LParenLoc, Context.getBaseElementType(literalType), diag::err_array_incomplete_or_sizeless_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"},{s,2492,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (getLangOpts().CPlusPlus) {\n    if (T->isVoidType() || T->isIncompleteArrayType()) {\n      Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 0 << T;"},{s,2512,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    if (!T.isWebAssemblyReferenceType() && RequireCompleteSizedType(Loc, T, diag::err_array_incomplete_or_sizeless_type))"},{s,2526,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 1 << T;"}},
[o]={
["clang/test/Parser/typeof.c"]={"clang/test/Parser/typeof.c:13:11: error: array has incomplete element type \'void\'"}
}
},
},
["err_array_init_different_type"]={
["err_array_init_different_type"]={
[f]="cannot initialize array of type A with array of type B",
[h]="cannot initialize array of type A with array of type B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot initialize array %diff{of type $ with array of type $|with different type of array}0,1",
[i]=m,
[i]=m,
[j]="cannot initialize array (?:of type (.*?) with array of type (.*?)|with different type of array)",
[b]="cannot initialize array %diff{of type $ with array of type $|with different type of array}0,1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot initialize array (?:of type (.*?) with array of type (.*?)|with different type of array)",
[d]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an"},
[e]=a,
[k]={{E,9611,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}}
[d]=p,
[c]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an"},
[k]={{H,9611,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[o]={
["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:290:5: error: cannot initialize array of type \'int[5]\' with array of type \'int[3]\'"}
}
},
},
["err_array_init_incompat_wide_string_into_wchar"]={
["err_array_init_incompat_wide_string_into_wchar"]={
[h]="initializing wide char array with incompatible wide string literal",
[j]=n,
[i]=m,
[b]="initializing wide char array with incompatible wide string literal",
[g]=l,
[f]="initializing wide char array with incompatible wide string literal",
[f]="initializing wide char array with incompatible wide string literal",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="initializing wide char array with incompatible wide string literal",
[c]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization."},
[i]=m,
[k]={{H,9594,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_IncompatWideStringIntoWideChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_incompat_wide_string_into_wchar);"}},
[j]="initializing wide char array with incompatible wide string literal",
[o]={
[b]=a,
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:12:11: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:13:11: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:19:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:20:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:24:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:26:12: error: initializing wide char array with incompatible wide string literal"}
[h]=o,
}
[d]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization."},
[k]={{E,9594,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_IncompatWideStringIntoWideChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_incompat_wide_string_into_wchar);"}}
},
},
["err_array_init_narrow_string_into_wchar"]={
["err_array_init_narrow_string_into_wchar"]={
[f]="initializing wide char array with non-wide string literal",
[h]="initializing wide char array with non-wide string literal",
[c]=l,
[j]=n,
[e]=n,
[g]="initializing wide char array with non-wide string literal",
[i]=m,
[i]=m,
[j]="initializing wide char array with non\\-wide string literal",
[b]="initializing wide char array with non-wide string literal",
[b]=a,
[g]=l,
[h]=o,
[f]="initializing wide char array with non\\-wide string literal",
[d]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization."},
[e]=a,
[k]={{E,9587,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NarrowStringIntoWideCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_narrow_string_into_wchar);"}}
[d]=p,
[c]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization."},
[k]={{H,9587,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NarrowStringIntoWideCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_narrow_string_into_wchar);"}},
[o]={
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:10:11: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:11:11: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:16:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:17:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:22:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:23:12: error: initializing wide char array with non-wide string literal"}
}
},
},
["err_array_init_non_constant_array"]={
["err_array_init_non_constant_array"]={
[f]="cannot initialize array of type A with non-constant array of type B",
[h]="cannot initialize array of type A with non-constant array of type B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot initialize array %diff{of type $ with non-constant array of type $|with different type of array}0,1",
[i]=m,
[i]=m,
[j]="cannot initialize array (?:of type (.*?) with non\\-constant array of type (.*?)|with different type of array)",
[b]="cannot initialize array %diff{of type $ with non-constant array of type $|with different type of array}0,1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot initialize array (?:of type (.*?) with non\\-constant array of type (.*?)|with different type of array)",
[d]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an"},
[e]=a,
[k]={{E,9612,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}}
[d]=p,
[c]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an"},
[k]={{H,9612,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}}
},
},
["err_array_init_not_init_list"]={
["err_array_init_not_init_list"]={
[f]="array initializer must be an initializer list...",
[h]="array initializer must be an initializer list...",
[c]=l,
[j]=n,
[e]=n,
[g]="array initializer must be an initializer list%select{| or string literal| or wide string literal}0",
[i]=m,
[i]=m,
[j]="array initializer must be an initializer list(?:| or string literal| or wide string literal)",
[b]="array initializer must be an initializer list%select{| or string literal| or wide string literal}0",
[b]=a,
[g]=l,
[h]=o,
[f]="array initializer must be an initializer list(?:| or string literal| or wide string literal)",
[d]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the"},
[e]=a,
[k]={{E,9578,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ArrayNeedsInitList:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 0;"},{E,9581,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ArrayNeedsInitListOrStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 1;"},{E,9584,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ArrayNeedsInitListOrWideStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 2;"}}
[d]=p,
[c]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the"},
[k]={{H,9578,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ArrayNeedsInitList:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 0;"},{H,9581,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ArrayNeedsInitListOrStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 1;"},{H,9584,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ArrayNeedsInitListOrWideStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 2;"}},
[o]={
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:28:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:29:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:30:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:31:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:32:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:36:8: error: array initializer must be an initializer list or string literal","clang/test/SemaCXX/string-init.cpp:37:11: error: array initializer must be an initializer list or wide string literal","clang/test/SemaCXX/string-init.cpp:38:12: error: array initializer must be an initializer list or wide string literal","clang/test/SemaCXX/string-init.cpp:39:12: error: array initializer must be an initializer list or wide string literal"}
}
},
},
["err_array_init_plain_string_into_char8_t"]={
["err_array_init_plain_string_into_char8_t"]={
[h]="initializing \'char8_t\' array with plain string literal",
[j]=n,
[i]=m,
[b]="initializing \'char8_t\' array with plain string literal",
[g]=l,
[f]="initializing \'char8_t\' array with plain string literal",
[f]="initializing \'char8_t\' array with plain string literal",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="initializing \'char8_t\' array with plain string literal",
[c]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[i]=m,
[k]={{H,9598,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_PlainStringIntoUTF8Char:\n    S.Diag(Kind.getLocation(), diag::err_array_init_plain_string_into_char8_t);"}},
[j]="initializing \'char8_t\' array with plain string literal",
[o]={
[b]=a,
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:9:9: error: initializing \'char8_t\' array with plain string literal"}
[h]=o,
}
[d]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[k]={{E,9598,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_PlainStringIntoUTF8Char:\n    S.Diag(Kind.getLocation(), diag::err_array_init_plain_string_into_char8_t);"}}
},
},
["err_array_init_utf8_string_into_char"]={
["err_array_init_utf8_string_into_char"]={
[f]="initialization of ...char array with UTF-8 string literal is not permitted by ...",
[h]="initialization of ...char array with UTF-8 string literal is not permitted by ...",
[c]=l,
[j]=n,
[e]=n,
[g]="initialization of %select{|signed }0char array with UTF-8 string literal is not permitted by %select{\'-fchar8_t\'|C++20}1",
[i]=m,
[i]=m,
[j]="initialization of (?:|signed )char array with UTF\\-8 string literal is not permitted by (?:\'\\-fchar8_t\'|C\\+\\+20)",
[b]="initialization of %select{|signed }0char array with UTF-8 string literal is not permitted by %select{\'-fchar8_t\'|C++20}1",
[b]=a,
[g]=l,
[h]=o,
[f]="initialization of (?:|signed )char array with UTF\\-8 string literal is not permitted by (?:\'\\-fchar8_t\'|C\\+\\+20)",
[d]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[e]=a,
[k]={{E,9604,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UTF8StringIntoPlainChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_utf8_string_into_char) << DestType->isSignedIntegerType() << S.getLangOpts().CPlusPlus20;"}}
[d]=p,
[c]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[k]={{H,9604,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UTF8StringIntoPlainChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_utf8_string_into_char) << DestType->isSignedIntegerType() << S.getLangOpts().CPlusPlus20;"}},
[o]={
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:19:13: error: initialization of char array with UTF-8 string literal is not permitted by C++20"}
}
},
},
["err_array_init_wide_string_into_char"]={
["err_array_init_wide_string_into_char"]={
[h]="initializing char array with wide string literal",
[j]=n,
[i]=m,
[b]="initializing char array with wide string literal",
[g]=l,
[f]="initializing char array with wide string literal",
[f]="initializing char array with wide string literal",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="initializing char array with wide string literal",
[c]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization."},
[i]=m,
[k]={{H,9590,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_WideStringIntoCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_wide_string_into_char);"}},
[j]="initializing char array with wide string literal",
[o]={
[b]=a,
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:6:8: error: initializing char array with wide string literal","clang/test/SemaCXX/string-init.cpp:7:8: error: initializing char array with wide string literal","clang/test/SemaCXX/string-init.cpp:8:8: error: initializing char array with wide string literal"}
[h]=o,
}
[d]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization."},
[k]={{E,9590,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_WideStringIntoCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_wide_string_into_char);"}}
},
},
["err_array_new_needs_size"]={
["err_array_new_needs_size"]={
[h]="array size must be specified in new expression with no initializer",
[j]=n,
[i]=m,
[b]="array size must be specified in new expression with no initializer",
[g]=l,
[f]="array size must be specified in new expression with no initializer",
[f]="array size must be specified in new expression with no initializer",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="array size must be specified in new expression with no initializer",
[c]={v,1237025389,u},
[i]=m,
[k]={{y,1869,"/// 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  // 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    if (!Chunk.Arr.NumElts && !Initializer)\n      return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size) << D.getSourceRange());"}},
[j]="array size must be specified in new expression with no initializer",
[o]={
[b]=a,
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:139:17: error: array size must be specified in new expression with no initializer","clang/test/SemaCXX/new-delete.cpp:141:16: error: array size must be specified in new expression with no initializer"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{x,1869,"/// 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  // 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    if (!Chunk.Arr.NumElts && !Initializer)\n      return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size) << D.getSourceRange());"}}
},
},
["err_array_of_abstract_type"]={
["err_array_of_abstract_type"]={
[f]="array of abstract class type A",
[h]="array of abstract class type A",
[c]=l,
[j]=n,
[e]=n,
[g]="array of abstract class type %0",
[i]=m,
[i]=m,
[j]="array of abstract class type (.*?)",
[b]="array of abstract class type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="array of abstract class type (.*?)",
[d]={"7d8072e03860",1272397094,"Diagnose the use of abstract types as array element types. Previously,"},
[e]=a,
[k]={{v,6095,"#include \"clang/AST/TypeLocNodes.def\"\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type) << T << TL.getSourceRange();"},{r,2497,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (getLangOpts().CPlusPlus) {\n    if (RequireNonAbstractType(Brackets.getBegin(), T, diag::err_array_of_abstract_type))"}}
[d]=p,
[c]={"7d8072e03860",1272397094,"Diagnose the use of abstract types as array element types. Previously,"},
[k]={{w,6095,"#include \"clang/AST/TypeLocNodes.def\"\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type) << T << TL.getSourceRange();"},{s,2497,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (getLangOpts().CPlusPlus) {\n    if (RequireNonAbstractType(Brackets.getBegin(), T, diag::err_array_of_abstract_type))"}},
[o]={
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:39:9: error: array of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:41:9: error: array of abstract class type \'B\' (aka \'SecretlyAbstract<int>\')","clang/test/CXX/class.derived/class.abstract/p3.cpp:45:9: error: array of abstract class type \'SecretlyAbstract<char>\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:51:13: error: array of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:53:13: error: array of abstract class type \'B\' (aka \'SecretlyAbstract<int>\')"}
}
},
},
["err_array_section_does_not_specify_contiguous_storage"]={
["err_array_section_does_not_specify_contiguous_storage"]={
[h]="array section does not specify contiguous storage",
[j]=n,
[i]=m,
[b]="array section does not specify contiguous storage",
[g]=l,
[f]="array section does not specify contiguous storage",
[f]="array section does not specify contiguous storage",
[c]=l,
[e]=a,
[e]=n,
[d]="OpenMP Issue",
[g]="array section does not specify contiguous storage",
[c]={"a9f35cb7d665",1457538365,"[OpenMP] Add support for multidimensional array sections in map clause SEMA."},
[i]=m,
[k]={{"clang/lib/Sema/SemaOpenMP.cpp",21302,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (AllowWholeSizeArraySection) {\n    } else if (DKind == OMPD_target_update && SemaRef.getLangOpts().OpenMP >= 50) {\n    } else if (AllowUnitySizeArraySection && NotUnity) {\n      SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_contiguous_storage) << OASE->getSourceRange();"}},
[j]="array section does not specify contiguous storage",
[o]={
[b]=a,
["clang/test/OpenMP/target_update_to_messages.cpp"]={"clang/test/OpenMP/target_update_to_messages.cpp:82:30: error: array section does not specify contiguous storage"}
[h]="OpenMP Issue",
}
[d]={"a9f35cb7d665",1457538365,"[OpenMP] Add support for multidimensional array sections in map clause SEMA."},
[k]={{"clang/lib/Sema/SemaOpenMP.cpp",21302,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (AllowWholeSizeArraySection) {\n    } else if (DKind == OMPD_target_update && SemaRef.getLangOpts().OpenMP >= 50) {\n    } else if (AllowUnitySizeArraySection && NotUnity) {\n      SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_contiguous_storage) << OASE->getSourceRange();"}}
},
},
["err_array_section_does_not_specify_length"]={
["err_array_section_does_not_specify_length"]={
[h]="array section does not specify length for outermost dimension",
[j]=n,
[i]=m,
[b]="array section does not specify length for outermost dimension",
[g]=l,
[f]="array section does not specify length for outermost dimension",
[f]="array section does not specify length for outermost dimension",
[c]=l,
[e]=a,
[e]=n,
[d]="OpenMP Issue",
[g]="array section does not specify length for outermost dimension",
[c]={fb,1590001902,gb},
[i]=m,
[k]={{"clang/lib/Sema/SemaOpenMP.cpp",21437,"/// Return the expression of the base of the mappable expression or null if it\n/// cannot be determined and do all the necessary checks to see if the\n/// expression is valid as a standalone mappable expression. In the process,\n/// record all the components of the expression.\nstatic const Expr *checkMapClauseExpressionBase(Sema &SemaRef, Expr *E, OMPClauseMappableExprCommon::MappableExprComponentList &CurComponents, OpenMPClauseKind CKind, OpenMPDirectiveKind DKind, bool NoDiagnose) {\n  if (Checker.Visit(E->IgnoreParens())) {\n    // Check if the highest dimension array section has length specified\n    if (SemaRef.getLangOpts().OpenMP >= 50 && !CurComponents.empty() && (CKind == OMPC_to || CKind == OMPC_from)) {\n      for (; CI != CE; ++CI) {\n        SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_length) << ERange;"}},
[j]="array section does not specify length for outermost dimension",
[o]={
[b]=a,
["clang/test/OpenMP/target_update_messages.cpp"]={"clang/test/OpenMP/target_update_messages.cpp:160:30: error: array section does not specify length for outermost dimension","clang/test/OpenMP/target_update_messages.cpp:162:32: error: array section does not specify length for outermost dimension","clang/test/OpenMP/target_update_messages.cpp:192:30: error: array section does not specify length for outermost dimension","clang/test/OpenMP/target_update_messages.cpp:199:32: error: array section does not specify length for outermost dimension"}
[h]="OpenMP Issue",
}
[d]={fb,1590001902,eb},
[k]={{"clang/lib/Sema/SemaOpenMP.cpp",21437,"/// Return the expression of the base of the mappable expression or null if it\n/// cannot be determined and do all the necessary checks to see if the\n/// expression is valid as a standalone mappable expression. In the process,\n/// record all the components of the expression.\nstatic const Expr *checkMapClauseExpressionBase(Sema &SemaRef, Expr *E, OMPClauseMappableExprCommon::MappableExprComponentList &CurComponents, OpenMPClauseKind CKind, OpenMPDirectiveKind DKind, bool NoDiagnose) {\n  if (Checker.Visit(E->IgnoreParens())) {\n    // Check if the highest dimension array section has length specified\n    if (SemaRef.getLangOpts().OpenMP >= 50 && !CurComponents.empty() && (CKind == OMPC_to || CKind == OMPC_from)) {\n      for (; CI != CE; ++CI) {\n        SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_length) << ERange;"}}
},
},
["err_array_size_ambiguous_conversion"]={
["err_array_size_ambiguous_conversion"]={
[f]="ambiguous conversion of array size expression of type A to an integral or enumeration type",
[h]="ambiguous conversion of array size expression of type A to an integral or enumeration type",
[c]=l,
[j]=n,
[e]=n,
[g]="ambiguous conversion of array size expression of type %0 to an integral or enumeration type",
[i]=m,
[i]=m,
[j]="ambiguous conversion of array size expression of type (.*?) to an integral or enumeration type",
[b]="ambiguous conversion of array size expression of type %0 to an integral or enumeration type",
[b]=a,
[g]=l,
[h]=o,
[f]="ambiguous conversion of array size expression of type (.*?) to an integral or enumeration type",
[d]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[e]=a,
[k]={{x,2172,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) << T; }"}}
[d]=p,
[c]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[k]={{y,2172,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) << T; }"}},
[o]={
["clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp"]={"clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp:168:14: error: ambiguous conversion of array size expression of type \'X\' to an integral or enumeration type"}
}
},
},
["err_array_size_explicit_conversion"]={
["err_array_size_explicit_conversion"]={
[f]="array size expression of type A requires explicit conversion to type B",
[h]="array size expression of type A requires explicit conversion to type B",
[c]=l,
[j]=n,
[e]=n,
[g]="array size expression of type %0 requires explicit conversion to type %1",
[i]=m,
[i]=m,
[j]="array size expression of type (.*?) requires explicit conversion to type (.*?)",
[b]="array size expression of type %0 requires explicit conversion to type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="array size expression of type (.*?) requires explicit conversion to type (.*?)",
[d]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[e]=a,
[k]={{x,2161,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_array_size_explicit_conversion) << T << ConvTy; }"}}
[d]=p,
[c]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[k]={{y,2161,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_array_size_explicit_conversion) << T << ConvTy; }"}},
[o]={
["clang/test/SemaCXX/explicit.cpp"]={"clang/test/SemaCXX/explicit.cpp:219:5: error: array size expression of type \'NotInt\' requires explicit conversion to type \'int\'"}
}
},
},
["err_array_size_incomplete_type"]={
["err_array_size_incomplete_type"]={
[f]="array size expression has incomplete class type A",
[h]="array size expression has incomplete class type A",
[c]=l,
[j]=n,
[e]=n,
[g]="array size expression has incomplete class type %0",
[i]=m,
[i]=m,
[j]="array size expression has incomplete class type (.*?)",
[b]="array size expression has incomplete class type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="array size expression has incomplete class type (.*?)",
[d]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[e]=a,
[k]={{x,2155,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_incomplete_type) << T << ArraySize->getSourceRange(); }"}}
[d]=p,
[c]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[k]={{y,2155,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_incomplete_type) << T << ArraySize->getSourceRange(); }"}}
},
},
["err_array_size_non_int"]={
["err_array_size_non_int"]={
[f]="size of array has non-integer type A",
[h]="size of array has non-integer type A",
[c]=l,
[j]=n,
[e]=n,
[g]="size of array has non-integer type %0",
[i]=m,
[i]=m,
[j]="size of array has non\\-integer type (.*?)",
[b]="size of array has non-integer type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="size of array has non\\-integer type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{r,2414,"/// Check whether the specified array bound can be evaluated using the relevant\n/// language rules. If so, returns the possibly-converted expression and sets\n/// SizeVal to the size. If not, but the expression might be a VLA bound,\n/// returns ExprResult(). Otherwise, produces a diagnostic and returns\n/// ExprError().\nstatic ExprResult checkArraySize(Sema &S, Expr *&ArraySize, llvm::APSInt &SizeVal, unsigned VLADiag, bool VLAIsError) {\n  // If the size is an ICE, it certainly isn\'t a VLA. If we\'re in a GNU mode\n  // (like gnu99, but not c99) accept any evaluatable value as an extension.\n  class VLADiagnoser : public Sema::VerifyICEDiagnoser {\n    Sema::SemaDiagnosticBuilder diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_non_int) << T; }"},{r,2570,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // C99 6.7.5.2p1: The size expression shall have integer type.\n  // C++11 allows contextual conversions to such types.\n  if (!getLangOpts().CPlusPlus11 && ArraySize && !ArraySize->isTypeDependent() && !ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {\n    Diag(ArraySize->getBeginLoc(), diag::err_array_size_non_int) << ArraySize->getType() << ArraySize->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{s,2414,"/// Check whether the specified array bound can be evaluated using the relevant\n/// language rules. If so, returns the possibly-converted expression and sets\n/// SizeVal to the size. If not, but the expression might be a VLA bound,\n/// returns ExprResult(). Otherwise, produces a diagnostic and returns\n/// ExprError().\nstatic ExprResult checkArraySize(Sema &S, Expr *&ArraySize, llvm::APSInt &SizeVal, unsigned VLADiag, bool VLAIsError) {\n  // If the size is an ICE, it certainly isn\'t a VLA. If we\'re in a GNU mode\n  // (like gnu99, but not c99) accept any evaluatable value as an extension.\n  class VLADiagnoser : public Sema::VerifyICEDiagnoser {\n    Sema::SemaDiagnosticBuilder diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_non_int) << T; }"},{s,2570,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // C99 6.7.5.2p1: The size expression shall have integer type.\n  // C++11 allows contextual conversions to such types.\n  if (!getLangOpts().CPlusPlus11 && ArraySize && !ArraySize->isTypeDependent() && !ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {\n    Diag(ArraySize->getBeginLoc(), diag::err_array_size_non_int) << ArraySize->getType() << ArraySize->getSourceRange();"}},
[o]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:20:14: error: size of array has non-integer type \'v2u\' (vector of 2 \'unsigned int\' values)"}
}
},
},
["err_array_size_not_integral"]={
["err_array_size_not_integral"]={
[f]="array size expression must have integral or ...enumeration type, not A",
[h]="array size expression must have integral or ...enumeration type, not A",
[c]=l,
[j]=n,
[e]=n,
[g]="array size expression must have integral or %select{|unscoped }0enumeration type, not %1",
[i]=m,
[i]=m,
[j]="array size expression must have integral or (?:|unscoped )enumeration type, not (.*?)",
[b]="array size expression must have integral or %select{|unscoped }0enumeration type, not %1",
[b]=a,
[g]=l,
[h]=o,
[f]="array size expression must have integral or (?:|unscoped )enumeration type, not (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{x,2149,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_not_integral) << S.getLangOpts().CPlusPlus11 << T; }"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{y,2149,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_not_integral) << S.getLangOpts().CPlusPlus11 << T; }"}},
[o]={
["clang/test/SemaCXX/enum-scoped.cpp"]={"clang/test/SemaCXX/enum-scoped.cpp:44:11: error: array size expression must have integral or unscoped enumeration type, not \'E1\'"}
}
},
},
["err_array_star_in_function_definition"]={
["err_array_star_in_function_definition"]={
[h]="variable length array must be bound in function definition",
[j]=n,
[i]=m,
[b]="variable length array must be bound in function definition",
[g]=l,
[f]="variable length array must be bound in function definition",
[f]="variable length array must be bound in function definition",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="variable length array must be bound in function definition",
[c]={"deb55d512333",1265000569,"Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions."},
[i]=m,
[k]={{t,16617,"static void diagnoseArrayStarInParamType(Sema &S, QualType PType, SourceLocation Loc) {\n  S.Diag(Loc, diag::err_array_star_in_function_definition);"}},
[j]="variable length array must be bound in function definition",
[o]={
[b]=a,
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:18:14: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:19:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:20:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:21:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:22:15: error: variable length array must be bound in function definition"}
[h]=o,
}
[d]={"deb55d512333",1265000569,"Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions."},
[k]={{s,16617,"static void diagnoseArrayStarInParamType(Sema &S, QualType PType, SourceLocation Loc) {\n  S.Diag(Loc, diag::err_array_star_in_function_definition);"}}
},
},
["err_array_star_outside_prototype"]={
["err_array_star_outside_prototype"]={
[h]="star modifier used outside of function prototype",
[j]=n,
[i]=m,
[b]="star modifier used outside of function prototype",
[g]=l,
[f]="star modifier used outside of function prototype",
[f]="star modifier used outside of function prototype",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="star modifier used outside of function prototype",
[c]={"4e2ab5550284",1240783071,"Add a bit more handling for declarations like \"int a[*]\"."},
[i]=m,
[k]={{s,5134,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Array: {\n      if (ASM == ArrayType::Star && !D.isPrototypeContext()) {\n        S.Diag(DeclType.Loc, diag::err_array_star_outside_prototype);"}},
[j]="star modifier used outside of function prototype",
[o]={
[b]=a,
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:47:6: error: star modifier used outside of function prototype"}
[h]=o,
}
[d]={"4e2ab5550284",1240783071,"Add a bit more handling for declarations like \"int a[*]\"."},
[k]={{r,5134,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Array: {\n      if (ASM == ArrayType::Star && !D.isPrototypeContext()) {\n        S.Diag(DeclType.Loc, diag::err_array_star_outside_prototype);"}}
},
},
["err_array_static_not_outermost"]={
["err_array_static_not_outermost"]={
[f]="A used in non-outermost array type derivation",
[h]="A used in non-outermost array type derivation",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 used in non-outermost array type derivation",
[i]=m,
[i]=m,
[j]="(.*?) used in non\\-outermost array type derivation",
[b]="%0 used in non-outermost array type derivation",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) used in non\\-outermost array type derivation",
[d]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array"},
[e]=a,
[k]={{r,5157,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Array: {\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        // C99 6.7.5.2p1: ... and then only in the outermost array type\n        // derivation.\n        if (hasOuterPointerLikeChunk(D, chunkIndex)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_not_outermost) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}}
[d]=p,
[c]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array"},
[k]={{s,5157,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Array: {\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        // C99 6.7.5.2p1: ... and then only in the outermost array type\n        // derivation.\n        if (hasOuterPointerLikeChunk(D, chunkIndex)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_not_outermost) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}},
[o]={
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:50:8: error: \'static\' used in non-outermost array type derivation","clang/test/Sema/static-array.c:53:8: error: type qualifier used in non-outermost array type derivation","clang/test/Sema/static-array.c:55:16: error: \'static\' used in non-outermost array type derivation"}
}
},
},
["err_array_static_outside_prototype"]={
["err_array_static_outside_prototype"]={
[f]="A used in array declarator outside of function prototype",
[h]="A used in array declarator outside of function prototype",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 used in array declarator outside of function prototype",
[i]=m,
[i]=m,
[j]="(.*?) used in array declarator outside of function prototype",
[b]="%0 used in array declarator outside of function prototype",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) used in array declarator outside of function prototype",
[d]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array"},
[e]=a,
[k]={{r,5145,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Array: {\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        if (!(D.isPrototypeContext() || D.getContext() == DeclaratorContext::KNRTypeList)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_outside_prototype) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}}
[d]=p,
[c]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array"},
[k]={{s,5145,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Array: {\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        if (!(D.isPrototypeContext() || D.getContext() == DeclaratorContext::KNRTypeList)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_outside_prototype) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}},
[o]={
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:34:15: error: \'static\' used in array declarator outside of function prototype","clang/test/Sema/static-array.c:38:8: error: \'static\' used in array declarator outside of function prototype","clang/test/Sema/static-array.c:40:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:41:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:42:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:44:8: error: \'static\' used in array declarator outside of function prototype"}
}
},
},
["err_array_too_large"]={
["err_array_too_large"]={
[f]="array is too large (A elements)",
[h]="array is too large (A elements)",
[c]=l,
[j]=n,
[e]=n,
[g]="array is too large (%0 elements)",
[i]=m,
[i]=m,
[j]="array is too large \\((.*?) elements\\)",
[b]="array is too large (%0 elements)",
[b]=a,
[g]=l,
[h]=o,
[f]="array is too large \\((.*?) elements\\)",
[d]={"caa1bf434d93",1282091940,"Emit an error if an array is too large. We\'re slightly more strict"},
[e]=a,
[k]={{q,6611,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n  if (SizeIsNegative)\n  else if (Oversized.getBoolValue())\n    Diag(Loc, diag::err_array_too_large) << toString(Oversized, 10);"},{q,6730,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n  if (T->isVariablyModifiedType()) {\n    if (S->getFnParent() == nullptr) {\n      if (FixedTInfo) {\n      } else {\n        if (SizeIsNegative)\n        else if (T->isVariableArrayType())\n        else if (Oversized.getBoolValue())\n          Diag(NewTD->getLocation(), diag::err_array_too_large) << toString(Oversized, 10);"},{x,2230,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // We\'ve already performed any required implicit conversion to integer or\n    // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (!AllocType->isDependentType()) {\n        if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context))\n          return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_array_too_large) << toString(*Value, 10) << (*ArraySize)->getSourceRange());"},{r,2660,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {\n        Diag(ArraySize->getBeginLoc(), diag::err_array_too_large) << toString(ConstVal, 10) << ArraySize->getSourceRange();"}}
[d]=p,
[c]={"caa1bf434d93",1282091940,"Emit an error if an array is too large. We\'re slightly more strict"},
[k]={{r,6611,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n  if (SizeIsNegative)\n  else if (Oversized.getBoolValue())\n    Diag(Loc, diag::err_array_too_large) << toString(Oversized, 10);"},{r,6730,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n  if (T->isVariablyModifiedType()) {\n    if (S->getFnParent() == nullptr) {\n      if (FixedTInfo) {\n      } else {\n        if (SizeIsNegative)\n        else if (T->isVariableArrayType())\n        else if (Oversized.getBoolValue())\n          Diag(NewTD->getLocation(), diag::err_array_too_large) << toString(Oversized, 10);"},{y,2230,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // We\'ve already performed any required implicit conversion to integer or\n    // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (!AllocType->isDependentType()) {\n        if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context))\n          return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_array_too_large) << toString(*Value, 10) << (*ArraySize)->getSourceRange());"},{s,2660,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {\n        Diag(ArraySize->getBeginLoc(), diag::err_array_too_large) << toString(ConstVal, 10) << ArraySize->getSourceRange();"}},
[o]={
["clang/test/Sema/offsetof-64.c"]={"clang/test/Sema/offsetof-64.c:16:8: error: array is too large (1152921504606846976 elements)"}
}
},
},
["err_as_qualified_auto_decl"]={
["err_as_qualified_auto_decl"]={
[f]="automatic variable qualified with an... address space",
[h]="automatic variable qualified with an... address space",
[c]=l,
[j]=n,
[e]=n,
[g]="automatic variable qualified with an%select{| invalid}0 address space",
[i]=m,
[i]=m,
[j]="automatic variable qualified with an(?:| invalid) address space",
[b]="automatic variable qualified with an%select{| invalid}0 address space",
[b]=a,
[g]=l,
[h]=o,
[f]="automatic variable qualified with an(?:| invalid) address space",
[d]={A,1236199783,z},
[e]=a,
[k]={{q,8537,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // Emit an error if an address space was applied to decl with local storage.\n  // This includes arrays of objects with address space qualifiers, but not\n  // automatic variables that point to other address spaces.\n  // ISO/IEC TR 18037 S5.1.2\n  if (!getLangOpts().OpenCL && NewVD->hasLocalStorage() && T.getAddressSpace() != LangAS::Default) {\n    Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 0;"},{q,8638,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (getLangOpts().OpenCL) {\n    // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    } else {\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n      } else if (T.getAddressSpace() != LangAS::opencl_private &&\n        Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 1;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{r,8537,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // Emit an error if an address space was applied to decl with local storage.\n  // This includes arrays of objects with address space qualifiers, but not\n  // automatic variables that point to other address spaces.\n  // ISO/IEC TR 18037 S5.1.2\n  if (!getLangOpts().OpenCL && NewVD->hasLocalStorage() && T.getAddressSpace() != LangAS::Default) {\n    Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 0;"},{r,8638,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (getLangOpts().OpenCL) {\n    // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    } else {\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n      } else if (T.getAddressSpace() != LangAS::opencl_private &&\n        Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 1;"}},
[o]={
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:9:22: error: automatic variable qualified with an address space"}
}
},
},
["err_asm_bad_register_type"]={
["err_asm_bad_register_type"]={
[h]="bad type for named register variable",
[j]=n,
[i]=m,
[b]="bad type for named register variable",
[g]=l,
[f]="bad type for named register variable",
[f]="bad type for named register variable",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="bad type for named register variable",
[c]={"2e31e4e47b09",1401986722,"Add pointer types to global named register"},
[i]=m,
[k]={{r,7969,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      if (!R->isIntegralType(Context) && !R->isPointerType()) {\n        Diag(D.getBeginLoc(), diag::err_asm_bad_register_type);"}},
[j]="bad type for named register variable",
[o]={
[b]=a,
[Q]={"clang/test/Sema/asm.c:200:1: error: bad type for named register variable","clang/test/Sema/asm.c:201:1: error: bad type for named register variable"}
[h]=C,
}
[d]={"2e31e4e47b09",1401986722,"Add pointer types to global named register"},
[k]={{q,7969,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      if (!R->isIntegralType(Context) && !R->isPointerType()) {\n        Diag(D.getBeginLoc(), diag::err_asm_bad_register_type);"}}
},
},
["err_asm_duplicate_qual"]={
["err_asm_duplicate_qual"]={
[f]="duplicate asm qualifier \'A\'",
[h]="duplicate asm qualifier \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="duplicate asm qualifier \'%0\'",
[i]=m,
[i]=m,
[j]="duplicate asm qualifier \'(.*?)\'",
[b]="duplicate asm qualifier \'%0\'",
[b]=a,
[g]=l,
[h]=C,
[f]="duplicate asm qualifier \'(.*?)\'",
[d]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator."},
[e]=a,
[k]={{"clang/lib/Parse/ParseStmtAsm.cpp",696,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    if (AQ.setAsmQualifier(A))\n      Diag(Tok.getLocation(), diag::err_asm_duplicate_qual) << GNUAsmQualifiers::getQualifierName(A);"}}
[d]=D,
[c]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator."},
[k]={{"clang/lib/Parse/ParseStmtAsm.cpp",696,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    if (AQ.setAsmQualifier(A))\n      Diag(Tok.getLocation(), diag::err_asm_duplicate_qual) << GNUAsmQualifiers::getQualifierName(A);"}},
[o]={
["clang/test/Parser/asm-qualifiers.c"]={"clang/test/Parser/asm-qualifiers.c:43:16: error: duplicate asm qualifier \'volatile\'","clang/test/Parser/asm-qualifiers.c:44:24: error: duplicate asm qualifier \'volatile\'","clang/test/Parser/asm-qualifiers.c:45:14: error: duplicate asm qualifier \'inline\'","clang/test/Parser/asm-qualifiers.c:46:22: error: duplicate asm qualifier \'inline\'","clang/test/Parser/asm-qualifiers.c:47:12: error: duplicate asm qualifier \'goto\'","clang/test/Parser/asm-qualifiers.c:48:16: error: duplicate asm qualifier \'goto\'"}
}
},
},
["err_asm_empty"]={
["err_asm_empty"]={
[h]="__asm used with no assembly instructions",
[j]=n,
[i]=m,
[b]="__asm used with no assembly instructions",
[g]=l,
[f]="__asm used with no assembly instructions",
[f]="__asm used with no assembly instructions",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="__asm used with no assembly instructions",
[c]={"317be45091d7",1348516679,"Replace an assertion with an error for empty __asm statements."},
[i]=m,
[k]={{"clang/lib/Parse/ParseStmtAsm.cpp",330,"/// Turn a sequence of our tokens back into a string that we can hand\n/// to the MC asm parser.\nstatic bool buildMSAsmString(Preprocessor &PP, SourceLocation AsmLoc, ArrayRef<Token> AsmToks, SmallVectorImpl<unsigned> &TokOffsets, SmallString<512> &Asm) {\n  for (unsigned i = 0, e = AsmToks.size(); i < e; ++i) {\n    // Don\'t actually write \'__asm\' into the assembly stream.\n    if (Tok.is(tok::kw_asm)) {\n      // Complain about __asm at the end of the stream.\n      if (i + 1 == e) {\n        PP.Diag(AsmLoc, diag::err_asm_empty);"}},
[j]="__asm used with no assembly instructions",
[o]={
[b]=a,
["clang/test/Sema/ms-inline-asm.c"]={"clang/test/Sema/ms-inline-asm.c:5:2: error: __asm used with no assembly instructions"}
[h]=C,
}
[d]={"317be45091d7",1348516679,"Replace an assertion with an error for empty __asm statements."},
[k]={{"clang/lib/Parse/ParseStmtAsm.cpp",330,"/// Turn a sequence of our tokens back into a string that we can hand\n/// to the MC asm parser.\nstatic bool buildMSAsmString(Preprocessor &PP, SourceLocation AsmLoc, ArrayRef<Token> AsmToks, SmallVectorImpl<unsigned> &TokOffsets, SmallString<512> &Asm) {\n  for (unsigned i = 0, e = AsmToks.size(); i < e; ++i) {\n    // Don\'t actually write \'__asm\' into the assembly stream.\n    if (Tok.is(tok::kw_asm)) {\n      // Complain about __asm at the end of the stream.\n      if (i + 1 == e) {\n        PP.Diag(AsmLoc, diag::err_asm_empty);"}}
},
},
["err_asm_empty_symbolic_operand_name"]={
["err_asm_empty_symbolic_operand_name"]={
[h]="empty symbolic operand name in inline assembly string",
[j]=n,
[i]=m,
[b]="empty symbolic operand name in inline assembly string",
[g]=l,
[f]="empty symbolic operand name in inline assembly string",
[f]="empty symbolic operand name in inline assembly string",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="empty symbolic operand name in inline assembly string",
[c]={v,1237025389,u},
[i]=m,
[k]={{ob,750,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      if (NameEnd == CurPtr)\n        return diag::err_asm_empty_symbolic_operand_name;"}},
[j]="empty symbolic operand name in inline assembly string",
[o]={
[b]=a,
[Q]={"clang/test/Sema/asm.c:81:10: error: empty symbolic operand name in inline assembly string"}
[h]=C,
}
[d]={u,1237025389,t},
[k]={{ob,750,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      if (NameEnd == CurPtr)\n        return diag::err_asm_empty_symbolic_operand_name;"}}
},
},
["err_asm_incomplete_type"]={
["err_asm_incomplete_type"]={
[f]="asm operand has incomplete type A",
[h]="asm operand has incomplete type A",
[c]=l,
[j]=n,
[e]=n,
[g]="asm operand has incomplete type %0",
[i]=m,
[i]=m,
[j]="asm operand has incomplete type (.*?)",
[b]="asm operand has incomplete type %0",
[b]=a,
[g]=l,
[h]=C,
[f]="asm operand has incomplete type (.*?)",
[d]={"f413f5ed44dd",1367539813,"Move parsing of identifiers in MS-style inline assembly into"},
[e]=a,
[k]={{F,816,"ExprResult Sema::LookupInlineAsmIdentifier(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, bool IsUnevaluatedContext) {\n  if (RequireCompleteExprType(Result.get(), diag::err_asm_incomplete_type)) {"},{F,864,"bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset, SourceLocation AsmLoc) {\n  for (StringRef NextMember : Members) {\n    if (RequireCompleteType(AsmLoc, QualType(RT, 0), diag::err_asm_incomplete_type))"}}
[d]=D,
[c]={"f413f5ed44dd",1367539813,"Move parsing of identifiers in MS-style inline assembly into"},
[k]={{G,816,"ExprResult Sema::LookupInlineAsmIdentifier(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, bool IsUnevaluatedContext) {\n  if (RequireCompleteExprType(Result.get(), diag::err_asm_incomplete_type)) {"},{G,864,"bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset, SourceLocation AsmLoc) {\n  for (StringRef NextMember : Members) {\n    if (RequireCompleteType(AsmLoc, QualType(RT, 0), diag::err_asm_incomplete_type))"}}
},
},
["err_asm_input_duplicate_match"]={
["err_asm_input_duplicate_match"]={
[f]="more than one input constraint matches the same output \'A\'",
[h]="more than one input constraint matches the same output \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="more than one input constraint matches the same output \'%0\'",
[i]=m,
[i]=m,
[j]="more than one input constraint matches the same output \'(.*?)\'",
[b]="more than one input constraint matches the same output \'%0\'",
[b]=a,
[g]=l,
[h]=C,
[f]="more than one input constraint matches the same output \'(.*?)\'",
[d]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen"},
[e]=a,
[k]={{F,606,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    if (InputMatchedToOutput[TiedTo] != ~0U) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_input_duplicate_match) << TiedTo;"}}
[d]=D,
[c]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen"},
[k]={{G,606,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    if (InputMatchedToOutput[TiedTo] != ~0U) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_input_duplicate_match) << TiedTo;"}},
[o]={
[Q]={"clang/test/Sema/asm.c:292:17: error: more than one input constraint matches the same output \'1\'"}
}
},
},
["err_asm_invalid_escape"]={
["err_asm_invalid_escape"]={
[h]="invalid % escape in inline assembly string",
[j]=n,
[i]=m,
[b]="invalid %% escape in inline assembly string",
[g]=l,
[f]="invalid % escape in inline assembly string",
[f]="invalid % escape in inline assembly string",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="invalid %% escape in inline assembly string",
[c]={v,1237025389,u},
[i]=m,
[k]={{ob,663,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Escaped \"%\" character in asm string.\n    if (CurPtr == StrEnd) {\n      return diag::err_asm_invalid_escape;"},{ob,701,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    if (isLetter(EscapedChar)) {\n      if (CurPtr == StrEnd) { // Premature end.\n        return diag::err_asm_invalid_escape;"},{ob,780,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    return diag::err_asm_invalid_escape;"}},
[j]="invalid % escape in inline assembly string",
[o]={
[b]=a,
[Q]={"clang/test/Sema/asm.c:75:9: error: invalid % escape in inline assembly string","clang/test/Sema/asm.c:76:12: error: invalid % escape in inline assembly string","clang/test/Sema/asm.c:135:34: error: invalid % escape in inline assembly string"}
[h]=C,
}
[d]={u,1237025389,t},
[k]={{ob,663,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Escaped \"%\" character in asm string.\n    if (CurPtr == StrEnd) {\n      return diag::err_asm_invalid_escape;"},{ob,701,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    if (isLetter(EscapedChar)) {\n      if (CurPtr == StrEnd) { // Premature end.\n        return diag::err_asm_invalid_escape;"},{ob,780,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    return diag::err_asm_invalid_escape;"}}
},
},
["err_asm_invalid_global_var_reg"]={
["err_asm_invalid_global_var_reg"]={
[f]="register \'A\' unsuitable for global register variables on this target",
[h]="register \'A\' unsuitable for global register variables on this target",
[c]=l,
[j]=n,
[e]=n,
[g]="register \'%0\' unsuitable for global register variables on this target",
[i]=m,
[i]=m,
[j]="register \'(.*?)\' unsuitable for global register variables on this target",
[b]="register \'%0\' unsuitable for global register variables on this target",
[b]=a,
[g]=l,
[h]=C,
[f]="register \'(.*?)\' unsuitable for global register variables on this target",
[d]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables."},
[e]=a,
[k]={{q,7963,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        if (!TI.isValidGCCRegisterName(Label))\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n          Diag(E->getExprLoc(), diag::err_asm_invalid_global_var_reg) << Label;"}}
[d]=D,
[c]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables."},
[k]={{r,7963,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        if (!TI.isValidGCCRegisterName(Label))\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n          Diag(E->getExprLoc(), diag::err_asm_invalid_global_var_reg) << Label;"}},
[o]={
[Q]={"clang/test/Sema/asm.c:203:22: error: register \'edi\' unsuitable for global register variables on this target"}
}
},
},
["err_asm_invalid_input_constraint"]={
["err_asm_invalid_input_constraint"]={
[f]="invalid input constraint \'A\' in asm",
[h]="invalid input constraint \'A\' in asm",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid input constraint \'%0\' in asm",
[i]=m,
[i]=m,
[j]="invalid input constraint \'(.*?)\' in asm",
[b]="invalid input constraint \'%0\' in asm",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid input constraint \'(.*?)\' in asm",
[d]={u,1237025389,t},
[e]=a,
[k]={{F,368,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (!Context.getTargetInfo().validateInputConstraint(OutputConstraintInfos, Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_input_constraint) << Info.getConstraintStr();"}}
[d]=D,
[c]={v,1237025389,u},
[k]={{G,368,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (!Context.getTargetInfo().validateInputConstraint(OutputConstraintInfos, Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_input_constraint) << Info.getConstraintStr();"}},
[o]={
["clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c"]={"clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c:6:36: error: invalid input constraint \'fo\' in asm","clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c:7:36: error: invalid input constraint \'Nd\' in asm"}
}
},
},
["err_asm_invalid_input_size"]={
["err_asm_invalid_input_size"]={
[f]="invalid input size for constraint \'A\'",
[h]="invalid input size for constraint \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid input size for constraint \'%0\'",
[i]=m,
[i]=m,
[j]="invalid input size for constraint \'(.*?)\'",
[b]="invalid input size for constraint \'%0\'",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid input size for constraint \'(.*?)\'",
[d]={"887b485dbe3d",1352702571,"Check that the input size is correct for the given constraint."},
[e]=a,
[k]={{F,461,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (!Context.getTargetInfo().validateInputSize(FeatureMap, Literal->getString(), Size))\n      return targetDiag(InputExpr->getBeginLoc(), diag::err_asm_invalid_input_size) << Info.getConstraintStr();"}}
[d]=D,
[c]={"887b485dbe3d",1352702571,"Check that the input size is correct for the given constraint."},
[k]={{G,461,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (!Context.getTargetInfo().validateInputSize(FeatureMap, Literal->getString(), Size))\n      return targetDiag(InputExpr->getBeginLoc(), diag::err_asm_invalid_input_size) << Info.getConstraintStr();"}},
[o]={
["clang/test/CodeGen/X86/mmx-inline-asm-error.c"]={"clang/test/CodeGen/X86/mmx-inline-asm-error.c:7:30: error: invalid input size for constraint \'y\'"}
}
},
},
["err_asm_invalid_lvalue_in_input"]={
["err_asm_invalid_lvalue_in_input"]={
[f]="invalid lvalue in asm input for constraint \'A\'",
[h]="invalid lvalue in asm input for constraint \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid lvalue in asm input for constraint \'%0\'",
[i]=m,
[i]=m,
[j]="invalid lvalue in asm input for constraint \'(.*?)\'",
[b]="invalid lvalue in asm input for constraint \'%0\'",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid lvalue in asm input for constraint \'(.*?)\'",
[d]={u,1237025389,t},
[e]=a,
[k]={{F,401,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // Only allow void types for memory constraints.\n    if (Info.allowsMemory() && !Info.allowsRegister()) {\n      if (CheckAsmLValue(InputExpr, *this))\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_input) << Info.getConstraintStr() << InputExpr->getSourceRange());"}}
[d]=D,
[c]={v,1237025389,u},
[k]={{G,401,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // Only allow void types for memory constraints.\n    if (Info.allowsMemory() && !Info.allowsRegister()) {\n      if (CheckAsmLValue(InputExpr, *this))\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_input) << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[o]={
[Q]={"clang/test/Sema/asm.c:58:24: error: invalid lvalue in asm input for constraint \'m\'","clang/test/Sema/asm.c:60:24: error: invalid lvalue in asm input for constraint \'m\'"}
}
},
},
["err_asm_invalid_lvalue_in_output"]={
["err_asm_invalid_lvalue_in_output"]={
[h]="invalid lvalue in asm output",
[j]=n,
[i]=m,
[b]="invalid lvalue in asm output",
[g]=l,
[f]="invalid lvalue in asm output",
[f]="invalid lvalue in asm output",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="invalid lvalue in asm output",
[c]={v,1237025389,u},
[i]=m,
[k]={{G,339,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    default:\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_output) << OutputExpr->getSourceRange());"}},
[j]="invalid lvalue in asm output",
[o]={
[b]=a,
["clang/test/SemaCXX/statements.cpp"]={"clang/test/SemaCXX/statements.cpp:25:23: error: invalid lvalue in asm output","clang/test/SemaCXX/statements.cpp:31:21: error: invalid lvalue in asm output"}
[h]=C,
}
[d]={u,1237025389,t},
[k]={{F,339,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    default:\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_output) << OutputExpr->getSourceRange());"}}
},
},
["err_asm_invalid_operand_number"]={
["err_asm_invalid_operand_number"]={
[h]="invalid operand number in inline asm string",
[j]=n,
[i]=m,
[b]="invalid operand number in inline asm string",
[g]=l,
[f]="invalid operand number in inline asm string",
[f]="invalid operand number in inline asm string",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="invalid operand number in inline asm string",
[c]={v,1237025389,u},
[i]=m,
[k]={{ob,722,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that don\'t have asmSymbolicName (e.g., %x4).\n    if (isDigit(EscapedChar)) {\n      if (N >= NumOperands) {\n        return diag::err_asm_invalid_operand_number;"}},
[j]="invalid operand number in inline asm string",
[o]={
[b]=a,
[Q]={"clang/test/Sema/asm.c:84:9: error: invalid operand number in inline asm string","clang/test/Sema/asm.c:314:15: error: invalid operand number in inline asm string"}
[h]=C,
}
[d]={u,1237025389,t},
[k]={{ob,722,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that don\'t have asmSymbolicName (e.g., %x4).\n    if (isDigit(EscapedChar)) {\n      if (N >= NumOperands) {\n        return diag::err_asm_invalid_operand_number;"}}
},
},
["err_asm_invalid_output_constraint"]={
["err_asm_invalid_output_constraint"]={
[f]="invalid output constraint \'A\' in asm",
[h]="invalid output constraint \'A\' in asm",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid output constraint \'%0\' in asm",
[i]=m,
[i]=m,
[j]="invalid output constraint \'(.*?)\' in asm",
[b]="invalid output constraint \'%0\' in asm",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid output constraint \'(.*?)\' in asm",
[d]={u,1237025389,t},
[e]=a,
[k]={{F,277,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    if (!Context.getTargetInfo().validateOutputConstraint(Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_output_constraint) << Info.getConstraintStr();"}}
[d]=D,
[c]={v,1237025389,u},
[k]={{G,277,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    if (!Context.getTargetInfo().validateOutputConstraint(Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_output_constraint) << Info.getConstraintStr();"}},
[o]={
["clang/test/Sema/arm-asm.c"]={"clang/test/Sema/arm-asm.c:5:37: error: invalid output constraint \'=&b\' in asm"}
}
},
},
["err_asm_invalid_output_size"]={
["err_asm_invalid_output_size"]={
[f]="invalid output size for constraint \'A\'",
[h]="invalid output size for constraint \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid output size for constraint \'%0\'",
[i]=m,
[i]=m,
[j]="invalid output size for constraint \'(.*?)\'",
[b]="invalid output size for constraint \'%0\'",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid output size for constraint \'(.*?)\'",
[d]={"974131ea8825",1411064238,"[X86, inlineasm] Check that the output size is correct for the given constraint."},
[e]=a,
[k]={{F,346,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    if (!Context.getTargetInfo().validateOutputSize(FeatureMap, Literal->getString(), Size)) {\n      targetDiag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_output_size) << Info.getConstraintStr();"}}
[d]=D,
[c]={"974131ea8825",1411064238,"[X86, inlineasm] Check that the output size is correct for the given constraint."},
[k]={{G,346,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    if (!Context.getTargetInfo().validateOutputSize(FeatureMap, Literal->getString(), Size)) {\n      targetDiag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_output_size) << Info.getConstraintStr();"}},
[o]={
["clang/test/CodeGen/X86/mmx-inline-asm-error.c"]={"clang/test/CodeGen/X86/mmx-inline-asm-error.c:8:29: error: invalid output size for constraint \'=y\'","clang/test/CodeGen/X86/mmx-inline-asm-error.c:9:33: error: invalid output size for constraint \'+y\'"}
}
},
},
["err_asm_invalid_type"]={
["err_asm_invalid_type"]={
[f]="invalid type A in asm ...",
[h]="invalid type A in asm ...",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid type %0 in asm %select{input|output}1",
[i]=m,
[i]=m,
[j]="invalid type (.*?) in asm (?:input|output)",
[b]="invalid type %0 in asm %select{input|output}1",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid type (.*?) in asm (?:input|output)",
[d]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH"},
[e]=a,
[k]={{F,306,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    // Disallow bit-precise integer types, since the backends tend to have\n    // difficulties with abnormal sizes.\n    if (OutputExpr->getType()->isBitIntType())\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_type) << OutputExpr->getType() << 0 /*Input*/"},{F,442,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (InputExpr->getType()->isBitIntType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type) << InputExpr->getType() << 1 /*Output*/"},{F,948,"StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Token> AsmToks, StringRef AsmString, unsigned NumOutputs, unsigned NumInputs, ArrayRef<StringRef> Constraints, ArrayRef<StringRef> Clobbers, ArrayRef<Expr *> Exprs, SourceLocation EndLoc) {\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    if (E->getType()->isBitIntType()) {\n      Diag(E->getBeginLoc(), diag::err_asm_invalid_type) << E->getType() << (I < NumOutputs) << E->getSourceRange();"}}
[d]=D,
[c]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH"},
[k]={{G,306,"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  for (unsigned i = 0; i != NumOutputs; i++) {\n    // Disallow bit-precise integer types, since the backends tend to have\n    // difficulties with abnormal sizes.\n    if (OutputExpr->getType()->isBitIntType())\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_type) << OutputExpr->getType() << 0 /*Input*/"},{G,442,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (InputExpr->getType()->isBitIntType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type) << InputExpr->getType() << 1 /*Output*/"},{G,948,"StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Token> AsmToks, StringRef AsmString, unsigned NumOutputs, unsigned NumInputs, ArrayRef<StringRef> Constraints, ArrayRef<StringRef> Clobbers, ArrayRef<Expr *> Exprs, SourceLocation EndLoc) {\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    if (E->getType()->isBitIntType()) {\n      Diag(E->getBeginLoc(), diag::err_asm_invalid_type) << E->getType() << (I < NumOutputs) << E->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/ext-int-asm.cpp"]={"clang/test/SemaCXX/ext-int-asm.cpp:5:20: error: invalid type \'_BitInt(9)\' in asm input","clang/test/SemaCXX/ext-int-asm.cpp:6:15: error: invalid type \'_BitInt(9)\' in asm output","clang/test/SemaCXX/ext-int-asm.cpp:8:18: error: invalid type \'_BitInt(9)\' in asm input","clang/test/SemaCXX/ext-int-asm.cpp:9:18: error: invalid type \'_BitInt(9)\' in asm output"}
}
},
},
["err_asm_invalid_type_in_input"]={
["err_asm_invalid_type_in_input"]={
[f]="invalid type A in asm input for constraint \'B\'",
[h]="invalid type A in asm input for constraint \'B\'",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid type %0 in asm input for constraint \'%1\'",
[i]=m,
[i]=m,
[j]="invalid type (.*?) in asm input for constraint \'(.*?)\'",
[b]="invalid type %0 in asm input for constraint \'%1\'",
[b]=a,
[g]=l,
[h]=C,
[f]="invalid type (.*?) in asm input for constraint \'(.*?)\'",
[d]={u,1237025389,t},
[e]=a,
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2565,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) {\n    if (!Info.allowsMemory() && IsScalarOrAggregate) {\n      if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, OutputConstraint, ResultRegTypes.back()))\n      else {\n        CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << OutExpr->getType() << OutputConstraint;"},{"clang/lib/CodeGen/CGStmt.cpp",2694,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) {\n    if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, ReplaceConstraint, Arg->getType()))\n    else\n      CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << InputConstraint;"},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",120,"#endif\n    if (RDO & IsLate) {\n      Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Generating Interface Stubs is not supported with \""},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",234,"#endif\n  bool HandleNamedDecl(const NamedDecl *ND, MangledSymbols &Symbols, int RDO) {\n    Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Expected a function or function template decl.\";"},{F,434,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (Info.allowsRegister()) {\n      if (InputExpr->getType()->isVoidType()) {\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << Info.getConstraintStr() << InputExpr->getSourceRange());"}}
[d]=D,
[c]={v,1237025389,u},
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2565,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) {\n    if (!Info.allowsMemory() && IsScalarOrAggregate) {\n      if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, OutputConstraint, ResultRegTypes.back()))\n      else {\n        CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << OutExpr->getType() << OutputConstraint;"},{"clang/lib/CodeGen/CGStmt.cpp",2694,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) {\n    if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, ReplaceConstraint, Arg->getType()))\n    else\n      CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << InputConstraint;"},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",120,"#endif\n    if (RDO & IsLate) {\n      Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Generating Interface Stubs is not supported with \""},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",234,"#endif\n  bool HandleNamedDecl(const NamedDecl *ND, MangledSymbols &Symbols, int RDO) {\n    Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Expected a function or function template decl.\";"},{G,434,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (Info.allowsRegister()) {\n      if (InputExpr->getType()->isVoidType()) {\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[o]={
[Q]={"clang/test/Sema/asm.c:8:25: error: invalid type \'void\' in asm input for constraint \'a\'","clang/test/Sema/asm.c:53:24: error: invalid type \'const volatile void\' in asm input for constraint \'r\'","clang/test/Sema/asm.c:57:24: error: invalid type \'void\' in asm input for constraint \'r\'"}
}
},
},
["err_asm_naked_parm_ref"]={
["err_asm_naked_parm_ref"]={
[h]="parameter references not allowed in naked functions",
[j]=n,
[i]=m,
[b]="parameter references not allowed in naked functions",
[g]=l,
[f]="parameter references not allowed in naked functions",
[f]="parameter references not allowed in naked functions",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="parameter references not allowed in naked functions",
[c]={"93dbeae0f734",1409869008,"Don\'t allow inline asm statements to reference parameters in naked functions"},
[i]=m,
[k]={{G,149,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n      if (isa<ParmVarDecl>(DRE->getDecl())) {\n        S.Diag(DRE->getBeginLoc(), diag::err_asm_naked_parm_ref);"}},
[j]="parameter references not allowed in naked functions",
[o]={
[b]=a,
["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:41:19: error: parameter references not allowed in naked functions","clang/test/Sema/attr-naked.c:48:20: error: parameter references not allowed in naked functions"}
[h]=o,
}
[d]={"93dbeae0f734",1409869008,"Don\'t allow inline asm statements to reference parameters in naked functions"},
[k]={{F,149,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n      if (isa<ParmVarDecl>(DRE->getDecl())) {\n        S.Diag(DRE->getBeginLoc(), diag::err_asm_naked_parm_ref);"}}
},
},
["err_asm_naked_this_ref"]={
["err_asm_naked_this_ref"]={
[h]="\'this\' pointer references not allowed in naked functions",
[j]=n,
[i]=m,
[b]="\'this\' pointer references not allowed in naked functions",
[g]=l,
[f]="\'this\' pointer references not allowed in naked functions",
[f]="\'this\' pointer references not allowed in naked functions",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'this\' pointer references not allowed in naked functions",
[c]={"71ac240620c4",1423002958,"Diagnose CXX \'this\' pointer reference in funcs with naked attr"},
[i]=m,
[k]={{G,143,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (isa<CXXThisExpr>(E)) {\n      S.Diag(E->getBeginLoc(), diag::err_asm_naked_this_ref);"}},
[j]="\'this\' pointer references not allowed in naked functions",
[o]={
[b]=a,
["clang/test/Sema/attr-naked.cpp"]={"clang/test/Sema/attr-naked.cpp:12:28: error: \'this\' pointer references not allowed in naked functions"}
[h]=o,
}
[d]={"71ac240620c4",1423002958,"Diagnose CXX \'this\' pointer reference in funcs with naked attr"},
[k]={{F,143,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (isa<CXXThisExpr>(E)) {\n      S.Diag(E->getBeginLoc(), diag::err_asm_naked_this_ref);"}}
},
},
["err_asm_non_addr_value_in_memory_constraint"]={
["err_asm_non_addr_value_in_memory_constraint"]={
[f]="reference to a ... in asm ... with a memory constraint \'A\'",
[h]="reference to a ... in asm ... with a memory constraint \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="reference to a %select{bit-field|vector element|global register variable}0 in asm %select{input|output}1 with a memory constraint \'%2\'",
[i]=m,
[i]=m,
[j]="reference to a (?:bit\\-field|vector element|global register variable) in asm (?:input|output) with a memory constraint \'(.*?)\'",
[b]="reference to a %select{bit-field|vector element|global register variable}0 in asm %select{input|output}1 with a memory constraint \'%2\'",
[b]=a,
[g]=l,
[h]=C,
[f]="reference to a (?:bit\\-field|vector element|global register variable) in asm (?:input|output) with a memory constraint \'(.*?)\'",
[d]={"d9eab9cc130d",1438598290,"Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler."},
[e]=a,
[k]={{F,184,"/// Returns true if given expression is not compatible with inline\n/// assembly\'s memory constraint; false otherwise.\nstatic bool checkExprMemoryConstraintCompat(Sema &S, Expr *E, TargetInfo::ConstraintInfo &Info, bool is_input_expr) {\n  if (EType != ExprSafeType) {\n    S.Diag(E->getBeginLoc(), diag::err_asm_non_addr_value_in_memory_constraint) << EType << is_input_expr << Info.getConstraintStr() << E->getSourceRange();"}}
[d]=D,
[c]={"d9eab9cc130d",1438598290,"Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler."},
[k]={{G,184,"/// Returns true if given expression is not compatible with inline\n/// assembly\'s memory constraint; false otherwise.\nstatic bool checkExprMemoryConstraintCompat(Sema &S, Expr *E, TargetInfo::ConstraintInfo &Info, bool is_input_expr) {\n  if (EType != ExprSafeType) {\n    S.Diag(E->getBeginLoc(), diag::err_asm_non_addr_value_in_memory_constraint) << EType << is_input_expr << Info.getConstraintStr() << E->getSourceRange();"}},
[o]={
[Q]={"clang/test/Sema/asm.c:268:20: error: reference to a bit-field in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:271:18: error: reference to a bit-field in asm output with a memory constraint \'m\'","clang/test/Sema/asm.c:273:20: error: reference to a vector element in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:276:18: error: reference to a vector element in asm output with a memory constraint \'m\'","clang/test/Sema/asm.c:278:20: error: reference to a global register variable in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:281:18: error: reference to a global register variable in asm output with a memory constraint \'m\'"}
}
},
},
["err_asm_operand_wide_string_literal"]={
["err_asm_operand_wide_string_literal"]={
[f]="cannot use ... string literal in \'asm\'",
[h]="cannot use ... string literal in \'asm\'",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot use %select{unicode|wide|an empty}0 string literal in \'asm\'",
[i]=m,
[i]=m,
[j]="cannot use (?:unicode|wide|an empty) string literal in \'asm\'",
[b]="cannot use %select{unicode|wide|an empty}0 string literal in \'asm\'",
[b]=a,
[g]=l,
[h]=B,
[f]="cannot use (?:unicode|wide|an empty) string literal in \'asm\'",
[d]={"65cdbf58a7dc",1322786146,"Diagnose use of wide string literal in \'asm\' instead of crashing.  Fixes <rdar://problem/10465079>."},
[e]=a,
[k]={{Jb,1632,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  if (!AsmString.isInvalid()) {\n    if (!SL->isOrdinary()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << SL->isWide() << SL->getSourceRange();"},{Jb,1638,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  if (!AsmString.isInvalid()) {\n    if (ForAsmLabel && SL->getString().empty()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << 2 /* an empty */ << SL->getSourceRange();"}}
[d]=A,
[c]={"65cdbf58a7dc",1322786146,"Diagnose use of wide string literal in \'asm\' instead of crashing.  Fixes <rdar://problem/10465079>."},
[k]={{Sb,1632,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  if (!AsmString.isInvalid()) {\n    if (!SL->isOrdinary()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << SL->isWide() << SL->getSourceRange();"},{Sb,1638,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  if (!AsmString.isInvalid()) {\n    if (ForAsmLabel && SL->getString().empty()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << 2 /* an empty */ << SL->getSourceRange();"}},
[o]={
["clang/test/Parser/asm.c"]={"clang/test/Parser/asm.c:20:24: error: cannot use an empty string literal in \'asm\'","clang/test/Parser/asm.c:29:20: error: cannot use wide string literal in \'asm\'"}
}
},
},
["err_asm_pmf_through_constraint_not_permitted"]={
["err_asm_pmf_through_constraint_not_permitted"]={
[f]="cannot pass a pointer-to-member through register-constrained inline assembly parameter",
[h]="cannot pass a pointer-to-member through register-constrained inline assembly parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass a pointer-to-member through register-constrained inline assembly parameter",
[i]=m,
[i]=m,
[j]="cannot pass a pointer\\-to\\-member through register\\-constrained inline assembly parameter",
[b]="cannot pass a pointer-to-member through register-constrained inline assembly parameter",
[b]=a,
[g]=l,
[h]=C,
[f]="cannot pass a pointer\\-to\\-member through register\\-constrained inline assembly parameter",
[d]={N,1625925174,M},
[e]=a,
[k]={{F,385,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (InputExpr->getType()->isMemberPointerType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_pmf_through_constraint_not_permitted) << InputExpr->getSourceRange());"}}
[d]=D,
[c]={N,1625925174,O},
[k]={{G,385,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    if (InputExpr->getType()->isMemberPointerType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_pmf_through_constraint_not_permitted) << InputExpr->getSourceRange());"}},
[o]={
["clang/test/Sema/gnu-asm-pmf.cpp"]={"clang/test/Sema/gnu-asm-pmf.cpp:34:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:36:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:38:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:40:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:42:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:44:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter"}
}
},
},
["err_asm_qualifier_ignored"]={
["err_asm_qualifier_ignored"]={
[f]="expected \'volatile\', \'inline\', \'goto\', or \'(\'",
[h]="expected \'volatile\', \'inline\', \'goto\', or \'(\'",
[c]=l,
[j]=n,
[e]=n,
[g]="expected \'volatile\', \'inline\', \'goto\', or \'(\'",
[i]=m,
[i]=m,
[j]="expected \'volatile\', \'inline\', \'goto\', or \'\\(\'",
[b]="expected \'volatile\', \'inline\', \'goto\', or \'(\'",
[b]=a,
[g]=l,
[h]=C,
[f]="expected \'volatile\', \'inline\', \'goto\', or \'\\(\'",
[d]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator."},
[e]=a,
[k]={{"clang/lib/Parse/ParseStmtAsm.cpp",689,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    if (A == GNUAsmQualifiers::AQ_unspecified) {\n      if (Tok.isNot(tok::l_paren)) {\n        Diag(Tok.getLocation(), diag::err_asm_qualifier_ignored);"}}
[d]=D,
[c]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator."},
[k]={{"clang/lib/Parse/ParseStmtAsm.cpp",689,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    if (A == GNUAsmQualifiers::AQ_unspecified) {\n      if (Tok.isNot(tok::l_paren)) {\n        Diag(Tok.getLocation(), diag::err_asm_qualifier_ignored);"}},
[o]={
["clang/test/Parser/asm-qualifiers.c"]={"clang/test/Parser/asm-qualifiers.c:12:7: error: expected \'volatile\', \'inline\', \'goto\', or \'(\'","clang/test/Parser/asm-qualifiers.c:13:12: error: expected \'volatile\', \'inline\', \'goto\', or \'(\'","clang/test/Parser/asm-qualifiers.c:14:16: error: expected \'volatile\', \'inline\', \'goto\', or \'(\'"}
}
},
},
["err_asm_register_size_mismatch"]={
["err_asm_register_size_mismatch"]={
[f]="size of register \'A\' does not match variable size",
[h]="size of register \'A\' does not match variable size",
[c]=l,
[j]=n,
[e]=n,
[g]="size of register \'%0\' does not match variable size",
[i]=m,
[i]=m,
[j]="size of register \'(.*?)\' does not match variable size",
[b]="size of register \'%0\' does not match variable size",
[b]=a,
[g]=l,
[h]=C,
[f]="size of register \'(.*?)\' does not match variable size",
[d]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables."},
[e]=a,
[k]={{q,7965,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        if (!TI.isValidGCCRegisterName(Label))\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n        else if (HasSizeMismatch)\n          Diag(E->getExprLoc(), diag::err_asm_register_size_mismatch) << Label;"}}
[d]=D,
[c]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables."},
[k]={{r,7965,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        if (!TI.isValidGCCRegisterName(Label))\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n        else if (HasSizeMismatch)\n          Diag(E->getExprLoc(), diag::err_asm_register_size_mismatch) << Label;"}},
[o]={
[Q]={"clang/test/Sema/asm.c:204:28: error: size of register \'esp\' does not match variable size"}
}
},
},
["err_asm_tying_incompatible_types"]={
["err_asm_tying_incompatible_types"]={
[f]="unsupported inline asm: input with type A matching output with type B",
[h]="unsupported inline asm: input with type A matching output with type B",
[c]=l,
[j]=n,
[e]=n,
[g]="unsupported inline asm: input with type %diff{$ matching output with type $|}0,1",
[i]=m,
[i]=m,
[j]="unsupported inline asm\\: input with type (?:(.*?) matching output with type (.*?)|)",
[b]="unsupported inline asm: input with type %diff{$ matching output with type $|}0,1",
[b]=a,
[g]=l,
[h]=C,
[f]="unsupported inline asm\\: input with type (?:(.*?) matching output with type (.*?)|)",
[d]={"574428e4db41",1240770144,"implement PR4077: [Linux kernel] inscrutable error on inline asm input/output constraint mismatch"},
[e]=a,
[k]={{F,705,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    targetDiag(InputExpr->getBeginLoc(), diag::err_asm_tying_incompatible_types) << InTy << OutTy << OutputExpr->getSourceRange() << InputExpr->getSourceRange();"}}
[d]=D,
[c]={"574428e4db41",1240770144,"implement PR4077: [Linux kernel] inscrutable error on inline asm input/output constraint mismatch"},
[k]={{G,705,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    targetDiag(InputExpr->getBeginLoc(), diag::err_asm_tying_incompatible_types) << InTy << OutTy << OutputExpr->getSourceRange() << InputExpr->getSourceRange();"}},
[o]={
[Q]={"clang/test/Sema/asm.c:91:45: error: unsupported inline asm: input with type \'unsigned long long\' matching output with type \'int\'","clang/test/Sema/asm.c:359:29: error: unsupported inline asm: input with type \'st_size64\' (aka \'struct _st_size64\') matching output with type \'long long\'","clang/test/Sema/asm.c:361:29: error: unsupported inline asm: input with type \'st_size32\' (aka \'struct _st_size32\') matching output with type \'st_size64\' (aka \'struct _st_size64\')","clang/test/Sema/asm.c:366:29: error: unsupported inline asm: input with type \'st_size128\' (aka \'struct _st_size128\') matching output with type \'long long\'"}
}
},
},
["err_asm_unexpected_constraint_alternatives"]={
["err_asm_unexpected_constraint_alternatives"]={
[f]="asm constraint has an unexpected number of alternatives: A vs B",
[h]="asm constraint has an unexpected number of alternatives: A vs B",
[c]=l,
[j]=n,
[e]=n,
[g]="asm constraint has an unexpected number of alternatives: %0 vs %1",
[i]=m,
[i]=m,
[j]="asm constraint has an unexpected number of alternatives\\: (.*?) vs (.*?)",
[b]="asm constraint has an unexpected number of alternatives: %0 vs %1",
[b]=a,
[g]=l,
[h]=C,
[f]="asm constraint has an unexpected number of alternatives\\: (.*?) vs (.*?)",
[d]={"c63fa612e46e",1419826199,"Sema: Forbid inconsistent constraint alternatives"},
[e]=a,
[k]={{F,572,"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  for (unsigned i = 0, e = OutputConstraintInfos.size(); i != e; ++i) {\n    if (NumAlternatives == ~0U) {\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getOutputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"},{F,587,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    if (NumAlternatives == ~0U) {\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"}}
[d]=D,
[c]={"c63fa612e46e",1419826199,"Sema: Forbid inconsistent constraint alternatives"},
[k]={{G,572,"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  for (unsigned i = 0, e = OutputConstraintInfos.size(); i != e; ++i) {\n    if (NumAlternatives == ~0U) {\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getOutputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"},{G,587,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    if (NumAlternatives == ~0U) {\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"}},
[o]={
[Q]={"clang/test/Sema/asm.c:217:21: error: asm constraint has an unexpected number of alternatives: 1 vs 2"}
}
},
},
["err_asm_unknown_register_name"]={
["err_asm_unknown_register_name"]={
[f]="unknown register name \'A\' in asm",
[h]="unknown register name \'A\' in asm",
[c]=l,
[j]=n,
[e]=n,
[g]="unknown register name \'%0\' in asm",
[i]=m,
[i]=m,
[j]="unknown register name \'(.*?)\' in asm",
[b]="unknown register name \'%0\' in asm",
[b]=a,
[g]=l,
[h]=C,
[f]="unknown register name \'(.*?)\' in asm",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,7945,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n      case SC_Register:\n        // Local Named register\n        if (!Context.getTargetInfo().isValidGCCRegisterName(Label) && DeclAttrsMatchCUDAMode(getLangOpts(), getCurFunctionDecl()))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{q,7959,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        if (!TI.isValidGCCRegisterName(Label))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{F,475,"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  // Check that the clobbers are valid.\n  for (unsigned i = 0; i != NumClobbers; i++) {\n    if (!Context.getTargetInfo().isValidClobber(Clobber)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_unknown_register_name) << Clobber;"}}
[d]=D,
[c]={v,1237025389,u},
[k]={{r,7945,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n      case SC_Register:\n        // Local Named register\n        if (!Context.getTargetInfo().isValidGCCRegisterName(Label) && DeclAttrsMatchCUDAMode(getLangOpts(), getCurFunctionDecl()))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{r,7959,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        if (!TI.isValidGCCRegisterName(Label))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{G,475,"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  // Check that the clobbers are valid.\n  for (unsigned i = 0; i != NumClobbers; i++) {\n    if (!Context.getTargetInfo().isValidClobber(Clobber)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_unknown_register_name) << Clobber;"}},
[o]={
[Q]={"clang/test/Sema/asm.c:26:20: error: unknown register name \'foo\' in asm","clang/test/Sema/asm.c:28:20: error: unknown register name \'204\' in asm","clang/test/Sema/asm.c:29:20: error: unknown register name \'-1\' in asm","clang/test/Sema/asm.c:30:20: error: unknown register name \'+1\' in asm","clang/test/Sema/asm.c:116:24: error: unknown register name \'rr_asm\' in asm","clang/test/Sema/asm.c:117:25: error: unknown register name \'%\' in asm","clang/test/Sema/asm.c:129:26: error: unknown register name \'cc\' in asm"}
}
},
},
["err_asm_unknown_symbolic_operand_name"]={
["err_asm_unknown_symbolic_operand_name"]={
[h]="unknown symbolic operand name in inline assembly string",
[j]=n,
[i]=m,
[b]="unknown symbolic operand name in inline assembly string",
[g]=l,
[f]="unknown symbolic operand name in inline assembly string",
[f]="unknown symbolic operand name in inline assembly string",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="unknown symbolic operand name in inline assembly string",
[c]={v,1237025389,u},
[i]=m,
[k]={{ob,758,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      if (N == -1) {\n        return diag::err_asm_unknown_symbolic_operand_name;"}},
[j]="unknown symbolic operand name in inline assembly string",
[o]={
[b]=a,
[Q]={"clang/test/Sema/asm.c:79:11: error: unknown symbolic operand name in inline assembly string"}
[h]=C,
}
[d]={u,1237025389,t},
[k]={{ob,758,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      if (N == -1) {\n        return diag::err_asm_unknown_symbolic_operand_name;"}}
},
},
["err_asm_unterminated_symbolic_operand_name"]={
["err_asm_unterminated_symbolic_operand_name"]={
[h]="unterminated symbolic operand name in inline assembly string",
[j]=n,
[i]=m,
[b]="unterminated symbolic operand name in inline assembly string",
[g]=l,
[f]="unterminated symbolic operand name in inline assembly string",
[f]="unterminated symbolic operand name in inline assembly string",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="unterminated symbolic operand name in inline assembly string",
[c]={v,1237025389,u},
[i]=m,
[k]={{ob,748,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      if (NameEnd == nullptr)\n        return diag::err_asm_unterminated_symbolic_operand_name;"}},
[j]="unterminated symbolic operand name in inline assembly string",
[o]={
[b]=a,
[Q]={"clang/test/Sema/asm.c:80:10: error: unterminated symbolic operand name in inline assembly string"}
[h]=C,
}
[d]={u,1237025389,t},
[k]={{ob,748,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  while (true) {\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      if (NameEnd == nullptr)\n        return diag::err_asm_unterminated_symbolic_operand_name;"}}
},
},
["err_asm_unwind_and_goto"]={
["err_asm_unwind_and_goto"]={
[h]="unwind clobber can\'t be used with asm goto",
[j]=n,
[i]=m,
[b]="unwind clobber can\'t be used with asm goto",
[g]=l,
[f]="unwind clobber can\'t be used with asm goto",
[f]="unwind clobber can\'t be used with asm goto",
[c]=l,
[e]=a,
[e]=n,
[d]=D,
[g]="unwind clobber can\'t be used with asm goto",
[c]={Kb,1615397021,Mb},
[i]=m,
[k]={{G,490,"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  // Using unwind clobber and asm-goto together is not supported right now.\n  if (UnwindClobberLoc && NumLabels > 0) {\n    targetDiag(*UnwindClobberLoc, diag::err_asm_unwind_and_goto);"}}
[j]="unwind clobber can\'t be used with asm goto",
[b]=a,
[h]=C,
[d]={Lb,1615397021,Kb},
[k]={{F,490,"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  // Using unwind clobber and asm-goto together is not supported right now.\n  if (UnwindClobberLoc && NumLabels > 0) {\n    targetDiag(*UnwindClobberLoc, diag::err_asm_unwind_and_goto);"}}
},
},
["err_assoc_compatible_types"]={
["err_assoc_compatible_types"]={
[f]="type A in generic association compatible with previously specified type B",
[h]="type A in generic association compatible with previously specified type B",
[c]=l,
[j]=n,
[e]=n,
[g]="type %0 in generic association compatible with previously specified type %1",
[i]=m,
[i]=m,
[j]="type (.*?) in generic association compatible with previously specified type (.*?)",
[b]="type %0 in generic association compatible with previously specified type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="type (.*?) in generic association compatible with previously specified type (.*?)",
[d]={"91147596414d",1302827748,"C1X: implement generic selections"},
[e]=a,
[k]={{y,1778,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        // C11 6.5.1.1p2 \"No two generic associations in the same generic\n        // selection shall specify compatible types.\"\n        for (unsigned j = i + 1; j < NumAssocs; ++j)\n          if (Types[j] && !Types[j]->getType()->isDependentType() && Context.typesAreCompatible(Types[i]->getType(), Types[j]->getType())) {\n            Diag(Types[j]->getTypeLoc().getBeginLoc(), diag::err_assoc_compatible_types) << Types[j]->getTypeLoc().getSourceRange() << Types[j]->getType() << Types[i]->getType();"}}
[d]=p,
[c]={"91147596414d",1302827748,"C1X: implement generic selections"},
[k]={{z,1778,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        // C11 6.5.1.1p2 \"No two generic associations in the same generic\n        // selection shall specify compatible types.\"\n        for (unsigned j = i + 1; j < NumAssocs; ++j)\n          if (Types[j] && !Types[j]->getType()->isDependentType() && Context.typesAreCompatible(Types[i]->getType(), Types[j]->getType())) {\n            Diag(Types[j]->getTypeLoc().getBeginLoc(), diag::err_assoc_compatible_types) << Types[j]->getTypeLoc().getSourceRange() << Types[j]->getType() << Types[i]->getType();"}},
[o]={
["clang/test/Sema/attr-btf_type_tag.c"]={"clang/test/Sema/attr-btf_type_tag.c:32:19: error: type \'int *\' in generic association compatible with previously specified type \'int  __attribute__((btf_type_tag(\"tag1\")))*\' (aka \'int *\')"}
}
},
},
["err_assoc_type_incomplete"]={
["err_assoc_type_incomplete"]={
[f]="type A in generic association incomplete",
[h]="type A in generic association incomplete",
[c]=l,
[j]=n,
[e]=n,
[g]="type %0 in generic association incomplete",
[i]=m,
[i]=m,
[j]="type (.*?) in generic association incomplete",
[b]="type %0 in generic association incomplete",
[b]=a,
[g]=l,
[h]=o,
[f]="type (.*?) in generic association incomplete",
[d]={"91147596414d",1302827748,"C1X: implement generic selections"},
[e]=a,
[k]={{y,1726,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n          D = diag::err_assoc_type_incomplete;"}}
[d]=p,
[c]={"91147596414d",1302827748,"C1X: implement generic selections"},
[k]={{z,1726,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n          D = diag::err_assoc_type_incomplete;"}},
[o]={
["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:87:21: error: type \'struct T\' in generic association incomplete"}
}
},
},
["err_assoc_type_nonobject"]={
["err_assoc_type_nonobject"]={
[f]="type A in generic association not an object type",
[h]="type A in generic association not an object type",
[c]=l,
[j]=n,
[e]=n,
[g]="type %0 in generic association not an object type",
[i]=m,
[i]=m,
[j]="type (.*?) in generic association not an object type",
[b]="type %0 in generic association not an object type",
[b]=a,
[g]=l,
[h]=o,
[f]="type (.*?) in generic association not an object type",
[d]={"91147596414d",1302827748,"C1X: implement generic selections"},
[e]=a,
[k]={{y,1728,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n          D = diag::err_assoc_type_nonobject;"}}
[d]=p,
[c]={"91147596414d",1302827748,"C1X: implement generic selections"},
[k]={{z,1728,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n          D = diag::err_assoc_type_nonobject;"}},
[o]={
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:9:7: error: type \'void ()\' in generic association not an object type"}
}
},
},
["err_assoc_type_variably_modified"]={
["err_assoc_type_variably_modified"]={
[f]="type A in generic association is a variably modified type",
[h]="type A in generic association is a variably modified type",
[c]=l,
[j]=n,
[e]=n,
[g]="type %0 in generic association is a variably modified type",
[i]=m,
[i]=m,
[j]="type (.*?) in generic association is a variably modified type",
[b]="type %0 in generic association is a variably modified type",
[b]=a,
[g]=l,
[h]=o,
[f]="type (.*?) in generic association is a variably modified type",
[d]={"91147596414d",1302827748,"C1X: implement generic selections"},
[e]=a,
[k]={{y,1730,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n        else if (Types[i]->getType()->isVariablyModifiedType())\n          D = diag::err_assoc_type_variably_modified;"}}
[d]=p,
[c]={"91147596414d",1302827748,"C1X: implement generic selections"},
[k]={{z,1730,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n        else if (Types[i]->getType()->isVariablyModifiedType())\n          D = diag::err_assoc_type_variably_modified;"}},
[o]={
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:10:7: error: type \'int[n]\' in generic association is a variably modified type"}
}
},
},
["err_ast_file_invalid"]={
["err_ast_file_invalid"]={
[f]="file \'A\' is not a valid precompiled ... file",
[h]="file \'A\' is not a valid precompiled ... file",
[c]=Fb,
[j]=Ub,
[e]=Eb,
[i]=Rb,
[g]="file \'%1\' is not a valid precompiled %select{PCH|module|AST}0 file",
[b]="file \'%1\' is not a valid precompiled %select{PCH|module|AST}0 file",
[i]=Bb,
[g]=Tb,
[j]="file \'(.*?)\' is not a valid precompiled (?:PCH|module|AST) file",
[f]="file \'(.*?)\' is not a valid precompiled (?:PCH|module|AST) file",
[b]=a,
[e]=a,
[h]="AST Deserialization Issue",
[d]="AST Deserialization Issue",
[d]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC"},
[c]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC"},
[k]={{"clang/lib/Serialization/ASTReader.cpp",4643,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // Sniff for the signature.\n  if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {\n    Diag(diag::err_ast_file_invalid) << moduleKindForDiagnostic(Type) << FileName << std::move(Err);"}}
[k]={{"clang/lib/Serialization/ASTReader.cpp",4643,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // Sniff for the signature.\n  if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {\n    Diag(diag::err_ast_file_invalid) << moduleKindForDiagnostic(Type) << FileName << std::move(Err);"}},
[o]={
["clang/test/Modules/fatal-module-loader-error.m"]={"clang/test/Modules/fatal-module-loader-error.m:12:2: fatal error: file \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/fatal-module-loader-error.m.tmp/Module.pcm\' is not a valid precompiled module file"}
}
},
},
["err_ast_file_not_found"]={
["err_ast_file_not_found"]={
[f]="... file \'A\' not found...",
[h]="... file \'A\' not found...",
[c]=Fb,
[j]=Ub,
[e]=Eb,
[i]=Rb,
[g]="%select{PCH|module|AST}0 file \'%1\' not found%select{|: %3}2",
[b]="%select{PCH|module|AST}0 file \'%1\' not found%select{|: %3}2",
[i]=Bb,
[g]=Tb,
[j]="(?:PCH|module|AST) file \'(.*?)\' not found(?:|\\: (.*?))",
[f]="(?:PCH|module|AST) file \'(.*?)\' not found(?:|\\: (.*?))",
[b]=a,
[e]=a,
[h]="AST Deserialization Issue",
[d]="AST Deserialization Issue",
[d]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC"},
[c]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC"},
[k]={{"clang/lib/Serialization/ASTReader.cpp",4608,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  case ModuleManager::Missing:\n    Diag(diag::err_ast_file_not_found) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}}
[k]={{"clang/lib/Serialization/ASTReader.cpp",4608,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  case ModuleManager::Missing:\n    Diag(diag::err_ast_file_not_found) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}},
[o]={
["clang/test/PCH/cxx-chain-function-template.cpp"]={"fatal error: PCH file \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/PCH/cxx-chain-function-template.cpp.pch0\' not found: module file not found"}
}
},
},
["err_ast_file_out_of_date"]={
["err_ast_file_out_of_date"]={
[f]="... file \'A\' is out of date and needs to be rebuilt...",
[h]="... file \'A\' is out of date and needs to be rebuilt...",
[c]=Fb,
[j]=Ub,
[e]=Eb,
[i]=Rb,
[g]="%select{PCH|module|AST}0 file \'%1\' is out of date and needs to be rebuilt%select{|: %3}2",
[b]="%select{PCH|module|AST}0 file \'%1\' is out of date and needs to be rebuilt%select{|: %3}2",
[i]=Bb,
[g]=Tb,
[j]="(?:PCH|module|AST) file \'(.*?)\' is out of date and needs to be rebuilt(?:|\\: (.*?))",
[f]="(?:PCH|module|AST) file \'(.*?)\' is out of date and needs to be rebuilt(?:|\\: (.*?))",
[b]=a,
[e]=a,
[h]="AST Deserialization Issue",
[d]="AST Deserialization Issue",
[d]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC"},
[c]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC"},
[k]={{"clang/lib/Serialization/ASTReader.cpp",4620,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  case ModuleManager::OutOfDate:\n    Diag(diag::err_ast_file_out_of_date) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}}
[k]={{"clang/lib/Serialization/ASTReader.cpp",4620,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  case ModuleManager::OutOfDate:\n    Diag(diag::err_ast_file_out_of_date) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}},
[o]={
["clang/test/Modules/explicit-build.cpp"]={"fatal error: module file \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/b.pcm\' is out of date and needs to be rebuilt: module file out of date"}
}
},
},
["err_at_defs_cxx"]={
["err_at_defs_cxx"]={
[f]="@defs is not supported in Objective-C++",
[h]="@defs is not supported in Objective-C++",
[c]=l,
[j]=n,
[e]=n,
[g]="@defs is not supported in Objective-C++",
[i]=m,
[i]=m,
[j]="@defs is not supported in Objective\\-C\\+\\+",
[b]="@defs is not supported in Objective-C++",
[b]=a,
[g]=l,
[h]=B,
[f]="@defs is not supported in Objective\\-C\\+\\+",
[d]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,"},
[e]=a,
[k]={{K,2682,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n      Diag(Tok, diag::err_at_defs_cxx);"}}
[d]=A,
[c]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,"},
[k]={{L,2682,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n      Diag(Tok, diag::err_at_defs_cxx);"}},
[o]={
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:9:3: error: @defs is not supported in Objective-C++"}
}
},
},
["err_at_in_class"]={
["err_at_in_class"]={
[h]="unexpected \'@\' in member specification",
[j]=n,
[i]=m,
[b]="unexpected \'@\' in member specification",
[g]=l,
[f]="unexpected \'@\' in member specification",
[f]="unexpected \'@\' in member specification",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="unexpected \'@\' in member specification",
[c]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,"},
[i]=m,
[k]={{L,2684,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n    else\n      Diag(Tok, diag::err_at_in_class);"}},
[j]="unexpected \'@\' in member specification",
[o]={
[b]=a,
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:14:5: error: unexpected \'@\' in member specification"}
[h]=B,
}
[d]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,"},
[k]={{K,2684,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n    else\n      Diag(Tok, diag::err_at_in_class);"}}
},
},
["err_atdef_nonfragile_interface"]={
["err_atdef_nonfragile_interface"]={
[h]="use of @defs is not supported on this architecture and platform",
[j]=n,
[i]=m,
[b]="use of @defs is not supported on this architecture and platform",
[g]=l,
[f]="use of @defs is not supported on this architecture and platform",
[f]="use of @defs is not supported on this architecture and platform",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="use of @defs is not supported on this architecture and platform",
[c]={"ece1b2b0e156",1240345721,"Patch to diagnose use of objc\'s @defs in nonfragile abi."},
[i]=m,
[k]={{K,5110,"/// Called whenever \\@defs(ClassName) is encountered in the source.  Inserts the\n/// instance variables of ClassName into Decls.\nvoid Sema::ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart, IdentifierInfo *ClassName, SmallVectorImpl<Decl *> &Decls) {\n  if (LangOpts.ObjCRuntime.isNonFragile()) {\n    Diag(DeclStart, diag::err_atdef_nonfragile_interface);"}},
[j]="use of @defs is not supported on this architecture and platform",
[o]={
[b]=a,
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:46:24: error: use of @defs is not supported on this architecture and platform"}
[h]=o,
}
[d]={"ece1b2b0e156",1240345721,"Patch to diagnose use of objc\'s @defs in nonfragile abi."},
[k]={{I,5110,"/// Called whenever \\@defs(ClassName) is encountered in the source.  Inserts the\n/// instance variables of ClassName into Decls.\nvoid Sema::ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart, IdentifierInfo *ClassName, SmallVectorImpl<Decl *> &Decls) {\n  if (LangOpts.ObjCRuntime.isNonFragile()) {\n    Diag(DeclStart, diag::err_atdef_nonfragile_interface);"}}
},
},
["err_atimport"]={
["err_atimport"]={
[h]="use of \'@import\' when modules are disabled",
[j]=n,
[i]=m,
[b]="use of \'@import\' when modules are disabled",
[g]=l,
[f]="use of \'@import\' when modules are disabled",
[f]="use of \'@import\' when modules are disabled",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="use of \'@import\' when modules are disabled",
[c]={"a773d0861800",1395871363,"Objective-C. Improve diagnostic error for \'@import\' "},
[i]=m,
[k]={{"clang/lib/Parse/ParseObjc.cpp",103,"/// ParseObjCAtDirectives - Handle parts of the external-declaration production:\n///      external-declaration: [C99 6.9]\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  \'@\' \'end\'\nParser::DeclGroupPtrTy Parser::ParseObjCAtDirectives(ParsedAttributes &DeclAttrs, ParsedAttributes &DeclSpecAttrs) {\n  case tok::objc_import:\n    Diag(AtLoc, diag::err_atimport);"}},
[j]="use of \'@import\' when modules are disabled",
[o]={
[b]=a,
["clang/test/Parser/check-objc2-syntax-1.m"]={"clang/test/Parser/check-objc2-syntax-1.m:4:1: error: use of \'@import\' when modules are disabled"}
[h]=B,
}
[d]={"a773d0861800",1395871363,"Objective-C. Improve diagnostic error for \'@import\' "},
[k]={{"clang/lib/Parse/ParseObjc.cpp",103,"/// ParseObjCAtDirectives - Handle parts of the external-declaration production:\n///      external-declaration: [C99 6.9]\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  \'@\' \'end\'\nParser::DeclGroupPtrTy Parser::ParseObjCAtDirectives(ParsedAttributes &DeclAttrs, ParsedAttributes &DeclSpecAttrs) {\n  case tok::objc_import:\n    Diag(AtLoc, diag::err_atimport);"}}
},
},
["err_atomic_builtin_bit_int_prohibit"]={
["err_atomic_builtin_bit_int_prohibit"]={
[h]="argument to atomic builtin of type \'_BitInt\' is not supported",
[j]=n,
[i]=m,
[b]="argument to atomic builtin of type \'_BitInt\' is not supported",
[g]=l,
[f]="argument to atomic builtin of type \'_BitInt\' is not supported",
[f]="argument to atomic builtin of type \'_BitInt\' is not supported",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="argument to atomic builtin of type \'_BitInt\' is not supported",
[c]={cb,1616787805,jb},
[i]=m,
[k]={{t,7460,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (ValType->isBitIntType()) {\n    Diag(Ptr->getExprLoc(), diag::err_atomic_builtin_bit_int_prohibit);"}},
[j]="argument to atomic builtin of type \'_BitInt\' is not supported",
[o]={
[b]=a,
[pb]={"clang/test/Sema/builtins.c:289:22: error: argument to atomic builtin of type \'_BitInt\' is not supported","clang/test/Sema/builtins.c:297:22: error: argument to atomic builtin of type \'_BitInt\' is not supported"}
[h]=o,
}
[d]={db,1616787805,cb},
[k]={{s,7460,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (ValType->isBitIntType()) {\n    Diag(Ptr->getExprLoc(), diag::err_atomic_builtin_bit_int_prohibit);"}}
},
},
["err_atomic_builtin_cannot_be_const"]={
["err_atomic_builtin_cannot_be_const"]={
[f]="address argument to atomic builtin cannot be const-qualified (A invalid)",
[h]="address argument to atomic builtin cannot be const-qualified (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic builtin cannot be const-qualified (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic builtin cannot be const\\-qualified \\((.*?) invalid\\)",
[b]="address argument to atomic builtin cannot be const-qualified (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic builtin cannot be const\\-qualified \\((.*?) invalid\\)",
[d]={"a383c94ccd63",1525541922,"Disallow pointers to const in __sync_fetch_and_xxx."},
[e]=a,
[k]={{s,7568,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (ValType.isConstQualified()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_cannot_be_const) << FirstArg->getType() << FirstArg->getSourceRange();"}}
[d]=p,
[c]={"a383c94ccd63",1525541922,"Disallow pointers to const in __sync_fetch_and_xxx."},
[k]={{t,7568,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (ValType.isConstQualified()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_cannot_be_const) << FirstArg->getType() << FirstArg->getSourceRange();"}},
[o]={
[pb]={"clang/test/Sema/builtins.c:280:3: error: address argument to atomic builtin cannot be const-qualified (\'const int *\' invalid)"}
}
},
},
["err_atomic_builtin_ext_int_size"]={
["err_atomic_builtin_ext_int_size"]={
[f]="Atomic memory operand must have a power-of-two size",
[h]="Atomic memory operand must have a power-of-two size",
[c]=l,
[j]=n,
[e]=n,
[g]="Atomic memory operand must have a power-of-two size",
[i]=m,
[i]=m,
[j]="Atomic memory operand must have a power\\-of\\-two size",
[b]="Atomic memory operand must have a power-of-two size",
[b]=a,
[g]=l,
[h]=o,
[f]="Atomic memory operand must have a power\\-of\\-two size",
[d]={T,1582847864,U},
[e]=a,
[k]={{s,7890,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (BitIntValType && !llvm::isPowerOf2_64(BitIntValType->getNumBits())) {\n    Diag(FirstArg->getExprLoc(), diag::err_atomic_builtin_ext_int_size);"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{t,7890,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (BitIntValType && !llvm::isPowerOf2_64(BitIntValType->getNumBits())) {\n    Diag(FirstArg->getExprLoc(), diag::err_atomic_builtin_ext_int_size);"}},
[o]={
[pb]={"clang/test/Sema/builtins.c:285:24: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:287:25: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:313:24: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:315:25: error: Atomic memory operand must have a power-of-two size"}
}
},
},
["err_atomic_builtin_must_be_pointer"]={
["err_atomic_builtin_must_be_pointer"]={
[f]="address argument to atomic builtin must be a pointer (A invalid)",
[h]="address argument to atomic builtin must be a pointer (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic builtin must be a pointer (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic builtin must be a pointer \\((.*?) invalid\\)",
[b]="address argument to atomic builtin must be a pointer (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic builtin must be a pointer \\((.*?) invalid\\)",
[d]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same"},
[e]=a,
[k]={{s,3182,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{s,7153,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (!pointerType) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_builtin_must_be_pointer) << Ptr->getType() << Ptr->getSourceRange();"},{s,7554,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << FirstArg->getType() << FirstArg->getSourceRange();"}}
[d]=p,
[c]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same"},
[k]={{t,3182,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{t,7153,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (!pointerType) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_builtin_must_be_pointer) << Ptr->getType() << Ptr->getSourceRange();"},{t,7554,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << FirstArg->getType() << FirstArg->getSourceRange();"}},
[o]={
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:8:9: error: address argument to atomic builtin must be a pointer (\'int\' invalid)","clang/test/SemaCUDA/atomic-ops.cu:33:3: error: address argument to atomic builtin must be a pointer (\'int\' invalid)","clang/test/SemaCUDA/atomic-ops.cu:67:10: error: address argument to atomic builtin must be a pointer (\'int\' invalid)"}
}
},
},
["err_atomic_builtin_must_be_pointer_intfltptr"]={
["err_atomic_builtin_must_be_pointer_intfltptr"]={
[f]="address argument to atomic builtin must be a pointer to integer, floating-point or pointer (A invalid)",
[h]="address argument to atomic builtin must be a pointer to integer, floating-point or pointer (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic builtin must be a pointer to integer, floating-point or pointer (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic builtin must be a pointer to integer, floating\\-point or pointer \\((.*?) invalid\\)",
[b]="address argument to atomic builtin must be a pointer to integer, floating-point or pointer (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic builtin must be a pointer to integer, floating\\-point or pointer \\((.*?) invalid\\)",
[d]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations."},
[e]=a,
[k]={{s,3216,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // In general, we allow ints, floats and pointers to be loaded and stored.\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intfltptr) << PointerArg->getType() << PointerArg->getSourceRange();"}}
[d]=p,
[c]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations."},
[k]={{t,3216,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // In general, we allow ints, floats and pointers to be loaded and stored.\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intfltptr) << PointerArg->getType() << PointerArg->getSourceRange();"}},
[o]={
["clang/test/Sema/builtins-arm64-exclusive.c"]={"clang/test/Sema/builtins-arm64-exclusive.c:23:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'const volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:47:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:72:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'const volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:96:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'volatile struct Simple *\' invalid)"}
}
},
},
["err_atomic_builtin_must_be_pointer_intptr"]={
["err_atomic_builtin_must_be_pointer_intptr"]={
[f]="address argument to atomic builtin must be a pointer to integer or pointer (A invalid)",
[h]="address argument to atomic builtin must be a pointer to integer or pointer (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic builtin must be a pointer to integer or pointer (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic builtin must be a pointer to integer or pointer \\((.*?) invalid\\)",
[b]="address argument to atomic builtin must be a pointer to integer or pointer (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic builtin must be a pointer to integer or pointer \\((.*?) invalid\\)",
[d]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same"},
[e]=a,
[k]={{s,7562,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intptr) << FirstArg->getType() << FirstArg->getSourceRange();"}}
[d]=p,
[c]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same"},
[k]={{t,7562,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intptr) << FirstArg->getType() << FirstArg->getSourceRange();"}}
},
},
["err_atomic_builtin_pointer_size"]={
["err_atomic_builtin_pointer_size"]={
[f]="address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type (A invalid)",
[h]="address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type \\((.*?) invalid\\)",
[b]="address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type \\((.*?) invalid\\)",
[d]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same"},
[e]=a,
[k]={{s,7633,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  default:\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_pointer_size) << FirstArg->getType() << FirstArg->getSourceRange();"}}
[d]=p,
[c]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same"},
[k]={{t,7633,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  default:\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_pointer_size) << FirstArg->getType() << FirstArg->getSourceRange();"}}
},
},
["err_atomic_exclusive_builtin_pointer_size"]={
["err_atomic_exclusive_builtin_pointer_size"]={
[f]="address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (A invalid)",
[h]="address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type \\((.*?) invalid\\)",
[b]="address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type \\((.*?) invalid\\)",
[d]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations."},
[e]=a,
[k]={{s,3224,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // But ARM doesn\'t have instructions to deal with 128-bit versions.\n  if (Context.getTypeSize(ValType) > MaxWidth) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_exclusive_builtin_pointer_size) << PointerArg->getType() << PointerArg->getSourceRange();"}}
[d]=p,
[c]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations."},
[k]={{t,3224,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // But ARM doesn\'t have instructions to deal with 128-bit versions.\n  if (Context.getTypeSize(ValType) > MaxWidth) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_exclusive_builtin_pointer_size) << PointerArg->getType() << PointerArg->getSourceRange();"}},
[o]={
["clang/test/Sema/builtins-arm-exclusive.c"]={"clang/test/Sema/builtins-arm-exclusive.c:24:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'const volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:51:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:75:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'const volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:102:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'volatile __int128 *\' invalid)"}
}
},
},
["err_atomic_load_store_uses_lib"]={
["err_atomic_load_store_uses_lib"]={
[f]="atomic ... requires runtime support that is not available for this target",
[h]="atomic ... requires runtime support that is not available for this target",
[c]=l,
[j]=n,
[e]=n,
[g]="atomic %select{load|store}0 requires runtime support that is not available for this target",
[i]=m,
[i]=m,
[j]="atomic (?:load|store) requires runtime support that is not available for this target",
[b]="atomic %select{load|store}0 requires runtime support that is not available for this target",
[b]=a,
[g]=l,
[h]=o,
[f]="atomic (?:load|store) requires runtime support that is not available for this target",
[d]={"615de765abde",1369762659,"Patch to issue error when target of MacOS and iOS "},
[e]=a,
[k]={{s,7452,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__c11_atomic_store || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load || Op == AtomicExpr::AO__opencl_atomic_store || Op == AtomicExpr::AO__hip_atomic_store) && Context.AtomicUsesUnsupportedLibcall(AE))\n    Diag(AE->getBeginLoc(), diag::err_atomic_load_store_uses_lib) << ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load) ? 0 : 1);"}}
[d]=p,
[c]={"615de765abde",1369762659,"Patch to issue error when target of MacOS and iOS "},
[k]={{t,7452,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__c11_atomic_store || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load || Op == AtomicExpr::AO__opencl_atomic_store || Op == AtomicExpr::AO__hip_atomic_store) && Context.AtomicUsesUnsupportedLibcall(AE))\n    Diag(AE->getBeginLoc(), diag::err_atomic_load_store_uses_lib) << ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load) ? 0 : 1);"}},
[o]={
["clang/test/Sema/atomic-requires-library-error.c"]={"clang/test/Sema/atomic-requires-library-error.c:17:3: error: atomic store requires runtime support that is not available for this target","clang/test/Sema/atomic-requires-library-error.c:26:18: error: atomic load requires runtime support that is not available for this target"}
}
},
},
["err_atomic_op_has_invalid_synch_scope"]={
["err_atomic_op_has_invalid_synch_scope"]={
[h]="synchronization scope argument to atomic operation is invalid",
[j]=n,
[i]=m,
[b]="synchronization scope argument to atomic operation is invalid",
[g]=l,
[f]="synchronization scope argument to atomic operation is invalid",
[f]="synchronization scope argument to atomic operation is invalid",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="synchronization scope argument to atomic operation is invalid",
[c]={"39195062c20c",1501870591,"Add OpenCL 2.0 atomic builtin functions as Clang builtin"},
[i]=m,
[k]={{t,7436,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (auto ScopeModel = AtomicExpr::getScopeModel(Op)) {\n    if (std::optional<llvm::APSInt> Result = Scope->getIntegerConstantExpr(Context)) {\n      if (!ScopeModel->isValid(Result->getZExtValue()))\n        Diag(Scope->getBeginLoc(), diag::err_atomic_op_has_invalid_synch_scope) << Scope->getSourceRange();"}},
[j]="synchronization scope argument to atomic operation is invalid",
[o]={
[b]=a,
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:9:36: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:15:51: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:34:34: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:40:49: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:68:62: error: synchronization scope argument to atomic operation is invalid"}
[h]=o,
}
[d]={"39195062c20c",1501870591,"Add OpenCL 2.0 atomic builtin functions as Clang builtin"},
[k]={{s,7436,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (auto ScopeModel = AtomicExpr::getScopeModel(Op)) {\n    if (std::optional<llvm::APSInt> Result = Scope->getIntegerConstantExpr(Context)) {\n      if (!ScopeModel->isValid(Result->getZExtValue()))\n        Diag(Scope->getBeginLoc(), diag::err_atomic_op_has_invalid_synch_scope) << Scope->getSourceRange();"}}
},
},
["err_atomic_op_needs_atomic"]={
["err_atomic_op_needs_atomic"]={
[f]="address argument to atomic operation must be a pointer to _Atomic type (A invalid)",
[h]="address argument to atomic operation must be a pointer to _Atomic type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to _Atomic type (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to _Atomic type \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to _Atomic type (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to _Atomic type \\((.*?) invalid\\)",
[d]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free)."},
[e]=a,
[k]={{s,7163,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (IsC11) {\n    if (!AtomTy->isAtomicType()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic) << Ptr->getType() << Ptr->getSourceRange();"}}
[d]=p,
[c]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free)."},
[k]={{t,7163,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (IsC11) {\n    if (!AtomTy->isAtomicType()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic) << Ptr->getType() << Ptr->getSourceRange();"}},
[o]={
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:27:3: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)","clang/test/SemaOpenCL/atomic-ops.cl:33:3: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)","clang/test/SemaOpenCL/atomic-ops.cl:52:20: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)"}
}
},
},
["err_atomic_op_needs_atomic_int"]={
["err_atomic_op_needs_atomic_int"]={
[f]="address argument to atomic operation must be a pointer to ...integer (A invalid)",
[h]="address argument to atomic operation must be a pointer to ...integer (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to %select{|atomic }0integer (%1 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to (?:|atomic )integer \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to %select{|atomic }0integer (%1 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to (?:|atomic )integer \\((.*?) invalid\\)",
[d]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[e]=a,
[k]={{s,7207,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}}
[d]=p,
[c]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[k]={{t,7207,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[o]={
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:60:3: error: address argument to atomic operation must be a pointer to atomic integer (\'__generic atomic_float *\' (aka \'__generic _Atomic(float) *\') invalid)"}
}
},
},
["err_atomic_op_needs_atomic_int_or_fp"]={
["err_atomic_op_needs_atomic_int_or_fp"]={
[f]="address argument to atomic operation must be a pointer to ...integer or supported floating point type (A invalid)",
[h]="address argument to atomic operation must be a pointer to ...integer or supported floating point type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to %select{|atomic }0integer or supported floating point type (%1 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to (?:|atomic )integer or supported floating point type \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to %select{|atomic }0integer or supported floating point type (%1 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to (?:|atomic )integer or supported floating point type \\((.*?) invalid\\)",
[d]={N,1625925174,M},
[e]=a,
[k]={{s,7206,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{t,7206,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[o]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:203:3: error: address argument to atomic operation must be a pointer to atomic integer or supported floating point type (\'_Atomic(int *) *\' invalid)","clang/test/Sema/atomic-ops.c:208:3: error: address argument to atomic operation must be a pointer to atomic integer or supported floating point type (\'_Atomic(int *) *\' invalid)","clang/test/Sema/atomic-ops.c:222:3: error: address argument to atomic operation must be a pointer to integer or supported floating point type (\'int **\' invalid)"}
}
},
},
["err_atomic_op_needs_atomic_int_or_ptr"]={
["err_atomic_op_needs_atomic_int_or_ptr"]={
[f]="address argument to atomic operation must be a pointer to ...integer or pointer (A invalid)",
[h]="address argument to atomic operation must be a pointer to ...integer or pointer (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to %select{|atomic }0integer or pointer (%1 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to (?:|atomic )integer or pointer \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to %select{|atomic }0integer or pointer (%1 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to (?:|atomic )integer or pointer \\((.*?) invalid\\)",
[d]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free)."},
[e]=a,
[k]={{s,7220,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n  } else if (IsN && !ValType->isIntegerType() && !ValType->isPointerType()) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic_int_or_ptr) << IsC11 << Ptr->getType() << Ptr->getSourceRange();"}}
[d]=p,
[c]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free)."},
[k]={{t,7220,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n  } else if (IsN && !ValType->isIntegerType() && !ValType->isPointerType()) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic_int_or_ptr) << IsC11 << Ptr->getType() << Ptr->getSourceRange();"}},
[o]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:152:20: error: address argument to atomic operation must be a pointer to integer or pointer (\'double *\' invalid)","clang/test/Sema/atomic-ops.c:153:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'struct S *\' invalid)","clang/test/Sema/atomic-ops.c:176:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:177:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'struct S *\' invalid)","clang/test/Sema/atomic-ops.c:187:20: error: address argument to atomic operation must be a pointer to integer or pointer (\'_Atomic(int) *\' invalid)"}
}
},
},
["err_atomic_op_needs_atomic_int_ptr_or_fp"]={
["err_atomic_op_needs_atomic_int_ptr_or_fp"]={
[f]="address argument to atomic operation must be a pointer to ...integer, pointer or supported floating point type (A invalid)",
[h]="address argument to atomic operation must be a pointer to ...integer, pointer or supported floating point type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to %select{|atomic }0integer, pointer or supported floating point type (%1 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to (?:|atomic )integer, pointer or supported floating point type \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to %select{|atomic }0integer, pointer or supported floating point type (%1 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to (?:|atomic )integer, pointer or supported floating point type \\((.*?) invalid\\)",
[d]={fb,1590001902,eb},
[e]=a,
[k]={{s,7205,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}}
[d]=p,
[c]={fb,1590001902,gb},
[k]={{t,7205,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[o]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:213:3: error: address argument to atomic operation must be a pointer to integer, pointer or supported floating point type (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:217:3: error: address argument to atomic operation must be a pointer to integer, pointer or supported floating point type (\'struct S *\' invalid)"}
}
},
},
["err_atomic_op_needs_non_const_atomic"]={
["err_atomic_op_needs_non_const_atomic"]={
[f]="address argument to atomic operation must be a pointer to non-... _Atomic type (A invalid)",
[h]="address argument to atomic operation must be a pointer to non-... _Atomic type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to non-%select{const|constant}0 _Atomic type (%1 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to non\\-(?:const|constant) _Atomic type \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to non-%select{const|constant}0 _Atomic type (%1 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to non\\-(?:const|constant) _Atomic type \\((.*?) invalid\\)",
[d]={"e00921a0a448",1347689398,"const _Atomic(T) is not an atomic type, so do not allow it as the type \'A\' in"},
[e]=a,
[k]={{s,7169,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (IsC11) {\n    if ((Form != Load && Form != LoadCopy && AtomTy.isConstQualified()) || AtomTy.getAddressSpace() == LangAS::opencl_constant) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_atomic) << (AtomTy.isConstQualified() ? 0 : 1) << Ptr->getType() << Ptr->getSourceRange();"}}
[d]=p,
[c]={"e00921a0a448",1347689398,"const _Atomic(T) is not an atomic type, so do not allow it as the type \'A\' in"},
[k]={{t,7169,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (IsC11) {\n    if ((Form != Load && Form != LoadCopy && AtomTy.isConstQualified()) || AtomTy.getAddressSpace() == LangAS::opencl_constant) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_atomic) << (AtomTy.isConstQualified() ? 0 : 1) << Ptr->getType() << Ptr->getSourceRange();"}},
[o]={
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:28:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:35:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:39:3: error: address argument to atomic operation must be a pointer to non-constant _Atomic type (\'__constant atomic_int *\' (aka \'__constant _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:45:3: error: address argument to atomic operation must be a pointer to non-constant _Atomic type (\'__constant atomic_int *\' (aka \'__constant _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:82:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:83:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)"}
}
},
},
["err_atomic_op_needs_non_const_pointer"]={
["err_atomic_op_needs_non_const_pointer"]={
[f]="address argument to atomic operation must be a pointer to non-const type (A invalid)",
[h]="address argument to atomic operation must be a pointer to non-const type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to non-const type (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to non\\-const type \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to non-const type (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to non\\-const type \\((.*?) invalid\\)",
[d]={"a3a7c56143f4",1443917462,"Diagnose const atomics in __atomic builtins."},
[e]=a,
[k]={{s,7177,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (IsC11) {\n  } else if (Form != Load && Form != LoadCopy) {\n    if (ValType.isConstQualified()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_pointer) << Ptr->getType() << Ptr->getSourceRange();"}}
[d]=p,
[c]={"a3a7c56143f4",1443917462,"Diagnose const atomics in __atomic builtins."},
[k]={{t,7177,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (IsC11) {\n  } else if (Form != Load && Form != LoadCopy) {\n    if (ValType.isConstQualified()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_pointer) << Ptr->getType() << Ptr->getSourceRange();"}},
[o]={
[pb]={"clang/test/Sema/builtins.c:281:3: error: address argument to atomic operation must be a pointer to non-const type (\'const int *\' invalid)"}
}
},
},
["err_atomic_op_needs_trivial_copy"]={
["err_atomic_op_needs_trivial_copy"]={
[f]="address argument to atomic operation must be a pointer to a trivially-copyable type (A invalid)",
[h]="address argument to atomic operation must be a pointer to a trivially-copyable type (A invalid)",
[c]=l,
[j]=n,
[e]=n,
[g]="address argument to atomic operation must be a pointer to a trivially-copyable type (%0 invalid)",
[i]=m,
[i]=m,
[j]="address argument to atomic operation must be a pointer to a trivially\\-copyable type \\((.*?) invalid\\)",
[b]="address argument to atomic operation must be a pointer to a trivially-copyable type (%0 invalid)",
[b]=a,
[g]=l,
[h]=o,
[f]="address argument to atomic operation must be a pointer to a trivially\\-copyable type \\((.*?) invalid\\)",
[d]={"feea883de4e5",1334207297,"Implement support for 18 of the GNU-compatible __atomic builtins."},
[e]=a,
[k]={{s,7231,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) && !AtomTy->isScalarType()) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_trivial_copy) << Ptr->getType() << Ptr->getSourceRange();"}}
[d]=p,
[c]={"feea883de4e5",1334207297,"Implement support for 18 of the GNU-compatible __atomic builtins."},
[k]={{t,7231,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) && !AtomTy->isScalarType()) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_trivial_copy) << Ptr->getType() << Ptr->getSourceRange();"}},
[o]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:156:3: error: address argument to atomic operation must be a pointer to a trivially-copyable type (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:183:3: error: address argument to atomic operation must be a pointer to a trivially-copyable type (\'_Atomic(int) *\' invalid)"}
}
},
},
["err_atomic_property_nontrivial_assign_op"]={
["err_atomic_property_nontrivial_assign_op"]={
[f]="atomic property of reference type A cannot have non-trivial assignment operator",
[h]="atomic property of reference type A cannot have non-trivial assignment operator",
[c]=l,
[j]=n,
[e]=n,
[g]="atomic property of reference type %0 cannot have non-trivial assignment operator",
[i]=m,
[i]=m,
[j]="atomic property of reference type (.*?) cannot have non\\-trivial assignment operator",
[b]="atomic property of reference type %0 cannot have non-trivial assignment operator",
[b]=a,
[g]=l,
[h]=o,
[f]="atomic property of reference type (.*?) cannot have non\\-trivial assignment operator",
[d]={"a08a74705bb0",1326155821,"objc++: patch for IRgen for atomic properties of"},
[e]=a,
[k]={{P,1547,"/// 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  if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {\n    if (getLangOpts().CPlusPlus && Synthesize && !CompleteTypeErr && Ivar->getType()->isRecordType()) {\n      if (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_atomic) {\n        if (const CXXOperatorCallExpr *CXXCE = dyn_cast_or_null<CXXOperatorCallExpr>(callExpr))\n          if (const FunctionDecl *FuncDecl = CXXCE->getDirectCallee())\n            if (!FuncDecl->isTrivial())\n              if (property->getType()->isReferenceType()) {\n                Diag(PropertyDiagLoc, diag::err_atomic_property_nontrivial_assign_op) << property->getType();"}}
[d]=p,
[c]={"a08a74705bb0",1326155821,"objc++: patch for IRgen for atomic properties of"},
[k]={{R,1547,"/// 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  if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {\n    if (getLangOpts().CPlusPlus && Synthesize && !CompleteTypeErr && Ivar->getType()->isRecordType()) {\n      if (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_atomic) {\n        if (const CXXOperatorCallExpr *CXXCE = dyn_cast_or_null<CXXOperatorCallExpr>(callExpr))\n          if (const FunctionDecl *FuncDecl = CXXCE->getDirectCallee())\n            if (!FuncDecl->isTrivial())\n              if (property->getType()->isReferenceType()) {\n                Diag(PropertyDiagLoc, diag::err_atomic_property_nontrivial_assign_op) << property->getType();"}},
[o]={
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:70:13: error: atomic property of reference type \'const TCPPObject &\' cannot have non-trivial assignment operator","clang/test/SemaObjCXX/property-synthesis-error.mm:102:1: error: atomic property of reference type \'TemplateClass2<int &> &\' cannot have non-trivial assignment operator"}
}
},
},
["err_atomic_specifier_bad_type"]={
["err_atomic_specifier_bad_type"]={
[f]="_Atomic cannot be applied to ...type A ...",
[h]="_Atomic cannot be applied to ...type A ...",
[c]=l,
[j]=n,
[e]=n,
[g]="_Atomic cannot be applied to %select{incomplete |array |function |reference |atomic |qualified |sizeless ||integer }0type %1 %select{|||||||which is not trivially copyable|}0",
[i]=m,
[i]=m,
[j]="_Atomic cannot be applied to (?:incomplete |array |function |reference |atomic |qualified |sizeless ||integer )type (.*?) (?:|||||||which is not trivially copyable|)",
[b]="_Atomic cannot be applied to %select{incomplete |array |function |reference |atomic |qualified |sizeless ||integer }0type %1 %select{|||||||which is not trivially copyable|}0",
[b]=a,
[g]=l,
[h]=o,
[f]="_Atomic cannot be applied to (?:incomplete |array |function |reference |atomic |qualified |sizeless ||integer )type (.*?) (?:|||||||which is not trivially copyable|)",
[d]={"0dfb889575a6",1317942033,"Support for C1x _Atomic specifier (see testcase).  This is primarily being committed at the moment t..."},
[e]=a,
[k]={{r,9762,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    if (RequireCompleteType(Loc, T, diag::err_atomic_specifier_bad_type, 0))"},{r,9785,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    if (DisallowedKind != -1) {\n      Diag(Loc, diag::err_atomic_specifier_bad_type) << DisallowedKind << T;"}}
[d]=p,
[c]={"0dfb889575a6",1317942033,"Support for C1x _Atomic specifier (see testcase).  This is primarily being committed at the moment t..."},
[k]={{s,9762,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    if (RequireCompleteType(Loc, T, diag::err_atomic_specifier_bad_type, 0))"},{s,9785,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    if (DisallowedKind != -1) {\n      Diag(Loc, diag::err_atomic_specifier_bad_type) << DisallowedKind << T;"}},
[o]={
["clang/test/Sema/atomic-type.c"]={"clang/test/Sema/atomic-type.c:18:1: error: _Atomic cannot be applied to function type \'int (void)\' ","clang/test/Sema/atomic-type.c:19:1: error: _Atomic cannot be applied to incomplete type \'struct ErrorS\' ","clang/test/Sema/atomic-type.c:20:1: error: _Atomic cannot be applied to array type \'int[10]\' ","clang/test/Sema/atomic-type.c:21:1: error: _Atomic cannot be applied to qualified type \'const int\' ","clang/test/Sema/atomic-type.c:22:1: error: _Atomic cannot be applied to atomic type \'_Atomic(int)\' "}
}
},
},
["err_atprotocol_protocol"]={
["err_atprotocol_protocol"]={
[f]="@protocol is using a forward protocol declaration of A",
[h]="@protocol is using a forward protocol declaration of A",
[c]=l,
[j]=n,
[e]=n,
[g]="@protocol is using a forward protocol declaration of %0",
[i]=m,
[i]=m,
[j]="@protocol is using a forward protocol declaration of (.*?)",
[b]="@protocol is using a forward protocol declaration of %0",
[b]=a,
[g]=l,
[h]=o,
[f]="@protocol is using a forward protocol declaration of (.*?)",
[d]={"b111da14ada1",1534544288,"[ObjC] Error out when using forward-declared protocol in a @protocol"},
[e]=a,
[k]={{G,1400,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  if (!PDecl->hasDefinition()) {\n    Diag(ProtoLoc, diag::err_atprotocol_protocol) << PDecl;"}}
[d]=p,
[c]={"b111da14ada1",1534544288,"[ObjC] Error out when using forward-declared protocol in a @protocol"},
[k]={{F,1400,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  if (!PDecl->hasDefinition()) {\n    Diag(ProtoLoc, diag::err_atprotocol_protocol) << PDecl;"}},
[o]={
["clang/test/SemaObjC/protocol-expr-neg-1.m"]={"clang/test/SemaObjC/protocol-expr-neg-1.m:15:29: error: @protocol is using a forward protocol declaration of \'fproto\'","clang/test/SemaObjC/protocol-expr-neg-1.m:29:35: error: @protocol is using a forward protocol declaration of \'TestProtocol\'","clang/test/SemaObjC/protocol-expr-neg-1.m:33:35: error: @protocol is using a forward protocol declaration of \'SuperProtocol\'"}
}
},
},
["err_attr_cond_never_constant_expr"]={
["err_attr_cond_never_constant_expr"]={
[f]="A attribute expression never produces a constant expression",
[h]="A attribute expression never produces a constant expression",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute expression never produces a constant expression",
[i]=m,
[i]=m,
[j]="(.*?) attribute expression never produces a constant expression",
[b]="%0 attribute expression never produces a constant expression",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute expression never produces a constant expression",
[d]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[e]=a,
[k]={{p,948,"static bool checkFunctionConditionAttr(Sema &S, Decl *D, const ParsedAttr &AL, Expr *&Cond, StringRef &Msg) {\n  if (isa<FunctionDecl>(D) && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, cast<FunctionDecl>(D), Diags)) {\n    S.Diag(AL.getLoc(), diag::err_attr_cond_never_constant_expr) << AL;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",253,"static Expr *instantiateDependentFunctionAttrCondition(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const Attr *A, Expr *OldCond, const Decl *Tmpl, FunctionDecl *New) {\n  if (OldCond->isValueDependent() && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, New, Diags)) {\n    S.Diag(A->getLocation(), diag::err_attr_cond_never_constant_expr) << A;"}}
[d]=p,
[c]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[k]={{q,948,"static bool checkFunctionConditionAttr(Sema &S, Decl *D, const ParsedAttr &AL, Expr *&Cond, StringRef &Msg) {\n  if (isa<FunctionDecl>(D) && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, cast<FunctionDecl>(D), Diags)) {\n    S.Diag(AL.getLoc(), diag::err_attr_cond_never_constant_expr) << AL;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",253,"static Expr *instantiateDependentFunctionAttrCondition(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const Attr *A, Expr *OldCond, const Decl *Tmpl, FunctionDecl *New) {\n  if (OldCond->isValueDependent() && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, New, Diags)) {\n    S.Diag(A->getLocation(), diag::err_attr_cond_never_constant_expr) << A;"}},
[o]={
["clang/test/Sema/diagnose_if.c"]={"clang/test/Sema/diagnose_if.c:16:27: error: \'diagnose_if\' attribute expression never produces a constant expression","clang/test/Sema/diagnose_if.c:17:27: error: \'diagnose_if\' attribute expression never produces a constant expression"}
}
},
},
["err_attr_objc_ownership_redundant"]={
["err_attr_objc_ownership_redundant"]={
[f]="the type A is already explicitly ownership-qualified",
[h]="the type A is already explicitly ownership-qualified",
[c]=l,
[j]=n,
[e]=n,
[g]="the type %0 is already explicitly ownership-qualified",
[i]=m,
[i]=m,
[j]="the type (.*?) is already explicitly ownership\\-qualified",
[b]="the type %0 is already explicitly ownership-qualified",
[b]=a,
[g]=l,
[h]=o,
[f]="the type (.*?) is already explicitly ownership\\-qualified",
[d]={Z,1308874139,Y},
[e]=a,
[k]={{r,6973,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Check for redundant/conflicting ownership qualifiers.\n  if (Qualifiers::ObjCLifetime previousLifetime = type.getQualifiers().getObjCLifetime()) {\n    // If it\'s written directly, that\'s an error.\n    if (S.Context.hasDirectOwnershipQualifier(type)) {\n      S.Diag(AttrLoc, diag::err_attr_objc_ownership_redundant) << type;"}}
[d]=p,
[c]={ab,1308874139,bb},
[k]={{s,6973,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Check for redundant/conflicting ownership qualifiers.\n  if (Qualifiers::ObjCLifetime previousLifetime = type.getQualifiers().getObjCLifetime()) {\n    // If it\'s written directly, that\'s an error.\n    if (S.Context.hasDirectOwnershipQualifier(type)) {\n      S.Diag(AttrLoc, diag::err_attr_objc_ownership_redundant) << type;"}},
[o]={
["clang/test/SemaObjCXX/arc-objc-lifetime.mm"]={"clang/test/SemaObjCXX/arc-objc-lifetime.mm:36:1: error: the type \'I *__strong\' is already explicitly ownership-qualified","clang/test/SemaObjCXX/arc-objc-lifetime.mm:37:14: error: the type \'I *__strong\' is already explicitly ownership-qualified","clang/test/SemaObjCXX/arc-objc-lifetime.mm:38:14: error: the type \'I *__strong\' is already explicitly ownership-qualified"}
}
},
},
["err_attr_swift_error_no_error_parameter"]={
["err_attr_swift_error_no_error_parameter"]={
[f]="A attribute can only be applied to a ... with an error parameter",
[h]="A attribute can only be applied to a ... with an error parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute can only be applied to a %select{function|method}1 with an error parameter",
[i]=m,
[i]=m,
[j]="(.*?) attribute can only be applied to a (?:function|method) with an error parameter",
[b]="%0 attribute can only be applied to a %select{function|method}1 with an error parameter",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute can only be applied to a (?:function|method) with an error parameter",
[d]={T,1582847864,U},
[e]=a,
[k]={{p,6390,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasErrorParameter = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_no_error_parameter) << AL << isa<ObjCMethodDecl>(D);"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{q,6390,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasErrorParameter = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_no_error_parameter) << AL << isa<ObjCMethodDecl>(D);"}},
[o]={
["clang/test/SemaObjC/attr-swift-error.m"]={"clang/test/SemaObjC/attr-swift-error.m:46:35: error: \'__swift_error__\' attribute can only be applied to a method with an error parameter","clang/test/SemaObjC/attr-swift-error.m:48:35: error: \'__swift_error__\' attribute can only be applied to a method with an error parameter","clang/test/SemaObjC/attr-swift-error.m:50:35: error: \'__swift_error__\' attribute can only be applied to a method with an error parameter","clang/test/SemaObjC/attr-swift-error.m:52:35: error: \'__swift_error__\' attribute can only be applied to a method with an error parameter","clang/test/SemaObjC/attr-swift-error.m:83:38: error: \'__swift_error__\' attribute can only be applied to a function with an error parameter","clang/test/SemaObjC/attr-swift-error.m:85:38: error: \'__swift_error__\' attribute can only be applied to a function with an error parameter","clang/test/SemaObjC/attr-swift-error.m:87:38: error: \'__swift_error__\' attribute can only be applied to a function with an error parameter","clang/test/SemaObjC/attr-swift-error.m:89:38: error: \'__swift_error__\' attribute can only be applied to a function with an error parameter"}
}
},
},
["err_attr_swift_error_return_type"]={
["err_attr_swift_error_return_type"]={
[f]="A attribute with \'B\' convention can only be applied to a ... returning ...",
[h]="A attribute with \'B\' convention can only be applied to a ... returning ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute with \'%1\' convention can only be applied to a %select{function|method}2 returning %select{an integral type|a pointer}3",
[i]=m,
[i]=m,
[j]="(.*?) attribute with \'(.*?)\' convention can only be applied to a (?:function|method) returning (?:an integral type|a pointer)",
[b]="%0 attribute with \'%1\' convention can only be applied to a %select{function|method}2 returning %select{an integral type|a pointer}3",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute with \'(.*?)\' convention can only be applied to a (?:function|method) returning (?:an integral type|a pointer)",
[d]={T,1582847864,U},
[e]=a,
[k]={{p,6403,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasPointerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*pointer*/ 1;"},{p,6414,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasIntegerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*integral*/ 0;"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{q,6403,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasPointerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*pointer*/ 1;"},{q,6414,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasIntegerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*integral*/ 0;"}},
[o]={
["clang/test/SemaObjC/attr-swift-error.m"]={"clang/test/SemaObjC/attr-swift-error.m:23:45: error: \'__swift_error__\' attribute with \'null_result\' convention can only be applied to a method returning a pointer","clang/test/SemaObjC/attr-swift-error.m:34:51: error: \'__swift_error__\' attribute with \'nonzero_result\' convention can only be applied to a method returning an integral type","clang/test/SemaObjC/attr-swift-error.m:39:51: error: \'__swift_error__\' attribute with \'zero_result\' convention can only be applied to a method returning an integral type","clang/test/SemaObjC/attr-swift-error.m:58:45: error: \'__swift_error__\' attribute with \'null_result\' convention can only be applied to a function returning a pointer","clang/test/SemaObjC/attr-swift-error.m:77:46: error: \'__swift_error__\' attribute with \'nonzero_result\' convention can only be applied to a function returning an integral type","clang/test/SemaObjC/attr-swift-error.m:79:46: error: \'__swift_error__\' attribute with \'zero_result\' convention can only be applied to a function returning an integral type"}
}
},
},
["err_attr_tlsmodel_arg"]={
["err_attr_tlsmodel_arg"]={
[f]="tls_model must be \"global-dynamic\", \"local-dynamic\", \"initial-exec\" or \"local-exec\"",
[h]="tls_model must be \"global-dynamic\", \"local-dynamic\", \"initial-exec\" or \"local-exec\"",
[c]=l,
[j]=n,
[e]=n,
[g]="tls_model must be \"global-dynamic\", \"local-dynamic\", \"initial-exec\" or \"local-exec\"",
[i]=m,
[i]=m,
[j]="tls_model must be \"global\\-dynamic\", \"local\\-dynamic\", \"initial\\-exec\" or \"local\\-exec\"",
[b]="tls_model must be \"global-dynamic\", \"local-dynamic\", \"initial-exec\" or \"local-exec\"",
[b]=a,
[g]=l,
[h]=o,
[f]="tls_model must be \"global\\-dynamic\", \"local\\-dynamic\", \"initial\\-exec\" or \"local\\-exec\"",
[d]={"d3b01bc7c673",1340452306,"Support the tls_model attribute (PR9788)"},
[e]=a,
[k]={{p,2038,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check that the value.\n  if (Model != \"global-dynamic\" && Model != \"local-dynamic\" && Model != \"initial-exec\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_attr_tlsmodel_arg);"}}
[d]=p,
[c]={"d3b01bc7c673",1340452306,"Support the tls_model attribute (PR9788)"},
[k]={{q,2038,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check that the value.\n  if (Model != \"global-dynamic\" && Model != \"local-dynamic\" && Model != \"initial-exec\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_attr_tlsmodel_arg);"}},
[o]={
["clang/test/Sema/attr-tls_model.c"]={"clang/test/Sema/attr-tls_model.c:14:46: error: tls_model must be \"global-dynamic\", \"local-dynamic\", \"initial-exec\" or \"local-exec\""}
}
},
},
["err_attribute_address_function_type"]={
["err_attribute_address_function_type"]={
[h]="function type may not be qualified with an address space",
[j]=n,
[i]=m,
[b]="function type may not be qualified with an address space",
[g]=l,
[f]="function type may not be qualified with an address space",
[f]="function type may not be qualified with an address space",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="function type may not be qualified with an address space",
[c]={"8f5f520653f5",1311798605,"Forbid address-space-qualified function types, per TR 18037"},
[i]=m,
[k]={{s,6827,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"A function type shall not be\n  // qualified by an address-space qualifier.\"\n  if (Type->isFunctionType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_address_function_type);"}},
[j]="function type may not be qualified with an address space",
[o]={
[b]=a,
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:50:1: error: function type may not be qualified with an address space","clang/test/Sema/address_spaces.c:51:9: error: function type may not be qualified with an address space"}
[h]=o,
}
[d]={"8f5f520653f5",1311798605,"Forbid address-space-qualified function types, per TR 18037"},
[k]={{r,6827,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"A function type shall not be\n  // qualified by an address-space qualifier.\"\n  if (Type->isFunctionType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_address_function_type);"}}
},
},
["err_attribute_address_multiple_qualifiers"]={
["err_attribute_address_multiple_qualifiers"]={
[h]="multiple address spaces specified for type",
[j]=n,
[i]=m,
[b]="multiple address spaces specified for type",
[g]=l,
[f]="multiple address spaces specified for type",
[f]="multiple address spaces specified for type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="multiple address spaces specified for type",
[c]={C,1236199783,B},
[i]=m,
[k]={{s,4624,"// Diagnose whether this is a case with the multiple addr spaces.\n// Returns true if this is an invalid case.\n// ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"No type shall be qualified\n// by qualifiers for two or more different address spaces.\"\nstatic bool DiagnoseMultipleAddrSpaceAttributes(Sema &S, LangAS ASOld, LangAS ASNew, SourceLocation AttrLoc) {\n  if (ASOld != LangAS::Default) {\n    if (ASOld != ASNew) {\n      S.Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"},{s,6774,"/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression\n/// is uninstantiated. If instantiated it will apply the appropriate address\n/// space to the type. This function allows dependent template variables to be\n/// used in conjunction with the address_space attribute\nQualType Sema::BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace, SourceLocation AttrLoc) {\n  // A check with similar intentions as checking if a type already has an\n  // address space except for on a dependent types, basically if the\n  // current type is already a DependentAddressSpaceType then its already\n  // lined up to have another address space on it and we can\'t have\n  // multiple address spaces on the one pointer indirection\n  if (T->getAs<DependentAddressSpaceType>()) {\n    Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"}},
[j]="multiple address spaces specified for type",
[o]={
[b]=a,
["clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.clcpp:6:24: error: multiple address spaces specified for type"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{r,4624,"// Diagnose whether this is a case with the multiple addr spaces.\n// Returns true if this is an invalid case.\n// ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"No type shall be qualified\n// by qualifiers for two or more different address spaces.\"\nstatic bool DiagnoseMultipleAddrSpaceAttributes(Sema &S, LangAS ASOld, LangAS ASNew, SourceLocation AttrLoc) {\n  if (ASOld != LangAS::Default) {\n    if (ASOld != ASNew) {\n      S.Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"},{r,6774,"/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression\n/// is uninstantiated. If instantiated it will apply the appropriate address\n/// space to the type. This function allows dependent template variables to be\n/// used in conjunction with the address_space attribute\nQualType Sema::BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace, SourceLocation AttrLoc) {\n  // A check with similar intentions as checking if a type already has an\n  // address space except for on a dependent types, basically if the\n  // current type is already a DependentAddressSpaceType then its already\n  // lined up to have another address space on it and we can\'t have\n  // multiple address spaces on the one pointer indirection\n  if (T->getAs<DependentAddressSpaceType>()) {\n    Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"}}
},
},
["err_attribute_address_space_negative"]={
["err_attribute_address_space_negative"]={
[h]="address space is negative",
[j]=n,
[i]=m,
[b]="address space is negative",
[g]=l,
[f]="address space is negative",
[f]="address space is negative",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="address space is negative",
[c]={"8945266f3d02",1248763938,"Bounds checking for address spaces."},
[i]=m,
[k]={{s,6727,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // Bounds checking.\n    if (addrSpace.isSigned()) {\n      if (addrSpace.isNegative()) {\n        S.Diag(AttrLoc, diag::err_attribute_address_space_negative) << AddrSpace->getSourceRange();"}},
[j]="address space is negative",
[o]={
[b]=a,
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:23:18: error: address space is negative"}
[h]=o,
}
[d]={"8945266f3d02",1248763938,"Bounds checking for address spaces."},
[k]={{r,6727,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // Bounds checking.\n    if (addrSpace.isSigned()) {\n      if (addrSpace.isNegative()) {\n        S.Diag(AttrLoc, diag::err_attribute_address_space_negative) << AddrSpace->getSourceRange();"}}
},
},
["err_attribute_address_space_too_high"]={
["err_attribute_address_space_too_high"]={
[f]="address space is larger than the maximum supported (A)",
[h]="address space is larger than the maximum supported (A)",
[c]=l,
[j]=n,
[e]=n,
[g]="address space is larger than the maximum supported (%0)",
[i]=m,
[i]=m,
[j]="address space is larger than the maximum supported \\((.*?)\\)",
[b]="address space is larger than the maximum supported (%0)",
[b]=a,
[g]=l,
[h]=o,
[f]="address space is larger than the maximum supported \\((.*?)\\)",
[d]={"8945266f3d02",1248763938,"Bounds checking for address spaces."},
[e]=a,
[k]={{r,6739,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    if (addrSpace > max) {\n      S.Diag(AttrLoc, diag::err_attribute_address_space_too_high) << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();"}}
[d]=p,
[c]={"8945266f3d02",1248763938,"Bounds checking for address spaces."},
[k]={{s,6739,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    if (addrSpace > max) {\n      S.Diag(AttrLoc, diag::err_attribute_address_space_too_high) << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();"}},
[o]={
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:24:18: error: address space is larger than the maximum supported (8388586)","clang/test/Sema/address_spaces.c:25:18: error: address space is larger than the maximum supported (8388586)","clang/test/Sema/address_spaces.c:27:18: error: address space is larger than the maximum supported (8388586)"}
}
},
},
["err_attribute_aligned_too_great"]={
["err_attribute_aligned_too_great"]={
[f]="requested alignment must be A bytes or smaller",
[h]="requested alignment must be A bytes or smaller",
[c]=l,
[j]=n,
[e]=n,
[g]="requested alignment must be %0 bytes or smaller",
[i]=m,
[i]=m,
[j]="requested alignment must be (.*?) bytes or smaller",
[b]="requested alignment must be %0 bytes or smaller",
[b]=a,
[g]=l,
[h]=o,
[f]="requested alignment must be (.*?) bytes or smaller",
[d]={"abecae741cb7",1392237370,"Sema: Restrict alignment to 2**28."},
[e]=a,
[k]={{p,4481,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (Alignment > MaximumAlignment) {\n    Diag(AttrLoc, diag::err_attribute_aligned_too_great) << MaximumAlignment << E->getSourceRange();"}}
[d]=p,
[c]={"abecae741cb7",1392237370,"Sema: Restrict alignment to 2**28."},
[k]={{q,4481,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (Alignment > MaximumAlignment) {\n    Diag(AttrLoc, diag::err_attribute_aligned_too_great) << MaximumAlignment << E->getSourceRange();"}},
[o]={
["clang/test/Sema/attr-aligned.c"]={"clang/test/Sema/attr-aligned.c:4:22: error: requested alignment must be 4294967296 bytes or smaller","clang/test/Sema/attr-aligned.c:7:22: error: requested alignment must be 4294967296 bytes or smaller"}
}
},
},
["err_attribute_argument_invalid"]={
["err_attribute_argument_invalid"]={
[f]="A attribute argument is invalid: ...",
[h]="A attribute argument is invalid: ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute argument is invalid: %select{max must be 0 since min is 0|min must not be greater than max}1",
[i]=m,
[i]=m,
[j]="(.*?) attribute argument is invalid\\: (?:max must be 0 since min is 0|min must not be greater than max)",
[b]="%0 attribute argument is invalid: %select{max must be 0 since min is 0|min must not be greater than max}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute argument is invalid\\: (?:max must be 0 since min is 0|min must not be greater than max)",
[d]={"5b48d725a0bc",1474851777,"[AMDGPU] Expose flat work group size, register and wave control attributes"},
[e]=a,
[k]={{p,7853,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{p,7858,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  if (Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"},{p,7907,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{p,7912,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  if (Max != 0 && Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"}}
[d]=p,
[c]={"5b48d725a0bc",1474851777,"[AMDGPU] Expose flat work group size, register and wave control attributes"},
[k]={{q,7853,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{q,7858,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  if (Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"},{q,7907,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{q,7912,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  if (Max != 0 && Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"}},
[o]={
["clang/test/SemaOpenCL/amdgpu-attrs.cl"]={"clang/test/SemaOpenCL/amdgpu-attrs.cl:48:16: error: \'amdgpu_flat_work_group_size\' attribute argument is invalid: max must be 0 since min is 0","clang/test/SemaOpenCL/amdgpu-attrs.cl:49:16: error: \'amdgpu_waves_per_eu\' attribute argument is invalid: max must be 0 since min is 0","clang/test/SemaOpenCL/amdgpu-attrs.cl:51:16: error: \'amdgpu_flat_work_group_size\' attribute argument is invalid: min must not be greater than max","clang/test/SemaOpenCL/amdgpu-attrs.cl:52:16: error: \'amdgpu_waves_per_eu\' attribute argument is invalid: min must not be greater than max"}
}
},
},
["err_attribute_argument_is_zero"]={
["err_attribute_argument_is_zero"]={
[f]="A attribute must be greater than 0",
[h]="A attribute must be greater than 0",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute must be greater than 0",
[i]=m,
[i]=m,
[j]="(.*?) attribute must be greater than 0",
[b]="%0 attribute must be greater than 0",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute must be greater than 0",
[d]={"b1d23a8db36c",1400510498,"[OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0."},
[e]=a,
[k]={{p,3221,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 0; i < 3; ++i) {\n    if (WGSize[i] == 0) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"},{p,3244,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (SGSize == 0) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"}}
[d]=p,
[c]={"b1d23a8db36c",1400510498,"[OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0."},
[k]={{q,3221,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 0; i < 3; ++i) {\n    if (WGSize[i] == 0) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"},{q,3244,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (SGSize == 0) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"}},
[o]={
["clang/test/SemaOpenCL/invalid-kernel-attrs.cl"]={"clang/test/SemaOpenCL/invalid-kernel-attrs.cl:33:23: error: \'reqd_work_group_size\' attribute must be greater than 0","clang/test/SemaOpenCL/invalid-kernel-attrs.cl:34:23: error: \'reqd_work_group_size\' attribute must be greater than 0","clang/test/SemaOpenCL/invalid-kernel-attrs.cl:35:23: error: \'reqd_work_group_size\' attribute must be greater than 0","clang/test/SemaOpenCL/invalid-kernel-attrs.cl:38:23: error: \'intel_reqd_sub_group_size\' attribute must be greater than 0"}
}
},
},
["err_attribute_argument_n_type"]={
["err_attribute_argument_n_type"]={
[f]="A attribute requires parameter B to be ...",
[h]="A attribute requires parameter B to be ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute requires parameter %1 to be %select{int or bool|an integer constant|a string|an identifier|a constant expression|a builtin function}2",
[i]=m,
[i]=m,
[j]="(.*?) attribute requires parameter (.*?) to be (?:int or bool|an integer constant|a string|an identifier|a constant expression|a builtin function)",
[b]="%0 attribute requires parameter %1 to be %select{int or bool|an integer constant|a string|an identifier|a constant expression|a builtin function}2",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute requires parameter (.*?) to be (?:int or bool|an integer constant|a string|an identifier|a constant expression|a builtin function)",
[d]={"29982275012f",1374588237,"Consolidate several attribute argument diagnostics into a single, selectable diagnostic.  This makes..."},
[e]=a,
[k]={{"clang/lib/Sema/SemaAttr.cpp",424,"bool Sema::ConstantFoldAttrArgs(const AttributeCommonInfo &CI, MutableArrayRef<Expr *> Args) {\n for (unsigned Idx = 0; Idx < Args.size(); Idx++) {\n    /// Result means the expression can be folded to a constant.\n    /// Note.empty() means the expression is a valid constant expression in the\n   /// current language mode.\n    if (!Result || !Notes.empty()) {\n     Diag(E->getBeginLoc(), diag::err_attribute_argument_n_type) << CI << (Idx + 1) << AANT_ArgumentConstantExpr;"},{p,225,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  if (Expr->isTypeDependent() || !(I = Expr->getIntegerConstantExpr(S.Context))) {\n    if (Idx != UINT_MAX)\n      S.Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type) << &AI << Idx << AANT_ArgumentIntegerConstant << Expr->getSourceRange();"},{p,319,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  if (IdxExpr->isTypeDependent() || !(IdxInt = IdxExpr->getIntegerConstantExpr(S.Context))) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type) << &AI << AttrArgNum << AANT_ArgumentIntegerConstant << IdxExpr->getSourceRange();"},{p,870,"static bool checkTryLockFunAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args) {\n  if (!isIntOrBool(AL.getArgAsExpr(0))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIntOrBool;"},{p,1037,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto DiagnoseType = [&](unsigned Index, AttributeArgumentNType T) {\n    S.Diag(Loc, diag::err_attribute_argument_n_type) << AL << Index << T;"},{p,1700,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (!(I = E->getIntegerConstantExpr(Context))) {\n      if (OE)\n        Diag(AttrLoc, diag::err_attribute_argument_n_type) << &TmpAttr << 1 << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{p,1722,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (OE && !OE->isValueDependent() && !OE->isIntegerConstantExpr(Context)) {\n    Diag(AttrLoc, diag::err_attribute_argument_n_type) << &TmpAttr << 2 << AANT_ArgumentIntegerConstant << OE->getSourceRange();"},{p,1820,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,2967,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,3033,"static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,3054,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (E->isTypeDependent() || !(Idx = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{p,3073,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 1) {\n    if (E->isTypeDependent() || !(Idx = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 2 << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{p,3754,"static void handleEnumExtensibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 0 << AANT_ArgumentIdentifier;"},{p,3937,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,5613,"// Checks whether an argument of launch_bounds attribute is\n// acceptable, performs implicit conversion to Rvalue, and returns\n// non-nullptr Expr result on success. Otherwise, it returns nullptr\n// and may output an error.\nstatic Expr *makeLaunchBoundsArgExpr(Sema &S, Expr *E, const CUDALaunchBoundsAttr &AL, const unsigned Idx) {\n  if (!(I = E->getIntegerConstantExpr(S.Context))) {\n    S.Diag(E->getExprLoc(), diag::err_attribute_argument_n_type) << &AL << Idx << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{p,5665,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << /* arg num = */ 1 << AANT_ArgumentIdentifier;"},{p,5697,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,5812,"static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,5841,"static void handleBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{p,6915,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"}}
[d]=p,
[c]={"29982275012f",1374588237,"Consolidate several attribute argument diagnostics into a single, selectable diagnostic. This makes..."},
[k]={{"clang/lib/Sema/SemaAttr.cpp",424,"bool Sema::ConstantFoldAttrArgs(const AttributeCommonInfo &CI, MutableArrayRef<Expr *> Args) {\n for (unsigned Idx = 0; Idx < Args.size(); Idx++) {\n   /// Result means the expression can be folded to a constant.\n    /// Note.empty() means the expression is a valid constant expression in the\n    /// current language mode.\n    if (!Result || !Notes.empty()) {\n      Diag(E->getBeginLoc(), diag::err_attribute_argument_n_type) << CI << (Idx + 1) << AANT_ArgumentConstantExpr;"},{q,225,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  if (Expr->isTypeDependent() || !(I = Expr->getIntegerConstantExpr(S.Context))) {\n    if (Idx != UINT_MAX)\n      S.Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type) << &AI << Idx << AANT_ArgumentIntegerConstant << Expr->getSourceRange();"},{q,319,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  if (IdxExpr->isTypeDependent() || !(IdxInt = IdxExpr->getIntegerConstantExpr(S.Context))) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_argument_n_type) << &AI << AttrArgNum << AANT_ArgumentIntegerConstant << IdxExpr->getSourceRange();"},{q,870,"static bool checkTryLockFunAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args) {\n  if (!isIntOrBool(AL.getArgAsExpr(0))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIntOrBool;"},{q,1037,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto DiagnoseType = [&](unsigned Index, AttributeArgumentNType T) {\n    S.Diag(Loc, diag::err_attribute_argument_n_type) << AL << Index << T;"},{q,1700,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (!(I = E->getIntegerConstantExpr(Context))) {\n      if (OE)\n        Diag(AttrLoc, diag::err_attribute_argument_n_type) << &TmpAttr << 1 << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{q,1722,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (OE && !OE->isValueDependent() && !OE->isIntegerConstantExpr(Context)) {\n    Diag(AttrLoc, diag::err_attribute_argument_n_type) << &TmpAttr << 2 << AANT_ArgumentIntegerConstant << OE->getSourceRange();"},{q,1820,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,2967,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,3033,"static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,3054,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (E->isTypeDependent() || !(Idx = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{q,3073,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 1) {\n    if (E->isTypeDependent() || !(Idx = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 2 << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{q,3754,"static void handleEnumExtensibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 0 << AANT_ArgumentIdentifier;"},{q,3937,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,5613,"// Checks whether an argument of launch_bounds attribute is\n// acceptable, performs implicit conversion to Rvalue, and returns\n// non-nullptr Expr result on success. Otherwise, it returns nullptr\n// and may output an error.\nstatic Expr *makeLaunchBoundsArgExpr(Sema &S, Expr *E, const CUDALaunchBoundsAttr &AL, const unsigned Idx) {\n  if (!(I = E->getIntegerConstantExpr(S.Context))) {\n    S.Diag(E->getExprLoc(), diag::err_attribute_argument_n_type) << &AL << Idx << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{q,5665,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << /* arg num = */ 1 << AANT_ArgumentIdentifier;"},{q,5697,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,5812,"static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,5841,"static void handleBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"},{q,6915,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type) << AL << 1 << AANT_ArgumentIdentifier;"}},
[o]={
["clang/test/Sema/alloc-align-attr.c"]={"clang/test/Sema/alloc-align-attr.c:13:46: error: \'alloc_align\' attribute requires parameter 1 to be an integer constant"}
}
},
},
["err_attribute_argument_out_of_bounds"]={
["err_attribute_argument_out_of_bounds"]={
[f]="A attribute parameter B is out of bounds",
[h]="A attribute parameter B is out of bounds",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute parameter %1 is out of bounds",
[i]=m,
[i]=m,
[j]="(.*?) attribute parameter (.*?) is out of bounds",
[b]="%0 attribute parameter %1 is out of bounds",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute parameter (.*?) is out of bounds",
[d]={A,1236199783,z},
[e]=a,
[k]={{p,327,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  if (IdxSource < 1 || (!IV && IdxSource > NumParams)) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds) << &AI << AttrArgNum << IdxExpr->getSourceRange();"},{p,3974,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Idx < 1 || Idx > NumArgs) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 2 << IdxExpr->getSourceRange();"},{p,4024,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    } else if (isFunctionOrMethodVariadic(D)) {\n      // Else, if the function is variadic, then FirstArg must be 0 or the\n      // \"position\" of the ... parameter. It\'s unusual to use 0 with variadic\n      // functions, so the fixit proposes the latter.\n      if (FirstArg != NumArgs + 1) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange() << FixItHint::CreateReplacement(FirstArgExpr->getSourceRange(), std::to_string(NumArgs + 1));"},{p,4037,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    } else if (isFunctionOrMethodVariadic(D)) {\n    } else {\n      if (FirstArg <= Idx) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange();"},{p,4097,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (AL.isArgIdent(I)) {\n    } else if (AL.isArgExpr(I)) {\n      // If the expression is not parseable as an int32_t we have a problem.\n      if (!checkUInt32Argument(S, AL, IdxExpr, (uint32_t &)ArgIdx, I + 1, false)) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{p,4104,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (AL.isArgIdent(I)) {\n    } else if (AL.isArgExpr(I)) {\n      // Check oob, excluding the special values, 0 and -1.\n      if (ArgIdx < -1 || ArgIdx > NumArgs) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{p,6487,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonZeroArgument: {\n    if (ParamIdx == 0 || ParamIdx > BlockParams.size()) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_attribute_argument_out_of_bounds) << ErrorAttr << 2;"},{p,7418,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Num > 63) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)NumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{p,7508,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if ((Num & 1) || Num > 30) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)MaybeNumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{p,7990,"static void handleLayoutVersion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // TODO: Investigate what happens with the next major version of MSVC.\n  if (Version != LangOptions::MSVC2015 / 100) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << Version << VersionExpr->getSourceRange();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{q,327,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  if (IdxSource < 1 || (!IV && IdxSource > NumParams)) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds) << &AI << AttrArgNum << IdxExpr->getSourceRange();"},{q,3974,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Idx < 1 || Idx > NumArgs) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 2 << IdxExpr->getSourceRange();"},{q,4024,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    } else if (isFunctionOrMethodVariadic(D)) {\n      // Else, if the function is variadic, then FirstArg must be 0 or the\n      // \"position\" of the ... parameter. It\'s unusual to use 0 with variadic\n      // functions, so the fixit proposes the latter.\n      if (FirstArg != NumArgs + 1) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange() << FixItHint::CreateReplacement(FirstArgExpr->getSourceRange(), std::to_string(NumArgs + 1));"},{q,4037,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    } else if (isFunctionOrMethodVariadic(D)) {\n    } else {\n      if (FirstArg <= Idx) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange();"},{q,4097,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (AL.isArgIdent(I)) {\n    } else if (AL.isArgExpr(I)) {\n      // If the expression is not parseable as an int32_t we have a problem.\n      if (!checkUInt32Argument(S, AL, IdxExpr, (uint32_t &)ArgIdx, I + 1, false)) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{q,4104,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (AL.isArgIdent(I)) {\n    } else if (AL.isArgExpr(I)) {\n      // Check oob, excluding the special values, 0 and -1.\n      if (ArgIdx < -1 || ArgIdx > NumArgs) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{q,6487,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonZeroArgument: {\n    if (ParamIdx == 0 || ParamIdx > BlockParams.size()) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_attribute_argument_out_of_bounds) << ErrorAttr << 2;"},{q,7418,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Num > 63) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)NumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{q,7508,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if ((Num & 1) || Num > 30) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)MaybeNumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{q,7990,"static void handleLayoutVersion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // TODO: Investigate what happens with the next major version of MSVC.\n  if (Version != LangOptions::MSVC2015 / 100) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << Version << VersionExpr->getSourceRange();"}},
[o]={
["clang/test/Sema/alloc-align-attr.c"]={"clang/test/Sema/alloc-align-attr.c:8:48: error: \'alloc_align\' attribute parameter 1 is out of bounds","clang/test/Sema/alloc-align-attr.c:9:43: error: \'alloc_align\' attribute parameter 1 is out of bounds"}
}
},
},
["err_attribute_argument_out_of_bounds_extra_info"]={
["err_attribute_argument_out_of_bounds_extra_info"]={
[f]="A attribute parameter B is out of bounds: no parameters to index into",
[h]="A attribute parameter B is out of bounds: no parameters to index into",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute parameter %1 is out of bounds: %plural{0:no parameters to index into|1:can only be 1, since there is one parameter|:must be between 1 and %2}2",
[i]=m,
[i]=m,
[j]="(.*?) attribute parameter (.*?) is out of bounds\\: (?:no parameters to index into|can only be 1, since there is one parameter|must be between 1 and (.*?))",
[b]="%0 attribute parameter %1 is out of bounds: %plural{0:no parameters to index into|1:can only be 1, since there is one parameter|:must be between 1 and %2}2",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute parameter (.*?) is out of bounds\\: (?:no parameters to index into|can only be 1, since there is one parameter|must be between 1 and (.*?))",
[d]={"ce667f6df971",1549977542,"Renaming yet another diagnostic to not conflict; NFC."},
[e]=a,
[k]={{p,666,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n    // Now check if we index into a record type function param.\n    if (!RT && ParamIdxOk) {\n      if (FD && IL) {\n        if (!ArgValue.isStrictlyPositive() || ParamIdxFromOne > NumParams) {\n          S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds_extra_info) << AL << Idx + 1 << NumParams;"}}
[d]=p,
[c]={"ce667f6df971",1549977542,"Renaming yet another diagnostic to not conflict; NFC."},
[k]={{q,666,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n    // Now check if we index into a record type function param.\n    if (!RT && ParamIdxOk) {\n      if (FD && IL) {\n        if (!ArgValue.isStrictlyPositive() || ParamIdxFromOne > NumParams) {\n          S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds_extra_info) << AL << Idx + 1 << NumParams;"}},
[o]={
["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:628:26: error: \'exclusive_lock_function\' attribute parameter 1 is out of bounds: no parameters to index into","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:630:33: error: \'exclusive_lock_function\' attribute parameter 1 is out of bounds: can only be 1, since there is one parameter","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:632:42: error: \'exclusive_lock_function\' attribute parameter 1 is out of bounds: must be between 1 and 2","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:634:26: error: \'exclusive_lock_function\' attribute parameter 1 is out of bounds: no parameters to index into","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:701:26: error: \'shared_lock_function\' attribute parameter 1 is out of bounds: no parameters to index into","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:703:33: error: \'shared_lock_function\' attribute parameter 1 is out of bounds: can only be 1, since there is one parameter","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:705:42: error: \'shared_lock_function\' attribute parameter 1 is out of bounds: must be between 1 and 2","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:707:26: error: \'shared_lock_function\' attribute parameter 1 is out of bounds: no parameters to index into","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:932:25: error: \'unlock_function\' attribute parameter 1 is out of bounds: no parameters to index into","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:934:32: error: \'unlock_function\' attribute parameter 1 is out of bounds: can only be 1, since there is one parameter","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:936:41: error: \'unlock_function\' attribute parameter 1 is out of bounds: must be between 1 and 2","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:938:25: error: \'unlock_function\' attribute parameter 1 is out of bounds: no parameters to index into"}
}
},
},
["err_attribute_argument_out_of_range"]={
["err_attribute_argument_out_of_range"]={
[f]="A attribute requires integer constant between B and C inclusive",
[h]="A attribute requires integer constant between B and C inclusive",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute requires integer constant between %1 and %2 inclusive",
[i]=m,
[i]=m,
[j]="(.*?) attribute requires integer constant between (.*?) and (.*?) inclusive",
[b]="%0 attribute requires integer constant between %1 and %2 inclusive",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute requires integer constant between (.*?) and (.*?) inclusive",
[d]={"4b1e8399c22e",1312912771,"Thread Safety: Added basic argument parsing for all new attributes."},
[e]=a,
[k]={{p,1188,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // pass_object_size\'s argument is passed in as the second argument of\n  // __builtin_object_size. So, it has the same constraints as that second\n  // argument; namely, it must be in the range [0, 3].\n  if (Type > 3) {\n    S.Diag(E->getBeginLoc(), diag::err_attribute_argument_out_of_range) << AL << 0 << 3 << E->getSourceRange();"},{p,3881,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only perform the priority check if the attribute is outside of a system\n  // header. Values <= 100 are reserved for the implementation, and libc++\n  // benefits from being able to specify values in that range.\n  if ((prioritynum < 101 || prioritynum > 65535) && !S.getSourceManager().isInSystemHeader(AL.getLoc())) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_range) << E->getSourceRange() << AL << 101 << 65535;"},{p,5744,"static void handlePatchableFunctionEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() == 2) {\n    if (Count < Offset) {\n      S.Diag(getAttrLoc(AL), diag::err_attribute_argument_out_of_range) << &AL << 0 << Count << Arg->getBeginLoc();"}}
[d]=p,
[c]={"4b1e8399c22e",1312912771,"Thread Safety: Added basic argument parsing for all new attributes."},
[k]={{q,1188,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // pass_object_size\'s argument is passed in as the second argument of\n  // __builtin_object_size. So, it has the same constraints as that second\n  // argument; namely, it must be in the range [0, 3].\n  if (Type > 3) {\n    S.Diag(E->getBeginLoc(), diag::err_attribute_argument_out_of_range) << AL << 0 << 3 << E->getSourceRange();"},{q,3881,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only perform the priority check if the attribute is outside of a system\n  // header. Values <= 100 are reserved for the implementation, and libc++\n  // benefits from being able to specify values in that range.\n  if ((prioritynum < 101 || prioritynum > 65535) && !S.getSourceManager().isInSystemHeader(AL.getLoc())) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_range) << E->getSourceRange() << AL << 101 << 65535;"},{q,5744,"static void handlePatchableFunctionEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() == 2) {\n    if (Count < Offset) {\n      S.Diag(getAttrLoc(AL), diag::err_attribute_argument_out_of_range) << &AL << 0 << Count << Arg->getBeginLoc();"}},
[o]={
["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:9:48: error: \'pass_object_size\' attribute requires integer constant between 0 and 3 inclusive","clang/test/Sema/pass-object-size.c:10:48: error: \'pass_object_size\' attribute requires integer constant between 0 and 3 inclusive"}
}
},
},
["err_attribute_argument_parm_pack_not_supported"]={
["err_attribute_argument_parm_pack_not_supported"]={
[f]="attribute A does not support argument pack expansion",
[h]="attribute A does not support argument pack expansion",
[c]=l,
[j]=n,
[e]=n,
[g]="attribute %0 does not support argument pack expansion",
[i]=m,
[i]=m,
[j]="attribute (.*?) does not support argument pack expansion",
[b]="attribute %0 does not support argument pack expansion",
[b]=a,
[g]=l,
[h]=B,
[f]="attribute (.*?) does not support argument pack expansion",
[d]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[e]=a,
[k]={{D,481,"unsigned Parser::ParseAttributeArgsCommon(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (!ArgExprs.empty() ? Tok.is(tok::comma) : Tok.isNot(tok::r_paren)) {\n    if (AttributeIsTypeArgAttr) {\n    } else if (AttributeHasVariadicIdentifierArg) {\n    } else {\n      // Pack expansion must currently be explicitly supported by an attribute.\n      for (size_t I = 0; I < ParsedExprs.size(); ++I) {\n        if (!attributeAcceptsExprPack(*AttrName)) {\n          Diag(Tok.getLocation(), diag::err_attribute_argument_parm_pack_not_supported) << AttrName;"}}
[d]=A,
[c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[k]={{E,481,"unsigned Parser::ParseAttributeArgsCommon(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (!ArgExprs.empty() ? Tok.is(tok::comma) : Tok.isNot(tok::r_paren)) {\n    if (AttributeIsTypeArgAttr) {\n    } else if (AttributeHasVariadicIdentifierArg) {\n    } else {\n      // Pack expansion must currently be explicitly supported by an attribute.\n      for (size_t I = 0; I < ParsedExprs.size(); ++I) {\n        if (!attributeAcceptsExprPack(*AttrName)) {\n          Diag(Tok.getLocation(), diag::err_attribute_argument_parm_pack_not_supported) << AttrName;"}},
[o]={
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:269:38: error: attribute \'no_sanitize\' does not support argument pack expansion"}
}
},
},
["err_attribute_argument_type"]={
["err_attribute_argument_type"]={
[f]="A attribute requires ...",
[h]="A attribute requires ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute requires %select{int or bool|an integer constant|a string|an identifier}1",
[i]=m,
[i]=m,
[j]="(.*?) attribute requires (?:int or bool|an integer constant|a string|an identifier)",
[b]="%0 attribute requires %select{int or bool|an integer constant|a string|an identifier}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute requires (?:int or bool|an integer constant|a string|an identifier)",
[d]={"3bf758cd6579",1375147863,"err_attribute_not_string has been subsumed by err_attribute_argument_type."},
[e]=a,
[k]={{p,229,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  if (Expr->isTypeDependent() || !(I = Expr->getIntegerConstantExpr(S.Context))) {\n    if (Idx != UINT_MAX)\n    else\n      S.Diag(getAttrLoc(AI), diag::err_attribute_argument_type) << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange();"},{p,354,"/// Check if the argument \\p E is a ASCII string literal. If not emit an error\n/// and return false, otherwise set \\p Str to the value of the string literal\n/// and return true.\nbool Sema::checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, const Expr *E, StringRef &Str, SourceLocation *ArgLocation) {\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(E->getBeginLoc(), diag::err_attribute_argument_type) << CI << AANT_ArgumentString;"},{p,373,"/// Check if the argument \\p ArgNum of \\p Attr is a ASCII string literal.\n/// If not emit an error and return false. If the argument is an identifier it\n/// will emit an error with a fixit hint and treat it as if it was a string\n/// literal.\nbool Sema::checkStringLiteralArgumentAttr(const ParsedAttr &AL, unsigned ArgNum, StringRef &Str, SourceLocation *ArgLocation) {\n  // Look for identifiers. If we have one emit a hint to fix it to a literal.\n  if (AL.isArgIdent(ArgNum)) {\n    Diag(Loc->Loc, diag::err_attribute_argument_type) << AL << AANT_ArgumentString << FixItHint::CreateInsertion(Loc->Loc, \"\\\"\") << FixItHint::CreateInsertion(getLocForEndOfToken(Loc->Loc), \"\\\"\");"},{p,1217,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,1289,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,1321,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,1368,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,1390,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,1704,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (!(I = E->getIntegerConstantExpr(Context))) {\n      if (OE)\n      else\n        Diag(AttrLoc, diag::err_attribute_argument_type) << &TmpAttr << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{p,2100,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n    if (!AL.isArgIdent(ArgNo)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,4726,"/// handleModeAttr - This attribute modifies the width of a decl with primitive\n/// type.\n///\n/// Despite what would be logical, the mode attribute is a decl attribute, not a\n/// type attribute: \'int ** __attribute((mode(HI))) *G;\' tries to make \'G\' be\n/// HImode, not an intermediate pointer.\nstatic void handleModeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // This attribute isn\'t documented, but glibc uses it.  It changes\n  // the width of an int or unsigned int to the specified size.\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,6892,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,7223,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,7236,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() == 2) {\n    if (!AL.isArgIdent(1)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{p,7402,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{p,7410,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!(NumParams = NumParamsExpr->getIntegerConstantExpr(S.Context))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{p,7490,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{p,7500,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!MaybeNumParams) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{p,8592,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{"clang/lib/Sema/SemaStmtAttr.cpp",463,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (A.getNumArgs() == 1) {\n    if (!(ArgVal = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(A.getLoc(), diag::err_attribute_argument_type) << A << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{r,2729,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (!VecSize) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"vector_size\" << AANT_ArgumentIntegerConstant << SizeExpr->getSourceRange();"},{r,2807,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    if (!vecSize) {\n      Diag(AttrLoc, diag::err_attribute_argument_type) << \"ext_vector_type\" << AANT_ArgumentIntegerConstant << ArraySize->getSourceRange();"},{r,2861,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Both are row and column expressions are invalid.\n  if (!ValueRows && !ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange << ColRange;"},{r,2869,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Only the row expression is invalid.\n  if (!ValueRows) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange;"},{r,2876,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Only the column expression is invalid.\n  if (!ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << ColRange;"},{r,6717,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    if (!OptAddrSpace) {\n      S.Diag(AttrLoc, diag::err_attribute_argument_type) << \"\'address_space\'\" << AANT_ArgumentIntegerConstant << AddrSpace->getSourceRange();"},{r,6804,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  if (!StrLiteral) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentString;"},{r,6936,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (!attr.isArgIdent(0)) {\n    S.Diag(AttrLoc, diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{r,7107,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Check the attribute arguments.\n  if (!attr.isArgIdent(0)) {\n    S.Diag(attr.getLoc(), diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{r,8184,"static bool verifyValidIntegerConstantExpr(Sema &S, const ParsedAttr &Attr, llvm::APSInt &Result) {\n  S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentIntegerConstant << AttrExpr->getSourceRange();"}}
[d]=p,
[c]={"3bf758cd6579",1375147863,"err_attribute_not_string has been subsumed by err_attribute_argument_type."},
[k]={{q,229,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  if (Expr->isTypeDependent() || !(I = Expr->getIntegerConstantExpr(S.Context))) {\n    if (Idx != UINT_MAX)\n    else\n      S.Diag(getAttrLoc(AI), diag::err_attribute_argument_type) << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange();"},{q,354,"/// Check if the argument \\p E is a ASCII string literal. If not emit an error\n/// and return false, otherwise set \\p Str to the value of the string literal\n/// and return true.\nbool Sema::checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, const Expr *E, StringRef &Str, SourceLocation *ArgLocation) {\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(E->getBeginLoc(), diag::err_attribute_argument_type) << CI << AANT_ArgumentString;"},{q,373,"/// Check if the argument \\p ArgNum of \\p Attr is a ASCII string literal.\n/// If not emit an error and return false. If the argument is an identifier it\n/// will emit an error with a fixit hint and treat it as if it was a string\n/// literal.\nbool Sema::checkStringLiteralArgumentAttr(const ParsedAttr &AL, unsigned ArgNum, StringRef &Str, SourceLocation *ArgLocation) {\n  // Look for identifiers. If we have one emit a hint to fix it to a literal.\n  if (AL.isArgIdent(ArgNum)) {\n    Diag(Loc->Loc, diag::err_attribute_argument_type) << AL << AANT_ArgumentString << FixItHint::CreateInsertion(Loc->Loc, \"\\\"\") << FixItHint::CreateInsertion(getLocForEndOfToken(Loc->Loc), \"\\\"\");"},{q,1217,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,1289,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,1321,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,1368,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,1390,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,1704,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (!(I = E->getIntegerConstantExpr(Context))) {\n      if (OE)\n      else\n        Diag(AttrLoc, diag::err_attribute_argument_type) << &TmpAttr << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{q,2100,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n    if (!AL.isArgIdent(ArgNo)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,4726,"/// handleModeAttr - This attribute modifies the width of a decl with primitive\n/// type.\n///\n/// Despite what would be logical, the mode attribute is a decl attribute, not a\n/// type attribute: \'int ** __attribute((mode(HI))) *G;\' tries to make \'G\' be\n/// HImode, not an intermediate pointer.\nstatic void handleModeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // This attribute isn\'t documented, but glibc uses it.  It changes\n  // the width of an int or unsigned int to the specified size.\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,6892,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,7223,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,7236,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() == 2) {\n    if (!AL.isArgIdent(1)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{q,7402,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{q,7410,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!(NumParams = NumParamsExpr->getIntegerConstantExpr(S.Context))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{q,7490,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{q,7500,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!MaybeNumParams) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{q,8592,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{"clang/lib/Sema/SemaStmtAttr.cpp",463,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (A.getNumArgs() == 1) {\n    if (!(ArgVal = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(A.getLoc(), diag::err_attribute_argument_type) << A << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{s,2729,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (!VecSize) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"vector_size\" << AANT_ArgumentIntegerConstant << SizeExpr->getSourceRange();"},{s,2807,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    if (!vecSize) {\n      Diag(AttrLoc, diag::err_attribute_argument_type) << \"ext_vector_type\" << AANT_ArgumentIntegerConstant << ArraySize->getSourceRange();"},{s,2861,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Both are row and column expressions are invalid.\n  if (!ValueRows && !ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange << ColRange;"},{s,2869,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Only the row expression is invalid.\n  if (!ValueRows) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange;"},{s,2876,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Only the column expression is invalid.\n  if (!ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << ColRange;"},{s,6717,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    if (!OptAddrSpace) {\n      S.Diag(AttrLoc, diag::err_attribute_argument_type) << \"\'address_space\'\" << AANT_ArgumentIntegerConstant << AddrSpace->getSourceRange();"},{s,6804,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  if (!StrLiteral) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentString;"},{s,6936,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (!attr.isArgIdent(0)) {\n    S.Diag(AttrLoc, diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{s,7107,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Check the attribute arguments.\n  if (!attr.isArgIdent(0)) {\n    S.Diag(attr.getLoc(), diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{s,8184,"static bool verifyValidIntegerConstantExpr(Sema &S, const ParsedAttr &Attr, llvm::APSInt &Result) {\n  S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentIntegerConstant << AttrExpr->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:38:39: error: \'callable_when\' attribute requires a string","clang/test/SemaCXX/warn-consumed-parsing.cpp:46:38: error: \'return_typestate\' attribute requires an identifier","clang/test/SemaCXX/warn-consumed-parsing.cpp:56:7: error: \'consumable\' attribute requires an identifier"}
}
},
},
["err_attribute_arm_builtin_alias"]={
["err_attribute_arm_builtin_alias"]={
[h]="\'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin",
[j]=n,
[i]=m,
[b]="\'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin",
[g]=l,
[f]="\'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin",
[f]="\'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin",
[c]={Y,1576908663,X},
[i]=m,
[k]={{q,5826,"static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName) && !ArmSmeAliasValid(S.Context, BuiltinID, AliasName)) || (!IsAArch64 && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_arm_builtin_alias);"}},
[j]="\'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin",
[o]={
[b]=a,
["clang/test/Sema/arm-mve-alias-attribute.c"]={"clang/test/Sema/arm-mve-alias-attribute.c:3:34: error: \'__clang_arm_builtin_alias\' attribute can only be applied to an ARM builtin"}
[h]=o,
}
[d]={W,1576908663,V},
[k]={{p,5826,"static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName) && !ArmSmeAliasValid(S.Context, BuiltinID, AliasName)) || (!IsAArch64 && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_arm_builtin_alias);"}}
},
},
["err_attribute_arm_feature_sve_bits_unsupported"]={
["err_attribute_arm_feature_sve_bits_unsupported"]={
[f]="A is only supported when \'-msve-vector-bits=<bits>\' is specified with a value of 128, 256, 512, 1024 or 2048.",
[h]="A is only supported when \'-msve-vector-bits=<bits>\' is specified with a value of 128, 256, 512, 1024 or 2048.",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 is only supported when \'-msve-vector-bits=<bits>\' is specified with a value of 128, 256, 512, 1024 or 2048.",
[i]=m,
[i]=m,
[j]="(.*?) is only supported when \'\\-msve\\-vector\\-bits\\=\\<bits\\>\' is specified with a value of 128, 256, 512, 1024 or 2048\\.",
[b]="%0 is only supported when \'-msve-vector-bits=<bits>\' is specified with a value of 128, 256, 512, 1024 or 2048.",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) is only supported when \'\\-msve\\-vector\\-bits\\=\\<bits\\>\' is specified with a value of 128, 256, 512, 1024 or 2048\\.",
[d]={T,1582847864,U},
[e]=a,
[k]={{r,8265,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Attribute is unsupported if \'-msve-vector-bits=<bits>\' isn\'t specified, or\n  // if <bits>+ syntax is used.\n  if (!S.getLangOpts().VScaleMin || S.getLangOpts().VScaleMin != S.getLangOpts().VScaleMax) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_arm_feature_sve_bits_unsupported) << Attr;"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{s,8265,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Attribute is unsupported if \'-msve-vector-bits=<bits>\' isn\'t specified, or\n  // if <bits>+ syntax is used.\n  if (!S.getLangOpts().VScaleMin || S.getLangOpts().VScaleMin != S.getLangOpts().VScaleMax) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_arm_feature_sve_bits_unsupported) << Attr;"}}
},
},
["err_attribute_arm_mve_polymorphism"]={
["err_attribute_arm_mve_polymorphism"]={
[f]="\'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type",
[h]="\'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type",
[c]=l,
[j]=n,
[e]=n,
[g]="\'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type",
[i]=m,
[i]=m,
[j]="\'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE\\/NEON vector type",
[b]="\'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type",
[b]=a,
[g]=l,
[h]=o,
[f]="\'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE\\/NEON vector type",
[d]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[e]=a,
[k]={{r,8322,"static void HandleArmMveStrictPolymorphismAttr(TypeProcessingState &State, QualType &CurType, ParsedAttr &Attr) {\n  if (!VT || VT->getVectorKind() != VectorType::NeonVector) {\n    State.getSema().Diag(Attr.getLoc(), diag::err_attribute_arm_mve_polymorphism);"}}
[d]=p,
[c]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[k]={{s,8322,"static void HandleArmMveStrictPolymorphismAttr(TypeProcessingState &State, QualType &CurType, ParsedAttr &Attr) {\n  if (!VT || VT->getVectorKind() != VectorType::NeonVector) {\n    State.getSema().Diag(Attr.getLoc(), diag::err_attribute_arm_mve_polymorphism);"}},
[o]={
["clang/test/Sema/overload-arm-mve.c"]={"clang/test/Sema/overload-arm-mve.c:120:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type","clang/test/Sema/overload-arm-mve.c:121:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type","clang/test/Sema/overload-arm-mve.c:122:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type"}
}
},
},
["err_attribute_bad_neon_vector_size"]={
["err_attribute_bad_neon_vector_size"]={
[h]="Neon vector size must be 64 or 128 bits",
[j]=n,
[i]=m,
[b]="Neon vector size must be 64 or 128 bits",
[g]=l,
[f]="Neon vector size must be 64 or 128 bits",
[f]="Neon vector size must be 64 or 128 bits",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="Neon vector size must be 64 or 128 bits",
[c]={"118baf76115b",1289867544,"Add support for \"neon_vector_type\" and \"neon_polyvector_type\" attributes"},
[i]=m,
[k]={{s,8241,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  if (vecSize != 64 && vecSize != 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_neon_vector_size) << CurType;"}},
[j]="Neon vector size must be 64 or 128 bits",
[o]={
[b]=a,
["clang/test/Sema/neon-vector-types.c"]={"clang/test/Sema/neon-vector-types.c:42:24: error: Neon vector size must be 64 or 128 bits","clang/test/Sema/neon-vector-types.c:43:24: error: Neon vector size must be 64 or 128 bits"}
[h]=o,
}
[d]={"118baf76115b",1289867544,"Add support for \"neon_vector_type\" and \"neon_polyvector_type\" attributes"},
[k]={{r,8241,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  if (vecSize != 64 && vecSize != 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_neon_vector_size) << CurType;"}}
},
},
["err_attribute_bad_rvv_vector_size"]={
["err_attribute_bad_rvv_vector_size"]={
[f]="invalid RVV vector size \'A\', expected size is \'B\' based on LMUL of type and \'-mrvv-vector-bits\'",
[h]="invalid RVV vector size \'A\', expected size is \'B\' based on LMUL of type and \'-mrvv-vector-bits\'",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid RVV vector size \'%0\', expected size is \'%1\' based on LMUL of type and \'-mrvv-vector-bits\'",
[i]=m,
[i]=m,
[j]="invalid RVV vector size \'(.*?)\', expected size is \'(.*?)\' based on LMUL of type and \'\\-mrvv\\-vector\\-bits\'",
[b]="invalid RVV vector size \'%0\', expected size is \'%1\' based on LMUL of type and \'-mrvv-vector-bits\'",
[b]=a,
[g]=l,
[h]=o,
[f]="invalid RVV vector size \'(.*?)\', expected size is \'(.*?)\' based on LMUL of type and \'\\-mrvv\\-vector\\-bits\'",
[d]={N,1625925174,M},
[e]=a,
[k]={{r,8385,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  if (VecSize != ExpectedSize) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_rvv_vector_size) << VecSize << ExpectedSize;"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{s,8385,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  if (VecSize != ExpectedSize) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_rvv_vector_size) << VecSize << ExpectedSize;"}}
},
},
["err_attribute_bad_sve_vector_size"]={
["err_attribute_bad_sve_vector_size"]={
[f]="invalid SVE vector size \'A\', must match value set by \'-msve-vector-bits\' (\'B\')",
[h]="invalid SVE vector size \'A\', must match value set by \'-msve-vector-bits\' (\'B\')",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid SVE vector size \'%0\', must match value set by \'-msve-vector-bits\' (\'%1\')",
[i]=m,
[i]=m,
[j]="invalid SVE vector size \'(.*?)\', must match value set by \'\\-msve\\-vector\\-bits\' \\(\'(.*?)\'\\)",
[b]="invalid SVE vector size \'%0\', must match value set by \'-msve-vector-bits\' (\'%1\')",
[b]=a,
[g]=l,
[h]=o,
[f]="invalid SVE vector size \'(.*?)\', must match value set by \'\\-msve\\-vector\\-bits\' \\(\'(.*?)\'\\)",
[d]={T,1582847864,U},
[e]=a,
[k]={{r,8288,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // The attribute vector size must match -msve-vector-bits.\n  if (VecSize != S.getLangOpts().VScaleMin * 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_sve_vector_size) << VecSize << S.getLangOpts().VScaleMin * 128;"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{s,8288,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // The attribute vector size must match -msve-vector-bits.\n  if (VecSize != S.getLangOpts().VScaleMin * 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_sve_vector_size) << VecSize << S.getLangOpts().VScaleMin * 128;"}}
},
},
["err_attribute_bounds_for_function"]={
["err_attribute_bounds_for_function"]={
[f]="A attribute references parameter B, but the function C has only D parameters",
[h]="A attribute references parameter B, but the function C has only D parameters",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute references parameter %1, but the function %2 has only %3 parameters",
[i]=m,
[i]=m,
[j]="(.*?) attribute references parameter (.*?), but the function (.*?) has only (.*?) parameters",
[b]="%0 attribute references parameter %1, but the function %2 has only %3 parameters",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute references parameter (.*?), but the function (.*?) has only (.*?) parameters",
[d]={db,1616787805,cb},
[e]=a,
[k]={{p,1075,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    if (Index > DeclFD->getNumParams()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_bounds_for_function) << AL << Index << DeclFD << DeclFD->getNumParams();"}}
[d]=p,
[c]={cb,1616787805,jb},
[k]={{q,1075,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    if (Index > DeclFD->getNumParams()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_bounds_for_function) << AL << Index << DeclFD << DeclFD->getNumParams();"}},
[o]={
["clang/test/Sema/attr-diagnose-as-builtin.c"]={"clang/test/Sema/attr-diagnose-as-builtin.c:33:80: error: \'diagnose_as_builtin\' attribute references parameter 3, but the function \'failure_parameter_index_bounds\' has only 2 parameters"}
}
},
},
["err_attribute_builtin_alias"]={
["err_attribute_builtin_alias"]={
[f]="A attribute can only be applied to a ARM, HLSL or RISC-V builtin",
[h]="A attribute can only be applied to a ARM, HLSL or RISC-V builtin",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute can only be applied to a ARM, HLSL or RISC-V builtin",
[i]=m,
[i]=m,
[j]="(.*?) attribute can only be applied to a ARM, HLSL or RISC\\-V builtin",
[b]="%0 attribute can only be applied to a ARM, HLSL or RISC-V builtin",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute can only be applied to a ARM, HLSL or RISC\\-V builtin",
[d]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[e]=a,
[k]={{p,5859,"static void handleBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName)) || (IsARM && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName)) || (IsRISCV && !RISCVAliasValid(BuiltinID, AliasName)) || (!IsAArch64 && !IsARM && !IsRISCV && !IsHLSL)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_builtin_alias) << AL;"}}
[d]=p,
[c]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[k]={{q,5859,"static void handleBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName)) || (IsARM && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName)) || (IsRISCV && !RISCVAliasValid(BuiltinID, AliasName)) || (!IsAArch64 && !IsARM && !IsRISCV && !IsHLSL)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_builtin_alias) << AL;"}}
},
},
["err_attribute_cleanup_arg_not_function"]={
["err_attribute_cleanup_arg_not_function"]={
[f]="\'cleanup\' argument ...is not a ...function",
[h]="\'cleanup\' argument ...is not a ...function",
[c]=l,
[j]=n,
[e]=n,
[g]="\'cleanup\' argument %select{|%1 |%1 }0is not a %select{||single }0function",
[i]=m,
[i]=m,
[j]="\'cleanup\' argument (?:|(.*?) |(.*?) )is not a (?:||single )function",
[b]="\'cleanup\' argument %select{|%1 |%1 }0is not a %select{||single }0function",
[b]=a,
[g]=l,
[h]=o,
[f]="\'cleanup\' argument (?:|(.*?) |(.*?) )is not a (?:||single )function",
[d]={A,1236199783,z},
[e]=a,
[k]={{p,3710,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 1 << NI.getName();"},{p,3720,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 2 << NI.getName();"},{p,3727,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n  } else {\n    S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 0;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{q,3710,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 1 << NI.getName();"},{q,3720,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 2 << NI.getName();"},{q,3727,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n  } else {\n    S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 0;"}},
[o]={
["clang/test/SemaCXX/attr-cleanup.cpp"]={"clang/test/SemaCXX/attr-cleanup.cpp:27:35: error: \'cleanup\' argument \'c3\' is not a single function"}
}
},
},
["err_attribute_cleanup_func_arg_incompatible_type"]={
["err_attribute_cleanup_func_arg_incompatible_type"]={
[f]="\'cleanup\' function A parameter has type B which is incompatible with type C",
[h]="\'cleanup\' function A parameter has type B which is incompatible with type C",
[c]=l,
[j]=n,
[e]=n,
[g]="\'cleanup\' function %0 parameter has %diff{type $ which is incompatible with type $|incompatible type}1,2",
[i]=m,
[i]=m,
[j]="\'cleanup\' function (.*?) parameter has (?:type (.*?) which is incompatible with type (.*?)|incompatible type)",
[b]="\'cleanup\' function %0 parameter has %diff{type $ which is incompatible with type $|incompatible type}1,2",
[b]=a,
[g]=l,
[h]=o,
[f]="\'cleanup\' function (.*?) parameter has (?:type (.*?) which is incompatible with type (.*?)|incompatible type)",
[d]={A,1236199783,z},
[e]=a,
[k]={{p,3743,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.CheckAssignmentConstraints(FD->getParamDecl(0)->getLocation(), ParamTy, Ty) != Sema::Compatible) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_arg_incompatible_type) << NI.getName() << ParamTy << Ty;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{q,3743,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.CheckAssignmentConstraints(FD->getParamDecl(0)->getLocation(), ParamTy, Ty) != Sema::Compatible) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_arg_incompatible_type) << NI.getName() << ParamTy << Ty;"}},
[o]={
["clang/test/Sema/attr-cleanup.c"]={"clang/test/Sema/attr-cleanup.c:32:35: error: \'cleanup\' function \'c3\' parameter has type \'struct s\' which is incompatible with type \'int *\'"}
}
},
},
["err_attribute_cleanup_func_must_take_one_arg"]={
["err_attribute_cleanup_func_must_take_one_arg"]={
[f]="\'cleanup\' function A must take 1 parameter",
[h]="\'cleanup\' function A must take 1 parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="\'cleanup\' function %0 must take 1 parameter",
[i]=m,
[i]=m,
[j]="\'cleanup\' function (.*?) must take 1 parameter",
[b]="\'cleanup\' function %0 must take 1 parameter",
[b]=a,
[g]=l,
[h]=o,
[f]="\'cleanup\' function (.*?) must take 1 parameter",
[d]={A,1236199783,z},
[e]=a,
[k]={{p,3732,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->getNumParams() != 1) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_must_take_one_arg) << NI.getName();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{q,3732,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->getNumParams() != 1) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_must_take_one_arg) << NI.getName();"}},
[o]={
["clang/test/Sema/attr-cleanup.c"]={"clang/test/Sema/attr-cleanup.c:31:35: error: \'cleanup\' function \'c2\' must take 1 parameter"}
}
},
},
["err_attribute_dll_ambiguous_default_ctor"]={
["err_attribute_dll_ambiguous_default_ctor"]={
[f]="\'__declspec(dllexport)\' cannot be applied to more than one default constructor in A",
[h]="\'__declspec(dllexport)\' cannot be applied to more than one default constructor in A",
[c]=l,
[j]=n,
[e]=n,
[g]="\'__declspec(dllexport)\' cannot be applied to more than one default constructor in %0",
[i]=m,
[i]=m,
[j]="\'__declspec\\(dllexport\\)\' cannot be applied to more than one default constructor in (.*?)",
[b]="\'__declspec(dllexport)\' cannot be applied to more than one default constructor in %0",
[b]=a,
[g]=l,
[h]=o,
[f]="\'__declspec\\(dllexport\\)\' cannot be applied to more than one default constructor in (.*?)",
[d]={"474b323a0387",1451540206,"[MSVC Compat] Diagnose multiple default ctors for dllexport\'d classes"},
[e]=a,
[k]={{v,6298,"static void checkForMultipleExportedDefaultConstructors(Sema &S, CXXRecordDecl *Class) {\n  for (Decl *Member : Class->decls()) {\n    if (LastExportedDefaultCtor) {\n      S.Diag(LastExportedDefaultCtor->getLocation(), diag::err_attribute_dll_ambiguous_default_ctor) << Class;"}}
[d]=p,
[c]={"474b323a0387",1451540206,"[MSVC Compat] Diagnose multiple default ctors for dllexport\'d classes"},
[k]={{w,6298,"static void checkForMultipleExportedDefaultConstructors(Sema &S, CXXRecordDecl *Class) {\n  for (Decl *Member : Class->decls()) {\n    if (LastExportedDefaultCtor) {\n      S.Diag(LastExportedDefaultCtor->getLocation(), diag::err_attribute_dll_ambiguous_default_ctor) << Class;"}},
[o]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:788:3: error: \'__declspec(dllexport)\' cannot be applied to more than one default constructor in \'ClassWithMultipleDefaultCtors\'","clang/test/SemaCXX/dllexport.cpp:793:25: error: \'__declspec(dllexport)\' cannot be applied to more than one default constructor in \'ClassTemplateWithMultipleDefaultCtors\'"}
}
},
},
["err_attribute_dll_deleted"]={
["err_attribute_dll_deleted"]={
[f]="attribute A cannot be applied to a deleted function",
[h]="attribute A cannot be applied to a deleted function",
[c]=l,
[j]=n,
[e]=n,
[g]="attribute %q0 cannot be applied to a deleted function",
[i]=m,
[i]=m,
[j]="attribute (.*?) cannot be applied to a deleted function",
[b]="attribute %q0 cannot be applied to a deleted function",
[b]=a,
[g]=l,
[h]=o,
[f]="attribute (.*?) cannot be applied to a deleted function",
[d]={"9de0a57687b9",1401382279,"Sema: Functions with dll attributes cannot be deleted"},
[e]=a,
[k]={{v,17831,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // dllimport/dllexport cannot be deleted.\n  if (const InheritableAttr *DLLAttr = getDLLAttr(Fn)) {\n    Diag(Fn->getLocation(), diag::err_attribute_dll_deleted) << DLLAttr;"}}
[d]=p,
[c]={"9de0a57687b9",1401382279,"Sema: Functions with dll attributes cannot be deleted"},
[k]={{w,17831,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // dllimport/dllexport cannot be deleted.\n  if (const InheritableAttr *DLLAttr = getDLLAttr(Fn)) {\n    Diag(Fn->getLocation(), diag::err_attribute_dll_deleted) << DLLAttr;"}},
[o]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:247:28: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:248:35: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:705:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:706:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:707:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:708:40: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:709:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:710:40: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:711:30: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:1111:47: error: attribute \'dllexport\' cannot be applied to a deleted function"}
}
},
},
["err_attribute_dll_lambda"]={
["err_attribute_dll_lambda"]={
[f]="lambda cannot be declared A",
[h]="lambda cannot be declared A",
[c]=l,
[j]=n,
[e]=n,
[g]="lambda cannot be declared %0",
[i]=m,
[i]=m,
[j]="lambda cannot be declared (.*?)",
[b]="lambda cannot be declared %0",
[b]=a,
[g]=l,
[h]=o,
[f]="lambda cannot be declared (.*?)",
[d]={"5869ec4c6c62",1442351130,"MS ABI: Don\'t allow dllexport/import on lambdas"},
[e]=a,
[k]={{p,2089,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_dll_lambda) << AL;"},{p,8049,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if ((S.Context.getTargetInfo().shouldDLLImportComdatSymbols()) && MD->getParent()->isLambda()) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_dll_lambda) << A;"}}
[d]=p,
[c]={"5869ec4c6c62",1442351130,"MS ABI: Don\'t allow dllexport/import on lambdas"},
[k]={{q,2089,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_dll_lambda) << AL;"},{q,8049,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if ((S.Context.getTargetInfo().shouldDLLImportComdatSymbols()) && MD->getParent()->isLambda()) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_dll_lambda) << A;"}},
[o]={
["clang/test/SemaCXX/attr-cpuspecific.cpp"]={"clang/test/SemaCXX/attr-cpuspecific.cpp:122:30: error: lambda cannot be declared \'cpu_dispatch\'"}
}
},
},
["err_attribute_dll_member_of_dll_class"]={
["err_attribute_dll_member_of_dll_class"]={
[f]="attribute A cannot be applied to member of B class",
[h]="attribute A cannot be applied to member of B class",
[c]=l,
[j]=n,
[e]=n,
[g]="attribute %q0 cannot be applied to member of %q1 class",
[i]=m,
[i]=m,
[j]="attribute (.*?) cannot be applied to member of (.*?) class",
[b]="attribute %q0 cannot be applied to member of %q1 class",
[b]=a,
[g]=l,
[h]=o,
[f]="attribute (.*?) cannot be applied to member of (.*?) class",
[d]={"496524b4484b",1401502129,"Diagnose dll attribute on member of class that already has a dll attribute"},
[e]=a,
[k]={{v,6483,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr->isInherited()) {\n    // Diagnose dll attributes on members of class with dll attribute.\n    for (Decl *Member : Class->decls()) {\n      Diag(MemberAttr->getLocation(), diag::err_attribute_dll_member_of_dll_class) << MemberAttr << ClassAttr;"}}
[d]=p,
[c]={"496524b4484b",1401502129,"Diagnose dll attribute on member of class that already has a dll attribute"},
[k]={{w,6483,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr->isInherited()) {\n    // Diagnose dll attributes on members of class with dll attribute.\n    for (Decl *Member : Class->decls()) {\n      Diag(MemberAttr->getLocation(), diag::err_attribute_dll_member_of_dll_class) << MemberAttr << ClassAttr;"}},
[o]={
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1487:19: error: attribute \'dllexport\' cannot be applied to member of \'dllimport\' class","clang/test/SemaCXX/dllimport.cpp:1488:19: error: attribute \'dllimport\' cannot be applied to member of \'dllimport\' class","clang/test/SemaCXX/dllimport.cpp:1498:19: error: attribute \'dllimport\' cannot be applied to member of \'dllexport\' class","clang/test/SemaCXX/dllimport.cpp:1499:19: error: attribute \'dllexport\' cannot be applied to member of \'dllexport\' class"}
}
},
},
["err_attribute_dll_not_extern"]={
["err_attribute_dll_not_extern"]={
[f]="A must have external linkage when declared B",
[h]="A must have external linkage when declared B",
[c]=l,
[j]=n,
[e]=n,
[g]="%q0 must have external linkage when declared %q1",
[i]=m,
[i]=m,
[j]="(.*?) must have external linkage when declared (.*?)",
[b]="%q0 must have external linkage when declared %q1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) must have external linkage when declared (.*?)",
[d]={"8ca0bfc57ff5",1396277818,"Sema: Require external linkage for dll attributes"},
[e]=a,
[k]={{q,7003,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  if (const InheritableAttr *Attr = getDLLAttr(&ND)) {\n    if ((ND.isExternallyVisible() && AnonNSInMicrosoftMode) || (!AnonNSInMicrosoftMode && (!ND.isExternallyVisible() || (VD && VD->isStaticLocal())))) {\n      S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern) << &ND << Attr;"},{v,6467,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  if (!Class->isExternallyVisible()) {\n    Diag(Class->getLocation(), diag::err_attribute_dll_not_extern) << Class << ClassAttr;"}}
[d]=p,
[c]={"8ca0bfc57ff5",1396277818,"Sema: Require external linkage for dll attributes"},
[k]={{r,7003,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  if (const InheritableAttr *Attr = getDLLAttr(&ND)) {\n    if ((ND.isExternallyVisible() && AnonNSInMicrosoftMode) || (!AnonNSInMicrosoftMode && (!ND.isExternallyVisible() || (VD && VD->isStaticLocal())))) {\n      S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern) << &ND << Attr;"},{w,6467,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  if (!Class->isExternallyVisible()) {\n    Diag(Class->getLocation(), diag::err_attribute_dll_not_extern) << Class << ClassAttr;"}},
[o]={
["clang/test/Sema/dllexport-2.cpp"]={"clang/test/Sema/dllexport-2.cpp:11:33: error: \'j\' must have external linkage when declared \'dllexport\'","clang/test/Sema/dllexport-2.cpp:21:28: error: \'j2\' must have external linkage when declared \'dllexport\'"}
}
},
},
["err_attribute_dll_redeclaration"]={
["err_attribute_dll_redeclaration"]={
[f]="redeclaration of A cannot add B attribute",
[h]="redeclaration of A cannot add B attribute",
[c]=l,
[j]=n,
[e]=n,
[g]="redeclaration of %q0 cannot add %q1 attribute",
[i]=m,
[i]=m,
[j]="redeclaration of (.*?) cannot add (.*?) attribute",
[b]="redeclaration of %q0 cannot add %q1 attribute",
[b]=a,
[g]=l,
[h]=o,
[f]="redeclaration of (.*?) cannot add (.*?) attribute",
[d]={"82f0b06749e5",1396277775,"Sema: Check dll attributes on redeclarations"},
[e]=a,
[k]={{q,7093,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {\n    unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration : diag::err_attribute_dll_redeclaration;"}}
[d]=p,
[c]={"82f0b06749e5",1396277775,"Sema: Check dll attributes on redeclarations"},
[k]={{r,7093,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {\n    unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration : diag::err_attribute_dll_redeclaration;"}},
[o]={
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:49:34: error: redeclaration of \'GlobalRedecl3\' cannot add \'dllexport\' attribute","clang/test/Sema/dllexport.c:104:28: error: redeclaration of \'redecl4\' cannot add \'dllexport\' attribute","clang/test/Sema/dllexport.c:108:35: error: redeclaration of \'redecl5\' cannot add \'dllexport\' attribute"}
}
},
},
["err_attribute_dll_thread_local"]={
["err_attribute_dll_thread_local"]={
[f]="A cannot be thread local when declared B",
[h]="A cannot be thread local when declared B",
[c]=l,
[j]=n,
[e]=n,
[g]="%q0 cannot be thread local when declared %q1",
[i]=m,
[i]=m,
[j]="(.*?) cannot be thread local when declared (.*?)",
[b]="%q0 cannot be thread local when declared %q1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) cannot be thread local when declared (.*?)",
[d]={"5da21da4f6d7",1412405514,"MS ABI: Disallow dllimported/exported variables from having TLS"},
[e]=a,
[k]={{q,14463,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // dllimport/dllexport variables cannot be thread local, their TLS index\n  // isn\'t exported with the variable.\n  if (DLLAttr && VD->getTLSKind()) {\n    if (F && getDLLAttr(F)) {\n    } else {\n      Diag(VD->getLocation(), diag::err_attribute_dll_thread_local) << VD << DLLAttr;"}}
[d]=p,
[c]={"5da21da4f6d7",1412405514,"MS ABI: Disallow dllimported/exported variables from having TLS"},
[k]={{r,14463,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // dllimport/dllexport variables cannot be thread local, their TLS index\n  // isn\'t exported with the variable.\n  if (DLLAttr && VD->getTLSKind()) {\n    if (F && getDLLAttr(F)) {\n    } else {\n      Diag(VD->getLocation(), diag::err_attribute_dll_thread_local) << VD << DLLAttr;"}},
[o]={
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:59:36: error: \'ThreadLocalGlobal\' cannot be thread local when declared \'dllexport\'"}
}
},
},
["err_attribute_dllimport_data_definition"]={
["err_attribute_dllimport_data_definition"]={
[h]="definition of dllimport data",
[j]=n,
[i]=m,
[b]="definition of dllimport data",
[g]=l,
[f]="definition of dllimport data",
[f]="definition of dllimport data",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="definition of dllimport data",
[c]={"8e9791f62c45",1393450033,"Sema: Definition of dllimport globals is not allowed"},
[i]=m,
[k]={{r,13179,"/// 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  // dllimport cannot be used on variable definitions.\n  if (VDecl->hasAttr<DLLImportAttr>() && !VDecl->isStaticDataMember()) {\n    Diag(VDecl->getLocation(), diag::err_attribute_dllimport_data_definition);"}},
[j]="definition of dllimport data",
[o]={
[b]=a,
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:44:34: error: definition of dllimport data","clang/test/Sema/dllimport.c:45:27: error: definition of dllimport data","clang/test/Sema/dllimport.c:46:27: error: definition of dllimport data","clang/test/Sema/dllimport.c:137:36: error: definition of dllimport data","clang/test/Sema/dllimport.c:139:36: error: definition of dllimport data"}
[h]=o,
}
[d]={"8e9791f62c45",1393450033,"Sema: Definition of dllimport globals is not allowed"},
[k]={{q,13179,"/// 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  // dllimport cannot be used on variable definitions.\n  if (VDecl->hasAttr<DLLImportAttr>() && !VDecl->isStaticDataMember()) {\n    Diag(VDecl->getLocation(), diag::err_attribute_dllimport_data_definition);"}}
},
},
["err_attribute_dllimport_function_definition"]={
["err_attribute_dllimport_function_definition"]={
[f]="dllimport cannot be applied to non-inline function definition",
[h]="dllimport cannot be applied to non-inline function definition",
[c]=l,
[j]=n,
[e]=n,
[g]="dllimport cannot be applied to non-inline function definition",
[i]=m,
[i]=m,
[j]="dllimport cannot be applied to non\\-inline function definition",
[b]="dllimport cannot be applied to non-inline function definition",
[b]=a,
[g]=l,
[h]=o,
[f]="dllimport cannot be applied to non\\-inline function definition",
[d]={"b0f2f146bb65",1400191669,"Allow dllimport/dllexport on inline functions and adjust the linkage."},
[e]=a,
[k]={{q,15420,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // dllimport cannot be applied to non-inline function definitions.\n  if (FD->hasAttr<DLLImportAttr>() && !FD->isInlined() && !FD->isTemplateInstantiation()) {\n    Diag(FD->getLocation(), diag::err_attribute_dllimport_function_definition);"}}
[d]=p,
[c]={"b0f2f146bb65",1400191669,"Allow dllimport/dllexport on inline functions and adjust the linkage."},
[k]={{r,15420,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // dllimport cannot be applied to non-inline function definitions.\n  if (FD->hasAttr<DLLImportAttr>() && !FD->isInlined() && !FD->isTemplateInstantiation()) {\n    Diag(FD->getLocation(), diag::err_attribute_dllimport_function_definition);"}},
[o]={
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:188:33: error: dllimport cannot be applied to non-inline function definition"}
}
},
},
["err_attribute_dllimport_function_specialization_definition"]={
["err_attribute_dllimport_function_specialization_definition"]={
[f]="cannot define non-inline dllimport template specialization",
[h]="cannot define non-inline dllimport template specialization",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot define non-inline dllimport template specialization",
[i]=m,
[i]=m,
[j]="cannot define non\\-inline dllimport template specialization",
[b]="cannot define non-inline dllimport template specialization",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot define non\\-inline dllimport template specialization",
[d]={N,1625925174,M},
[e]=a,
[k]={{q,7130,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n        S.Diag(NewDecl->getLocation(), diag::err_attribute_dllimport_function_specialization_definition);"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{r,7130,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n        S.Diag(NewDecl->getLocation(), diag::err_attribute_dllimport_function_specialization_definition);"}},
[o]={
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1322:33: error: cannot define non-inline dllimport template specialization","clang/test/SemaCXX/dllimport.cpp:1326:33: error: cannot define non-inline dllimport template specialization","clang/test/SemaCXX/dllimport.cpp:1332:47: error: cannot define non-inline dllimport template specialization"}
}
},
},
["err_attribute_dllimport_static_field_definition"]={
["err_attribute_dllimport_static_field_definition"]={
[h]="definition of dllimport static field not allowed",
[j]=n,
[i]=m,
[b]="definition of dllimport static field not allowed",
[g]=l,
[f]="definition of dllimport static field not allowed",
[f]="definition of dllimport static field not allowed",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="definition of dllimport static field not allowed",
[c]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members"},
[i]=m,
[k]={{r,14446,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      Diag(VD->getLocation(), IsClassTemplateMember ? diag::warn_attribute_dllimport_static_field_definition : diag::err_attribute_dllimport_static_field_definition);"}},
[j]="definition of dllimport static field not allowed",
[o]={
[b]=a,
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:641:28: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:642:28: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:680:53: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:681:53: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:844:49: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:847:49: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:923:52: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:924:52: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:972:71: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:975:71: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1107:56: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1126:56: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1506:13: error: definition of dllimport static field not allowed"}
[h]=o,
}
[d]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members"},
[k]={{q,14446,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      Diag(VD->getLocation(), IsClassTemplateMember ? diag::warn_attribute_dllimport_static_field_definition : diag::err_attribute_dllimport_static_field_definition);"}}
},
},
["err_attribute_integers_only"]={
["err_attribute_integers_only"]={
[f]="A attribute argument may only refer to a function parameter of integer type",
[h]="A attribute argument may only refer to a function parameter of integer type",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute argument may only refer to a function parameter of integer type",
[i]=m,
[i]=m,
[j]="(.*?) attribute argument may only refer to a function parameter of integer type",
[b]="%0 attribute argument may only refer to a function parameter of integer type",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute argument may only refer to a function parameter of integer type",
[d]={"a747027bc645",1482195942,"Add the alloc_size attribute to clang."},
[e]=a,
[k]={{p,820,"/// Checks to be sure that the given parameter number is in bounds, and\n/// is an integral type. Will emit appropriate diagnostics if this returns\n/// false.\n///\n/// AttrArgNo is used to actually retrieve the argument, so it\'s base-0.\ntemplate <typename AttrInfo> static bool checkParamIsIntegerType(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNo) {\n  if (!ParamTy->isIntegerType() && !ParamTy->isCharType()) {\n    S.Diag(SrcLoc, diag::err_attribute_integers_only) << AI << getFunctionOrMethodParamRange(D, Idx.getASTIndex());"},{p,1754,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  if (!Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isAlignValT()) {\n    Diag(ParamExpr->getBeginLoc(), diag::err_attribute_integers_only) << &TmpAttr << FuncDecl->getParamDecl(Idx.getASTIndex())->getSourceRange();"}}
[d]=p,
[c]={"a747027bc645",1482195942,"Add the alloc_size attribute to clang."},
[k]={{q,820,"/// Checks to be sure that the given parameter number is in bounds, and\n/// is an integral type. Will emit appropriate diagnostics if this returns\n/// false.\n///\n/// AttrArgNo is used to actually retrieve the argument, so it\'s base-0.\ntemplate <typename AttrInfo> static bool checkParamIsIntegerType(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNo) {\n  if (!ParamTy->isIntegerType() && !ParamTy->isCharType()) {\n    S.Diag(SrcLoc, diag::err_attribute_integers_only) << AI << getFunctionOrMethodParamRange(D, Idx.getASTIndex());"},{q,1754,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  if (!Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isAlignValT()) {\n    Diag(ParamExpr->getBeginLoc(), diag::err_attribute_integers_only) << &TmpAttr << FuncDecl->getParamDecl(Idx.getASTIndex())->getSourceRange();"}},
[o]={
["clang/test/Sema/alloc-align-attr.c"]={"clang/test/Sema/alloc-align-attr.c:10:69: error: \'alloc_align\' attribute argument may only refer to a function parameter of integer type"}
}
},
},
["err_attribute_invalid_argument"]={
["err_attribute_invalid_argument"]={
[f]="... is an invalid argument to attribute A",
[h]="... is an invalid argument to attribute A",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{a reference type|an array type|a non-vector or non-vectorizable scalar type}0 is an invalid argument to attribute %1",
[i]=m,
[i]=m,
[j]="(?:a reference type|an array type|a non\\-vector or non\\-vectorizable scalar type) is an invalid argument to attribute (.*?)",
[b]="%select{a reference type|an array type|a non-vector or non-vectorizable scalar type}0 is an invalid argument to attribute %1",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:a reference type|an array type|a non\\-vector or non\\-vectorizable scalar type) is an invalid argument to attribute (.*?)",
[d]={"d293cbd5fd44",1564077051,"Add lifetime categories attributes"},
[e]=a,
[k]={{p,3271,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ParmType->isExtVectorType() && !ParmType->isFloatingType() && (ParmType->isBooleanType() || !ParmType->isIntegralType(S.getASTContext()))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << 2 << AL;"},{p,5236,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.hasParsedType()) {\n    if (SelectIdx != ~0U) {\n      S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << SelectIdx << AL;"}}
[d]=p,
[c]={"d293cbd5fd44",1564077051,"Add lifetime categories attributes"},
[k]={{q,3271,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ParmType->isExtVectorType() && !ParmType->isFloatingType() && (ParmType->isBooleanType() || !ParmType->isIntegralType(S.getASTContext()))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << 2 << AL;"},{q,5236,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.hasParsedType()) {\n    if (SelectIdx != ~0U) {\n      S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << SelectIdx << AL;"}},
[o]={
["clang/test/SemaOpenCL/invalid-kernel-attrs.cl"]={"clang/test/SemaOpenCL/invalid-kernel-attrs.cl:7:23: error: a non-vector or non-vectorizable scalar type is an invalid argument to attribute \'vec_type_hint\'","clang/test/SemaOpenCL/invalid-kernel-attrs.cl:9:23: error: a non-vector or non-vectorizable scalar type is an invalid argument to attribute \'vec_type_hint\'"}
}
},
},
["err_attribute_invalid_bitint_vector_type"]={
["err_attribute_invalid_bitint_vector_type"]={
[f]="\'_BitInt\' vector element width must be ...",
[h]="\'_BitInt\' vector element width must be ...",
[c]=l,
[j]=n,
[e]=n,
[g]="\'_BitInt\' vector element width must be %select{a power of 2|at least as wide as \'CHAR_BIT\'}0",
[i]=m,
[i]=m,
[j]="\'_BitInt\' vector element width must be (?:a power of 2|at least as wide as \'CHAR_BIT\')",
[b]="\'_BitInt\' vector element width must be %select{a power of 2|at least as wide as \'CHAR_BIT\'}0",
[b]=a,
[g]=l,
[h]=o,
[f]="\'_BitInt\' vector element width must be (?:a power of 2|at least as wide as \'CHAR_BIT\')",
[d]={N,1625925174,M},
[e]=a,
[k]={{r,2716,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (const auto *BIT = CurType->getAs<BitIntType>()) {\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"},{r,2797,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (T->isBitIntType()) {\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{s,2716,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (const auto *BIT = CurType->getAs<BitIntType>()) {\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"},{s,2797,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (T->isBitIntType()) {\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"}},
[o]={
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:88:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:90:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:92:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:94:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:96:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:98:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:100:36: error: \'_BitInt\' vector element width must be a power of 2","clang/test/SemaCXX/ext-int.cpp:102:36: error: \'_BitInt\' vector element width must be a power of 2"}
}
},
},
["err_attribute_invalid_implicit_this_argument"]={
["err_attribute_invalid_implicit_this_argument"]={
[f]="A attribute is invalid for the implicit this argument",
[h]="A attribute is invalid for the implicit this argument",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute is invalid for the implicit this argument",
[i]=m,
[i]=m,
[j]="(.*?) attribute is invalid for the implicit this argument",
[b]="%0 attribute is invalid for the implicit this argument",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute is invalid for the implicit this argument",
[d]={"743682bb9f66",1289896543,"Re-work the handling of implicit \'this\' arguments and silly GCC-style attribute"},
[e]=a,
[k]={{p,333,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  if (HasImplicitThisParam && !CanIndexImplicitThis) {\n    if (IdxSource == 1) {\n      S.Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument) << &AI << IdxExpr->getSourceRange();"}}
[d]=p,
[c]={"743682bb9f66",1289896543,"Re-work the handling of implicit \'this\' arguments and silly GCC-style attribute"},
[k]={{q,333,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  if (HasImplicitThisParam && !CanIndexImplicitThis) {\n    if (IdxSource == 1) {\n      S.Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument) << &AI << IdxExpr->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/alloc-align-attr.cpp"]={"clang/test/SemaCXX/alloc-align-attr.cpp:4:35: error: \'alloc_align\' attribute is invalid for the implicit this argument"}
}
},
},
["err_attribute_invalid_matrix_type"]={
["err_attribute_invalid_matrix_type"]={
[f]="invalid matrix element type A",
[h]="invalid matrix element type A",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid matrix element type %0",
[i]=m,
[i]=m,
[j]="invalid matrix element type (.*?)",
[b]="invalid matrix element type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="invalid matrix element type (.*?)",
[d]={W,1576908663,V},
[e]=a,
[k]={{r,2842,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Check element type, if it is not dependent.\n  if (!ElementTy->isDependentType() && !MatrixType::isValidElementType(ElementTy)) {\n    Diag(AttrLoc, diag::err_attribute_invalid_matrix_type) << ElementTy;"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{s,2842,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // Check element type, if it is not dependent.\n  if (!ElementTy->isDependentType() && !MatrixType::isValidElementType(ElementTy)) {\n    Diag(AttrLoc, diag::err_attribute_invalid_matrix_type) << ElementTy;"}},
[o]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:120:28: error: invalid matrix element type \'s\'","clang/test/SemaTemplate/matrix-type.cpp:141:34: error: invalid matrix element type \'int_ptr\' (aka \'int *\')"}
}
},
},
["err_attribute_invalid_on_decl"]={
["err_attribute_invalid_on_decl"]={
[f]="A... cannot be applied to a declaration",
[h]="A... cannot be applied to a declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="%0%select{ attribute|}1 cannot be applied to a declaration",
[i]=m,
[i]=m,
[j]="(.*?)(?: attribute|) cannot be applied to a declaration",
[b]="%0%select{ attribute|}1 cannot be applied to a declaration",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?)(?: attribute|) cannot be applied to a declaration",
[d]={N,1625925174,M},
[e]=a,
[k]={{p,8826,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  default:\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl) << AL << AL.isRegularKeywordAttribute() << D->getLocation();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",3886,"static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) {\n  if (DeclSubjects.empty()) {\n    // If there are no decl subjects but there are stmt subjects, diagnose\n    // trying to apply a statement attribute to a declaration.\n    if (!StmtSubjects.empty()) {\n      OS << \"  S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl)\\n\";"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{q,8826,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  default:\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl) << AL << AL.isRegularKeywordAttribute() << D->getLocation();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",3886,"static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) {\n  if (DeclSubjects.empty()) {\n    // If there are no decl subjects but there are stmt subjects, diagnose\n    // trying to apply a statement attribute to a declaration.\n    if (!StmtSubjects.empty()) {\n      OS << \"  S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl)\\n\";"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp:46:3: error: \'fallthrough\' attribute cannot be applied to a declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp:48:17: error: \'fallthrough\' attribute cannot be applied to a declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp:50:8: error: \'fallthrough\' attribute cannot be applied to a declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp:51:9: error: \'fallthrough\' attribute cannot be applied to a declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp:53:3: error: \'fallthrough\' attribute cannot be applied to a declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp:55:5: error: \'fallthrough\' attribute cannot be applied to a declaration"}
}
},
},
["err_attribute_invalid_rvv_type"]={
["err_attribute_invalid_rvv_type"]={
[f]="A attribute applied to non-RVV type B",
[h]="A attribute applied to non-RVV type B",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute applied to non-RVV type %1",
[i]=m,
[i]=m,
[j]="(.*?) attribute applied to non\\-RVV type (.*?)",
[b]="%0 attribute applied to non-RVV type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute applied to non\\-RVV type (.*?)",
[d]={N,1625925174,M},
[e]=a,
[k]={{r,8369,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Attribute can only be attached to a single RVV vector type.\n  if (!CurType->isRVVVLSBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_rvv_type) << Attr << CurType;"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{s,8369,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Attribute can only be attached to a single RVV vector type.\n  if (!CurType->isRVVVLSBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_rvv_type) << Attr << CurType;"}},
[o]={
["clang/test/Sema/attr-riscv-rvv-vector-bits.c"]={"clang/test/Sema/attr-riscv-rvv-vector-bits.c:232:50: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'vbool1_t\' (aka \'__rvv_bool1_t\')","clang/test/Sema/attr-riscv-rvv-vector-bits.c:235:39: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'void *\'","clang/test/Sema/attr-riscv-rvv-vector-bits.c:236:37: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'int\'","clang/test/Sema/attr-riscv-rvv-vector-bits.c:237:39: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'float\'"}
}
},
},
["err_attribute_invalid_size"]={
["err_attribute_invalid_size"]={
[h]="vector size not an integral multiple of component size",
[j]=n,
[i]=m,
[b]="vector size not an integral multiple of component size",
[g]=l,
[f]="vector size not an integral multiple of component size",
[f]="vector size not an integral multiple of component size",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="vector size not an integral multiple of component size",
[c]={C,1236199783,B},
[i]=m,
[k]={{s,2756,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (!TypeSize || VectorSizeBits % TypeSize) {\n    Diag(AttrLoc, diag::err_attribute_invalid_size) << SizeExpr->getSourceRange();"}},
[j]="vector size not an integral multiple of component size",
[o]={
[b]=a,
["clang/test/SemaCUDA/amdgpu-bf16.cu"]={"clang/test/SemaCUDA/amdgpu-bf16.cu:57:35: error: vector size not an integral multiple of component size"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{r,2756,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (!TypeSize || VectorSizeBits % TypeSize) {\n    Diag(AttrLoc, diag::err_attribute_invalid_size) << SizeExpr->getSourceRange();"}}
},
},
["err_attribute_invalid_sve_type"]={
["err_attribute_invalid_sve_type"]={
[f]="A attribute applied to non-SVE type B",
[h]="A attribute applied to non-SVE type B",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute applied to non-SVE type %1",
[i]=m,
[i]=m,
[j]="(.*?) attribute applied to non\\-SVE type (.*?)",
[b]="%0 attribute applied to non-SVE type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute applied to non\\-SVE type (.*?)",
[d]={T,1582847864,U},
[e]=a,
[k]={{r,8296,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Attribute can only be attached to a single SVE vector or predicate type.\n  if (!CurType->isVLSTBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_sve_type) << Attr << CurType;"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{s,8296,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Attribute can only be attached to a single SVE vector or predicate type.\n  if (!CurType->isVLSTBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_sve_type) << Attr << CurType;"}},
[o]={
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:81:39: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'void *\'","clang/test/Sema/attr-arm-sve-vector-bits.c:82:37: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'int\'","clang/test/Sema/attr-arm-sve-vector-bits.c:83:39: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'float\'","clang/test/Sema/attr-arm-sve-vector-bits.c:84:44: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'svint8x2_t\' (aka \'__clang_svint8x2_t\')","clang/test/Sema/attr-arm-sve-vector-bits.c:85:47: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'svfloat32x3_t\' (aka \'__clang_svfloat32x3_t\')"}
}
},
},
["err_attribute_invalid_vector_type"]={
["err_attribute_invalid_vector_type"]={
[f]="invalid vector element type A",
[h]="invalid vector element type A",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid vector element type %0",
[i]=m,
[i]=m,
[j]="invalid vector element type (.*?)",
[b]="invalid vector element type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="invalid vector element type (.*?)",
[d]={A,1236199783,z},
[e]=a,
[k]={{r,2709,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // The base type must be integer (not Boolean or enumeration) or float, and\n  // can\'t already be a vector.\n  if ((!CurType->isDependentType() && (!CurType->isBuiltinType() || CurType->isBooleanType() || (!CurType->isIntegerType() && !CurType->isRealFloatingType())) && !CurType->isBitIntType()) || CurType->isArrayType()) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << CurType;"},{r,2789,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if ((!T->isDependentType() && !T->isIntegerType() && !T->isRealFloatingType()) || (IsNoBoolVecLang && T->isBooleanType())) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << T;"},{r,8231,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // Only certain element types are supported for Neon vectors.\n  if (!isPermittedNeonBaseType(CurType, VecKind, S) && !IsTargetCUDAAndHostARM) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{s,2709,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // The base type must be integer (not Boolean or enumeration) or float, and\n  // can\'t already be a vector.\n  if ((!CurType->isDependentType() && (!CurType->isBuiltinType() || CurType->isBooleanType() || (!CurType->isIntegerType() && !CurType->isRealFloatingType())) && !CurType->isBitIntType()) || CurType->isArrayType()) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << CurType;"},{s,2789,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if ((!T->isDependentType() && !T->isIntegerType() && !T->isRealFloatingType()) || (IsNoBoolVecLang && T->isBooleanType())) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << T;"},{s,8231,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // Only certain element types are supported for Neon vectors.\n  if (!isPermittedNeonBaseType(CurType, VecKind, S) && !IsTargetCUDAAndHostARM) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;"}},
[o]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:56:25: error: invalid vector element type \'float2\' (vector of 2 \'float\' values)"}
}
},
},
["err_attribute_missing_on_first_decl"]={
["err_attribute_missing_on_first_decl"]={
[f]="A attribute does not appear on the first declaration",
[h]="A attribute does not appear on the first declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute does not appear on the first declaration",
[i]=m,
[i]=m,
[j]="(.*?) attribute does not appear on the first declaration",
[b]="%0 attribute does not appear on the first declaration",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute does not appear on the first declaration",
[d]={Lb,1615397021,Kb},
[e]=a,
[k]={{q,3710,"/// 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  if (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"},{q,3718,"/// 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  if (auto *EA = New->getAttr<ErrorAttr>()) {\n    if (!Old->hasAttr<ErrorAttr>()) {\n      Diag(EA->getLocation(), diag::err_attribute_missing_on_first_decl) << EA;"},{q,4043,"/// 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  if (getLangOpts().CPlusPlus) {\n    // C++11 [dcl.attr.noreturn]p1:\n    //  The first declaration of a function shall specify the noreturn\n    //  attribute if any declaration of that function specifies the noreturn\n    //  attribute.\n    if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>())\n      if (!Old->hasAttr<CXX11NoReturnAttr>()) {\n        Diag(NRA->getLocation(), diag::err_attribute_missing_on_first_decl) << NRA;"},{q,4600,"/// 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  if (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"}}
[d]=p,
[c]={Kb,1615397021,Mb},
[k]={{r,3710,"/// 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  if (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"},{r,3718,"/// 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  if (auto *EA = New->getAttr<ErrorAttr>()) {\n    if (!Old->hasAttr<ErrorAttr>()) {\n      Diag(EA->getLocation(), diag::err_attribute_missing_on_first_decl) << EA;"},{r,4043,"/// 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  if (getLangOpts().CPlusPlus) {\n    // C++11 [dcl.attr.noreturn]p1:\n    //  The first declaration of a function shall specify the noreturn\n    //  attribute if any declaration of that function specifies the noreturn\n    //  attribute.\n    if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>())\n      if (!Old->hasAttr<CXX11NoReturnAttr>()) {\n        Diag(NRA->getLocation(), diag::err_attribute_missing_on_first_decl) << NRA;"},{r,4600,"/// 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  if (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:28:3: error: \'noreturn\' attribute does not appear on the first declaration"}
}
},
},
["err_attribute_multiple_objc_gc"]={
["err_attribute_multiple_objc_gc"]={
[h]="multiple garbage collection attributes specified for type",
[j]=n,
[i]=m,
[b]="multiple garbage collection attributes specified for type",
[g]=l,
[f]="multiple garbage collection attributes specified for type",
[f]="multiple garbage collection attributes specified for type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="multiple garbage collection attributes specified for type",
[c]={v,1237025389,u},
[i]=m,
[k]={{s,7100,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (type.getObjCGCAttr() != Qualifiers::GCNone) {\n    S.Diag(attr.getLoc(), diag::err_attribute_multiple_objc_gc);"}}
[j]="multiple garbage collection attributes specified for type",
[b]=a,
[h]=o,
[d]={u,1237025389,t},
[k]={{r,7100,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (type.getObjCGCAttr() != Qualifiers::GCNone) {\n    S.Diag(attr.getLoc(), diag::err_attribute_multiple_objc_gc);"}}
},
},
["err_attribute_no_builtin_on_defaulted_deleted_function"]={
["err_attribute_no_builtin_on_defaulted_deleted_function"]={
[f]="A attribute has no effect on defaulted or deleted functions",
[h]="A attribute has no effect on defaulted or deleted functions",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute has no effect on defaulted or deleted functions",
[i]=m,
[i]=m,
[j]="(.*?) attribute has no effect on defaulted or deleted functions",
[b]="%0 attribute has no effect on defaulted or deleted functions",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute has no effect on defaulted or deleted functions",
[d]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[e]=a,
[k]={{q,10801,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    case FunctionDefinitionKind::Deleted:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_defaulted_deleted_function) << NBA->getSpelling();"}}
[d]=p,
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[k]={{r,10801,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    case FunctionDefinitionKind::Deleted:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_defaulted_deleted_function) << NBA->getSpelling();"}},
[o]={
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:36:18: error: no_builtin attribute has no effect on defaulted or deleted functions","clang/test/Sema/no-builtin.cpp:41:18: error: no_builtin attribute has no effect on defaulted or deleted functions"}
}
},
},
["err_attribute_no_builtin_on_non_definition"]={
["err_attribute_no_builtin_on_non_definition"]={
[f]="A attribute is permitted on definitions only",
[h]="A attribute is permitted on definitions only",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute is permitted on definitions only",
[i]=m,
[i]=m,
[j]="(.*?) attribute is permitted on definitions only",
[b]="%0 attribute is permitted on definitions only",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute is permitted on definitions only",
[d]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[e]=a,
[k]={{q,10805,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    case FunctionDefinitionKind::Declaration:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_non_definition) << NBA->getSpelling();"}}
[d]=p,
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[k]={{r,10805,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    case FunctionDefinitionKind::Declaration:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_non_definition) << NBA->getSpelling();"}},
[o]={
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:30:48: error: no_builtin attribute is permitted on definitions only","clang/test/Sema/no-builtin.cpp:44:34: error: no_builtin attribute is permitted on definitions only","clang/test/Sema/no-builtin.cpp:50:41: error: no_builtin attribute is permitted on definitions only"}
}
},
},
["err_attribute_no_builtin_wildcard_or_builtin_name"]={
["err_attribute_no_builtin_wildcard_or_builtin_name"]={
[f]="empty A cannot be composed with named ones",
[h]="empty A cannot be composed with named ones",
[c]=l,
[j]=n,
[e]=n,
[g]="empty %0 cannot be composed with named ones",
[i]=m,
[i]=m,
[j]="empty (.*?) cannot be composed with named ones",
[b]="empty %0 cannot be composed with named ones",
[b]=a,
[g]=l,
[h]=o,
[f]="empty (.*?) cannot be composed with named ones",
[d]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[e]=a,
[k]={{p,1164,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Empty no_builtin must be on its own.\n  if (HasWildcard && Names.size() > 1)\n    S.Diag(D->getLocation(), diag::err_attribute_no_builtin_wildcard_or_builtin_name) << AL;"}}
[d]=p,
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[k]={{q,1164,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Empty no_builtin must be on its own.\n  if (HasWildcard && Names.size() > 1)\n    S.Diag(D->getLocation(), diag::err_attribute_no_builtin_wildcard_or_builtin_name) << AL;"}},
[o]={
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:22:6: error: empty \'no_builtin\' cannot be composed with named ones"}
}
},
},
["err_attribute_no_member_function"]={
["err_attribute_no_member_function"]={
[f]="A attribute cannot be applied to non-static member functions",
[h]="A attribute cannot be applied to non-static member functions",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute cannot be applied to non-static member functions",
[i]=m,
[i]=m,
[j]="(.*?) attribute cannot be applied to non\\-static member functions",
[b]="%0 attribute cannot be applied to non-static member functions",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute cannot be applied to non\\-static member functions",
[d]={db,1616787805,cb},
[e]=a,
[k]={{p,1025,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MethodDecl = dyn_cast<CXXMethodDecl>(DeclFD))\n    if (!MethodDecl->isStatic()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_no_member_function) << AL;"}}
[d]=p,
[c]={cb,1616787805,jb},
[k]={{q,1025,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MethodDecl = dyn_cast<CXXMethodDecl>(DeclFD))\n    if (!MethodDecl->isStatic()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_no_member_function) << AL;"}},
[o]={
["clang/test/Sema/attr-diagnose-as-builtin.c"]={"clang/test/Sema/attr-diagnose-as-builtin.c:104:18: error: \'diagnose_as_builtin\' attribute cannot be applied to non-static member functions"}
}
},
},
["err_attribute_no_member_pointers"]={
["err_attribute_no_member_pointers"]={
[f]="A attribute cannot be used with pointers to members",
[h]="A attribute cannot be used with pointers to members",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute cannot be used with pointers to members",
[i]=m,
[i]=m,
[j]="(.*?) attribute cannot be used with pointers to members",
[b]="%0 attribute cannot be used with pointers to members",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute cannot be used with pointers to members",
[d]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ..."},
[e]=a,
[k]={{r,7380,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n      S.Diag(PAttr.getLoc(), diag::err_attribute_no_member_pointers) << PAttr;"}}
[d]=p,
[c]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ..."},
[k]={{s,7380,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n      S.Diag(PAttr.getLoc(), diag::err_attribute_no_member_pointers) << PAttr;"}},
[o]={
["clang/test/Sema/MicrosoftCompatibility.cpp"]={"clang/test/Sema/MicrosoftCompatibility.cpp:10:15: error: \'__uptr\' attribute cannot be used with pointers to members"}
}
},
},
["err_attribute_not_clinkage"]={
["err_attribute_not_clinkage"]={
[f]="function type with A attribute must have C linkage",
[h]="function type with A attribute must have C linkage",
[c]=l,
[j]=n,
[e]=n,
[g]="function type with %0 attribute must have C linkage",
[i]=m,
[i]=m,
[j]="function type with (.*?) attribute must have C linkage",
[b]="function type with %0 attribute must have C linkage",
[b]=a,
[g]=l,
[h]=o,
[f]="function type with (.*?) attribute must have C linkage",
[d]={W,1576908663,V},
[e]=a,
[k]={{p,2146,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus && !D->getDeclContext()->isExternCContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_clinkage) << AL;"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{q,2146,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus && !D->getDeclContext()->isExternCContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_clinkage) << AL;"}},
[o]={
["clang/test/SemaCXX/arm-cmse.cpp"]={"clang/test/SemaCXX/arm-cmse.cpp:5:27: error: function type with \'cmse_nonsecure_entry\' attribute must have C linkage"}
}
},
},
["err_attribute_not_import_attr"]={
["err_attribute_not_import_attr"]={
[f]="A attribute cannot be applied to a module import",
[h]="A attribute cannot be applied to a module import",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute cannot be applied to a module import",
[i]=m,
[i]=m,
[j]="(.*?) attribute cannot be applied to a module import",
[b]="%0 attribute cannot be applied to a module import",
[b]=a,
[g]=l,
[h]="Modules Issue",
[f]="(.*?) attribute cannot be applied to a module import",
[d]={"49cc1ccb00df",1471557582,"C++ Modules TS: Add parsing support for module import declaration."},
[e]=a,
[k]={{Jb,2534,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_import_attr, diag::err_keyword_not_import_attr,"}}
[d]="Modules Issue",
[c]={"49cc1ccb00df",1471557582,"C++ Modules TS: Add parsing support for module import declaration."},
[k]={{Sb,2534,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_import_attr, diag::err_keyword_not_import_attr,"}}
},
},
["err_attribute_not_module_attr"]={
["err_attribute_not_module_attr"]={
[f]="A attribute cannot be applied to a module",
[h]="A attribute cannot be applied to a module",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute cannot be applied to a module",
[i]=m,
[i]=m,
[j]="(.*?) attribute cannot be applied to a module",
[b]="%0 attribute cannot be applied to a module",
[b]=a,
[g]=l,
[h]="Modules Issue",
[f]="(.*?) attribute cannot be applied to a module",
[d]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions"},
[e]=a,
[k]={{Jb,2464,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_module_attr, diag::err_keyword_not_module_attr,"}}
[d]="Modules Issue",
[c]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions"},
[k]={{Sb,2464,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_module_attr, diag::err_keyword_not_module_attr,"}}
},
},
["err_attribute_not_supported_in_lang"]={
["err_attribute_not_supported_in_lang"]={
[f]="A attribute is not supported in ...",
[h]="A attribute is not supported in ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute is not supported in %select{C|C++|Objective-C}1",
[i]=m,
[i]=m,
[j]="(.*?) attribute is not supported in (?:C|C\\+\\+|Objective\\-C)",
[b]="%0 attribute is not supported in %select{C|C++|Objective-C}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute is not supported in (?:C|C\\+\\+|Objective\\-C)",
[d]={"df8fe4c91cf2",1385328916,"__declspec(uuid) is only supported for C++ code according to MSDN (as well as behaviorally in MSVC)...."},
[e]=a,
[k]={{p,2136,"static void handleCommonAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) << AL << AttributeLangSupport::Cpp;"},{p,6989,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.LangOpts.CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) << AL << AttributeLangSupport::C;"},{p,7291,"static void handleMSInheritanceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.LangOpts.CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) << AL << AttributeLangSupport::C;"}}
[d]=p,
[c]={"df8fe4c91cf2",1385328916,"__declspec(uuid) is only supported for C++ code according to MSDN (as well as behaviorally in MSVC)...."},
[k]={{q,2136,"static void handleCommonAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) << AL << AttributeLangSupport::Cpp;"},{q,6989,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.LangOpts.CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) << AL << AttributeLangSupport::C;"},{q,7291,"static void handleMSInheritanceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.LangOpts.CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_supported_in_lang) << AL << AttributeLangSupport::C;"}},
[o]={
["clang/test/SemaCXX/attr-common.cpp"]={"clang/test/SemaCXX/attr-common.cpp:3:16: error: \'common\' attribute is not supported in C++"}
}
},
},
["err_attribute_not_supported_on_arch"]={
["err_attribute_not_supported_on_arch"]={
[f]="A attribute is not supported on \'B\'",
[h]="A attribute is not supported on \'B\'",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute is not supported on \'%1\'",
[i]=m,
[i]=m,
[j]="(.*?) attribute is not supported on \'(.*?)\'",
[b]="%0 attribute is not supported on \'%1\'",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute is not supported on \'(.*?)\'",
[d]={"b51bcaf2f027",1491578027,"Sema: prevent __declspec(naked) use on x64"},
[e]=a,
[k]={{p,2165,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    if (Arch != llvm::Triple::x86 && (Arch != llvm::Triple::arm && Arch != llvm::Triple::thumb)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_not_supported_on_arch) << AL << Triple.getArchName();"}}
[d]=p,
[c]={"b51bcaf2f027",1491578027,"Sema: prevent __declspec(naked) use on x64"},
[k]={{q,2165,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    if (Arch != llvm::Triple::x86 && (Arch != llvm::Triple::arm && Arch != llvm::Triple::thumb)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_not_supported_on_arch) << AL << Triple.getArchName();"}},
[o]={
["clang/test/Sema/declspec-naked.c"]={"clang/test/Sema/declspec-naked.c:8:17: error: \'naked\' attribute is not supported on \'x86_64\'"}
}
},
},
["err_attribute_not_type_attr"]={
["err_attribute_not_type_attr"]={
[f]="A... cannot be applied to types",
[h]="A... cannot be applied to types",
[c]=l,
[j]=n,
[e]=n,
[g]="%0%select{ attribute|}1 cannot be applied to types",
[i]=m,
[i]=m,
[j]="(.*?)(?: attribute|) cannot be applied to types",
[b]="%0%select{ attribute|}1 cannot be applied to types",
[b]=a,
[g]=l,
[h]=B,
[f]="(.*?)(?: attribute|) cannot be applied to types",
[d]={"10876ef5714f",1358386242,"Implement C++11 semantics for [[noreturn]] attribute. This required splitting"},
[e]=a,
[k]={{D,3352,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    DoneWithDeclSpec:\n      if (!AttrsLastTime)\n      else {\n        // Reject C++11 / C2x attributes that aren\'t type attributes.\n        for (const ParsedAttr &PA : attrs) {\n          Diag(PA.getLoc(), diag::err_attribute_not_type_attr) << PA << PA.isRegularKeywordAttribute();"},{r,8571,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    default:\n      // A [[]] attribute on a declarator chunk must appertain to a type.\n      if ((attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) && TAL == TAL_DeclChunk) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_not_type_attr) << attr << attr.isRegularKeywordAttribute();"}}
[d]=A,
[c]={"10876ef5714f",1358386242,"Implement C++11 semantics for [[noreturn]] attribute. This required splitting"},
[k]={{E,3352,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    DoneWithDeclSpec:\n      if (!AttrsLastTime)\n      else {\n        // Reject C++11 / C2x attributes that aren\'t type attributes.\n        for (const ParsedAttr &PA : attrs) {\n          Diag(PA.getLoc(), diag::err_attribute_not_type_attr) << PA << PA.isRegularKeywordAttribute();"},{s,8571,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    default:\n      // A [[]] attribute on a declarator chunk must appertain to a type.\n      if ((attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) && TAL == TAL_DeclChunk) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_not_type_attr) << attr << attr.isRegularKeywordAttribute();"}},
[o]={
["clang/test/Sema/attr-only-in-default-eval.cpp"]={"clang/test/Sema/attr-only-in-default-eval.cpp:21:8: error: \'available_only_in_default_eval_method\' attribute cannot be applied to types","clang/test/Sema/attr-only-in-default-eval.cpp:23:14: error: \'available_only_in_default_eval_method\' attribute cannot be applied to types"}
}
},
},
["err_attribute_only_once_per_parameter"]={
["err_attribute_only_once_per_parameter"]={
[f]="A attribute can only be applied once per parameter",
[h]="A attribute can only be applied once per parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute can only be applied once per parameter",
[i]=m,
[i]=m,
[j]="(.*?) attribute can only be applied once per parameter",
[b]="%0 attribute can only be applied once per parameter",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute can only be applied once per parameter",
[d]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[e]=a,
[k]={{p,1175,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->hasAttr<PassObjectSizeAttr>()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_only_once_per_parameter) << AL;"}}
[d]=p,
[c]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[k]={{q,1175,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->hasAttr<PassObjectSizeAttr>()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_only_once_per_parameter) << AL;"}},
[o]={
["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:18:8: error: \'pass_object_size\' attribute can only be applied once per parameter"}
}
},
},
["err_attribute_output_parameter"]={
["err_attribute_output_parameter"]={
[h]="attribute only applies to output parameters",
[j]=n,
[i]=m,
[b]="attribute only applies to output parameters",
[g]=l,
[f]="attribute only applies to output parameters",
[f]="attribute only applies to output parameters",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="attribute only applies to output parameters",
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[i]=m,
[k]={{q,8564,"static void handleAcquireHandleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn if the parameter is definitely not an output parameter.\n  if (const auto *PVD = dyn_cast<ParmVarDecl>(D)) {\n    if (PVD->getType()->isIntegerType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_output_parameter) << AL.getRange();"}},
[j]="attribute only applies to output parameters",
[o]={
[b]=a,
["clang/test/Sema/attr-handles.cpp"]={"clang/test/Sema/attr-handles.cpp:7:29: error: attribute only applies to output parameters"}
[h]=o,
}
[d]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{p,8564,"static void handleAcquireHandleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn if the parameter is definitely not an output parameter.\n  if (const auto *PVD = dyn_cast<ParmVarDecl>(D)) {\n    if (PVD->getType()->isIntegerType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_output_parameter) << AL.getRange();"}}
},
},
["err_attribute_overloadable_mismatch"]={
["err_attribute_overloadable_mismatch"]={
[f]="redeclaration of A must ...have the \'overloadable\' attribute",
[h]="redeclaration of A must ...have the \'overloadable\' attribute",
[c]=l,
[j]=n,
[e]=n,
[g]="redeclaration of %0 must %select{not |}1have the \'overloadable\' attribute",
[i]=m,
[i]=m,
[j]="redeclaration of (.*?) must (?:not |)have the \'overloadable\' attribute",
[b]="redeclaration of %0 must %select{not |}1have the \'overloadable\' attribute",
[b]=a,
[g]=l,
[h]=o,
[f]="redeclaration of (.*?) must (?:not |)have the \'overloadable\' attribute",
[d]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions."},
[e]=a,
[k]={{q,3730,"/// 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  if (!getLangOpts().CPlusPlus) {\n    if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {\n      Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) << New << OldOvl;"}}
[d]=p,
[c]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions."},
[k]={{r,3730,"/// 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  if (!getLangOpts().CPlusPlus) {\n    if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {\n      Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) << New << OldOvl;"}},
[o]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:9:6: error: redeclaration of \'f\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:79:35: error: redeclaration of \'invalid\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:182:6: error: redeclaration of \'to_foo0\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:187:6: error: redeclaration of \'to_foo1\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:189:6: error: redeclaration of \'to_foo1\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:193:6: error: redeclaration of \'to_foo2\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:194:6: error: redeclaration of \'to_foo2\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:196:6: error: redeclaration of \'to_foo2\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:202:6: error: redeclaration of \'to_foo3\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:205:6: error: redeclaration of \'to_foo4\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:218:6: error: redeclaration of \'to_foo6\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:222:6: error: redeclaration of \'to_foo7\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:233:6: error: redeclaration of \'to_foo9\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:244:6: error: redeclaration of \'to_foo10\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:245:6: error: redeclaration of \'to_foo10\' must have the \'overloadable\' attribute"}
}
},
},
["err_attribute_overloadable_multiple_unmarked_overloads"]={
["err_attribute_overloadable_multiple_unmarked_overloads"]={
[h]="at most one overload for a given name may lack the \'overloadable\' attribute",
[j]=n,
[i]=m,
[b]="at most one overload for a given name may lack the \'overloadable\' attribute",
[g]=l,
[f]="at most one overload for a given name may lack the \'overloadable\' attribute",
[f]="at most one overload for a given name may lack the \'overloadable\' attribute",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="at most one overload for a given name may lack the \'overloadable\' attribute",
[c]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions."},
[i]=m,
[k]={{r,11887,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (Redeclaration) {\n  } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks && !NewFD->getAttr<OverloadableAttr>()) {\n    if (OtherUnmarkedIter != Previous.end()) {\n      Diag(NewFD->getLocation(), diag::err_attribute_overloadable_multiple_unmarked_overloads);"}},
[j]="at most one overload for a given name may lack the \'overloadable\' attribute",
[o]={
[b]=a,
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:211:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:213:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:214:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:236:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:243:6: error: at most one overload for a given name may lack the \'overloadable\' attribute"}
[h]=o,
}
[d]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions."},
[k]={{q,11887,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (Redeclaration) {\n  } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks && !NewFD->getAttr<OverloadableAttr>()) {\n    if (OtherUnmarkedIter != Previous.end()) {\n      Diag(NewFD->getLocation(), diag::err_attribute_overloadable_multiple_unmarked_overloads);"}}
},
},
["err_attribute_overloadable_no_prototype"]={
["err_attribute_overloadable_no_prototype"]={
[f]="\'overloadable\' function A must have a prototype",
[h]="\'overloadable\' function A must have a prototype",
[c]=l,
[j]=n,
[e]=n,
[g]="\'overloadable\' function %0 must have a prototype",
[i]=m,
[i]=m,
[j]="\'overloadable\' function (.*?) must have a prototype",
[b]="\'overloadable\' function %0 must have a prototype",
[b]=a,
[g]=l,
[h]=o,
[f]="\'overloadable\' function (.*?) must have a prototype",
[d]={A,1236199783,z},
[e]=a,
[k]={{q,10621,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (NewFD->hasAttr<OverloadableAttr>() && !NewFD->getType()->getAs<FunctionProtoType>()) {\n    Diag(NewFD->getLocation(), diag::err_attribute_overloadable_no_prototype) << NewFD;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{r,10621,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (NewFD->hasAttr<OverloadableAttr>() && !NewFD->getType()->getAs<FunctionProtoType>()) {\n    Diag(NewFD->getLocation(), diag::err_attribute_overloadable_no_prototype) << NewFD;"}},
[o]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:68:42: error: \'overloadable\' function \'f0\' must have a prototype","clang/test/Sema/overloadable.c:70:39: error: \'overloadable\' function \'f1\' must have a prototype","clang/test/Sema/overloadable.c:78:35: error: \'overloadable\' function \'invalid\' must have a prototype"}
}
},
},
["err_attribute_parameter_types"]={
["err_attribute_parameter_types"]={
[f]="A attribute parameter types do not match: parameter B of function C has type D, but parameter E of function F has type G",
[h]="A attribute parameter types do not match: parameter B of function C has type D, but parameter E of function F has type G",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute parameter types do not match: parameter %1 of function %2 has type %3, but parameter %4 of function %5 has type %6",
[i]=m,
[i]=m,
[j]="(.*?) attribute parameter types do not match\\: parameter (.*?) of function (.*?) has type (.*?), but parameter (.*?) of function (.*?) has type (.*?)",
[b]="%0 attribute parameter types do not match: parameter %1 of function %2 has type %3, but parameter %4 of function %5 has type %6",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute parameter types do not match\\: parameter (.*?) of function (.*?) has type (.*?), but parameter (.*?) of function (.*?) has type (.*?)",
[d]={db,1616787805,cb},
[e]=a,
[k]={{p,1085,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    if (T1.getCanonicalType().getUnqualifiedType() != T2.getCanonicalType().getUnqualifiedType()) {\n      S.Diag(IndexExpr->getBeginLoc(), diag::err_attribute_parameter_types) << AL << Index << DeclFD << T2 << I << AttrFD << T1;"}}
[d]=p,
[c]={cb,1616787805,jb},
[k]={{q,1085,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    if (T1.getCanonicalType().getUnqualifiedType() != T2.getCanonicalType().getUnqualifiedType()) {\n      S.Diag(IndexExpr->getBeginLoc(), diag::err_attribute_parameter_types) << AL << Index << DeclFD << T2 << I << AttrFD << T1;"}},
[o]={
["clang/test/Sema/attr-diagnose-as-builtin.c"]={"clang/test/Sema/attr-diagnose-as-builtin.c:35:126: error: \'diagnose_as_builtin\' attribute parameter types do not match: parameter 1 of function \'failure_parameter_types\' has type \'double\', but parameter 1 of function \'__builtin_memcpy\' has type \'void *\'","clang/test/Sema/attr-diagnose-as-builtin.c:66:107: error: \'diagnose_as_builtin\' attribute parameter types do not match: parameter 2 of function \'failure_type\' has type \'char\', but parameter 2 of function \'__builtin_memset\' has type \'int\'"}
}
},
},
["err_attribute_pointers_only"]={
["err_attribute_pointers_only"]={
[f]="A attribute only applies to... pointer arguments",
[h]="A attribute only applies to... pointer arguments",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute only applies to%select{| constant}1 pointer arguments",
[i]=m,
[i]=m,
[j]="(.*?) attribute only applies to(?:| constant) pointer arguments",
[b]="%0 attribute only applies to%select{| constant}1 pointer arguments",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute only applies to(?:| constant) pointer arguments",
[d]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[e]=a,
[k]={{s,16689,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    // Parameters with the pass_object_size attribute only need to be marked\n    // constant at function definitions. Because we lack information about\n    // whether we\'re on a declaration or definition when we\'re instantiating the\n    // attribute, we need to check for constness here.\n    if (const auto *Attr = Param->getAttr<PassObjectSizeAttr>())\n      if (!Param->getType().isConstQualified())\n        Diag(Param->getLocation(), diag::err_attribute_pointers_only) << Attr->getSpelling() << 1;"},{p,1198,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // pass_object_size is only supported on constant pointer parameters; as a\n  // kindness to users, we allow the parameter to be non-const for declarations.\n  // At this point, we have no clue if `D` belongs to a function declaration or\n  // definition, so we defer the constness check until later.\n  if (!cast<ParmVarDecl>(D)->getType()->isPointerType()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_pointers_only) << AL << 1;"},{p,5686,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (IsPointer) {\n    if (ArgumentIdxAST >= getFunctionOrMethodNumParams(D) || !getFunctionOrMethodParamType(D, ArgumentIdxAST)->isPointerType())\n      S.Diag(AL.getLoc(), diag::err_attribute_pointers_only) << AL << 0;"},{r,7382,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n    else\n      S.Diag(PAttr.getLoc(), diag::err_attribute_pointers_only) << PAttr << 0;"}}
[d]=p,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{t,16689,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    // Parameters with the pass_object_size attribute only need to be marked\n    // constant at function definitions. Because we lack information about\n    // whether we\'re on a declaration or definition when we\'re instantiating the\n    // attribute, we need to check for constness here.\n    if (const auto *Attr = Param->getAttr<PassObjectSizeAttr>())\n      if (!Param->getType().isConstQualified())\n        Diag(Param->getLocation(), diag::err_attribute_pointers_only) << Attr->getSpelling() << 1;"},{q,1198,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // pass_object_size is only supported on constant pointer parameters; as a\n  // kindness to users, we allow the parameter to be non-const for declarations.\n  // At this point, we have no clue if `D` belongs to a function declaration or\n  // definition, so we defer the constness check until later.\n  if (!cast<ParmVarDecl>(D)->getType()->isPointerType()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_pointers_only) << AL << 1;"},{q,5686,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (IsPointer) {\n    if (ArgumentIdxAST >= getFunctionOrMethodNumParams(D) || !getFunctionOrMethodParamType(D, ArgumentIdxAST)->isPointerType())\n      S.Diag(AL.getLoc(), diag::err_attribute_pointers_only) << AL << 0;"},{s,7382,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n    else\n      S.Diag(PAttr.getLoc(), diag::err_attribute_pointers_only) << PAttr << 0;"}},
[o]={
["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:14:32: error: \'ownership_holds\' attribute only applies to pointer arguments"}
}
},
},
["err_attribute_preferred_name_arg_invalid"]={
["err_attribute_preferred_name_arg_invalid"]={
[f]="argument A to \'preferred_name\' attribute is not a typedef for a specialization of B",
[h]="argument A to \'preferred_name\' attribute is not a typedef for a specialization of B",
[c]=l,
[j]=n,
[e]=n,
[g]="argument %0 to \'preferred_name\' attribute is not a typedef for a specialization of %1",
[i]=m,
[i]=m,
[j]="argument (.*?) to \'preferred_name\' attribute is not a typedef for a specialization of (.*?)",
[b]="argument %0 to \'preferred_name\' attribute is not a typedef for a specialization of %1",
[b]=a,
[g]=l,
[h]=o,
[f]="argument (.*?) to \'preferred_name\' attribute is not a typedef for a specialization of (.*?)",
[d]={fb,1590001902,eb},
[e]=a,
[k]={{p,1461,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(AL.getLoc(), diag::err_attribute_preferred_name_arg_invalid) << T << CTD;"}}
[d]=p,
[c]={fb,1590001902,gb},
[k]={{q,1461,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(AL.getLoc(), diag::err_attribute_preferred_name_arg_invalid) << T << CTD;"}},
[o]={
["clang/test/SemaTemplate/attributes.cpp"]={"clang/test/SemaTemplate/attributes.cpp:561:40: error: argument \'int\' to \'preferred_name\' attribute is not a typedef for a specialization of \'B\'","clang/test/SemaTemplate/attributes.cpp:566:40: error: argument \'C<int>\' to \'preferred_name\' attribute is not a typedef for a specialization of \'C\'","clang/test/SemaTemplate/attributes.cpp:568:40: error: argument \'const X\' (aka \'const C<int>\') to \'preferred_name\' attribute is not a typedef for a specialization of \'C\'","clang/test/SemaTemplate/attributes.cpp:569:40: error: argument \'Z\' (aka \'const C<double>\') to \'preferred_name\' attribute is not a typedef for a specialization of \'C\'"}
}
},
},
["err_attribute_regparm_invalid_number"]={
["err_attribute_regparm_invalid_number"]={
[f]="\'regparm\' parameter must be between 0 and A inclusive",
[h]="\'regparm\' parameter must be between 0 and A inclusive",
[c]=l,
[j]=n,
[e]=n,
[g]="\'regparm\' parameter must be between 0 and %0 inclusive",
[i]=m,
[i]=m,
[j]="\'regparm\' parameter must be between 0 and (.*?) inclusive",
[b]="\'regparm\' parameter must be between 0 and %0 inclusive",
[b]=a,
[g]=l,
[h]=o,
[f]="\'regparm\' parameter must be between 0 and (.*?) inclusive",
[d]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also "},
[e]=a,
[k]={{p,5587,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  if (numParams > Context.getTargetInfo().getRegParmMax()) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_invalid_number) << Context.getTargetInfo().getRegParmMax() << NumParamsExpr->getSourceRange();"}}
[d]=p,
[c]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also "},
[k]={{q,5587,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  if (numParams > Context.getTargetInfo().getRegParmMax()) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_invalid_number) << Context.getTargetInfo().getRegParmMax() << NumParamsExpr->getSourceRange();"}},
[o]={
["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:5:14: error: \'regparm\' parameter must be between 0 and 3 inclusive","clang/test/Sema/attr-regparm.c:6:14: error: \'regparm\' parameter must be between 0 and 3 inclusive"}
}
},
},
["err_attribute_regparm_wrong_platform"]={
["err_attribute_regparm_wrong_platform"]={
[h]="\'regparm\' is not valid on this platform",
[j]=n,
[i]=m,
[b]="\'regparm\' is not valid on this platform",
[g]=l,
[f]="\'regparm\' is not valid on this platform",
[f]="\'regparm\' is not valid on this platform",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'regparm\' is not valid on this platform",
[c]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also "},
[i]=m,
[k]={{q,5579,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  if (Context.getTargetInfo().getRegParmMax() == 0) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_wrong_platform) << NumParamsExpr->getSourceRange();"}},
[j]="\'regparm\' is not valid on this platform",
[o]={
[b]=a,
["clang/test/CodeGen/WebAssembly/wasm-regparm.c"]={"clang/test/CodeGen/WebAssembly/wasm-regparm.c:4:21: error: \'regparm\' is not valid on this platform"}
[h]=o,
}
[d]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also "},
[k]={{p,5579,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  if (Context.getTargetInfo().getRegParmMax() == 0) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_wrong_platform) << NumParamsExpr->getSourceRange();"}}
},
},
["err_attribute_requires_arguments"]={
["err_attribute_requires_arguments"]={
[f]="parentheses must be omitted if A attribute\'s argument list is empty",
[h]="parentheses must be omitted if A attribute\'s argument list is empty",
[c]=l,
[j]=n,
[e]=n,
[g]="parentheses must be omitted if %0 attribute\'s argument list is empty",
[i]=m,
[i]=m,
[j]="parentheses must be omitted if (.*?) attribute\'s argument list is empty",
[b]="parentheses must be omitted if %0 attribute\'s argument list is empty",
[b]=a,
[g]=l,
[h]=B,
[f]="parentheses must be omitted if (.*?) attribute\'s argument list is empty",
[d]={"ef5d94caf067",1397522199,"Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amend..."},
[e]=a,
[k]={{D,743,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // If this attribute\'s args were parsed, and it was expected to have\n  // arguments but none were provided, emit a diagnostic.\n  if (ExistingAttrs < Attrs.size() && Attrs.back().getMaxArgs() && !NumArgs) {\n    Diag(OpenParenLoc, diag::err_attribute_requires_arguments) << AttrName;"},{K,4460,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n///        \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n///        balanced-token\n///        balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n///        \'(\' balanced-token-seq \')\'\n///        \'[\' balanced-token-seq \']\'\n///        \'{\' balanced-token-seq \'}\'\n///        any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n  if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) {\n    // If the attribute is a standard or built-in attribute and we are\n    // parsing an argument list, we need to determine whether this attribute\n    // was allowed to have an argument list (such as [[deprecated]]), and how\n    // many arguments were parsed (so we can diagnose on [[deprecated()]]).\n    if (Attr.getMaxArgs() && !NumArgs) {\n      Diag(LParenLoc, diag::err_attribute_requires_arguments) << AttrName;"}}
[d]=A,
[c]={"ef5d94caf067",1397522199,"Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amend..."},
[k]={{E,743,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // If this attribute\'s args were parsed, and it was expected to have\n  // arguments but none were provided, emit a diagnostic.\n  if (ExistingAttrs < Attrs.size() && Attrs.back().getMaxArgs() && !NumArgs) {\n    Diag(OpenParenLoc, diag::err_attribute_requires_arguments) << AttrName;"},{L,4460,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n///        \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n///        balanced-token\n///        balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n///        \'(\' balanced-token-seq \')\'\n///        \'[\' balanced-token-seq \']\'\n///        \'{\' balanced-token-seq \'}\'\n///        any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n  if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) {\n    // If the attribute is a standard or built-in attribute and we are\n    // parsing an argument list, we need to determine whether this attribute\n    // was allowed to have an argument list (such as [[deprecated]]), and how\n    // many arguments were parsed (so we can diagnose on [[deprecated()]]).\n    if (Attr.getMaxArgs() && !NumArgs) {\n      Diag(LParenLoc, diag::err_attribute_requires_arguments) << AttrName;"}},
[o]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:73:22: error: parentheses must be omitted if \'deprecated\' attribute\'s argument list is empty"}
}
},
},
["err_attribute_requires_opencl_version"]={
["err_attribute_requires_opencl_version"]={
[f]="attribute A is supported in the OpenCL version B...",
[h]="attribute A is supported in the OpenCL version B...",
[c]=l,
[j]=n,
[e]=n,
[g]="attribute %0 is supported in the OpenCL version %1%select{| onwards}2",
[i]=m,
[i]=m,
[j]="attribute (.*?) is supported in the OpenCL version (.*?)(?:| onwards)",
[b]="attribute %0 is supported in the OpenCL version %1%select{| onwards}2",
[b]=a,
[g]=l,
[h]=o,
[f]="attribute (.*?) is supported in the OpenCL version (.*?)(?:| onwards)",
[d]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute"},
[e]=a,
[k]={{p,8281,"static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.getOpenCLCompatibleVersion() < 200)\n    S.Diag(AL.getLoc(), diag::err_attribute_requires_opencl_version) << AL << \"2.0\" << 1;"}}
[d]=p,
[c]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute"},
[k]={{q,8281,"static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.getOpenCLCompatibleVersion() < 200)\n    S.Diag(AL.getLoc(), diag::err_attribute_requires_opencl_version) << AL << \"2.0\" << 1;"}},
[o]={
["clang/test/SemaOpenCL/nosvm.cl"]={"clang/test/SemaOpenCL/nosvm.cl:7:30: error: attribute \'nosvm\' is supported in the OpenCL version 2.0 onwards"}
}
},
},
["err_attribute_requires_positive_integer"]={
["err_attribute_requires_positive_integer"]={
[f]="A attribute requires a ... integral compile time constant expression",
[h]="A attribute requires a ... integral compile time constant expression",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute requires a %select{positive|non-negative}1 integral compile time constant expression",
[i]=m,
[i]=m,
[j]="(.*?) attribute requires a (?:positive|non\\-negative) integral compile time constant expression",
[b]="%0 attribute requires a %select{positive|non-negative}1 integral compile time constant expression",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute requires a (?:positive|non\\-negative) integral compile time constant expression",
[d]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute"},
[e]=a,
[k]={{p,241,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer) << &AI << /*non-negative*/ 1;"},{"clang/lib/Sema/SemaStmtAttr.cpp",471,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (A.getNumArgs() == 1) {\n    if (Val <= 0) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_requires_positive_integer) << A << /* positive */ 0;"}}
[d]=p,
[c]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute"},
[k]={{q,241,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer) << &AI << /*non-negative*/ 1;"},{"clang/lib/Sema/SemaStmtAttr.cpp",471,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (A.getNumArgs() == 1) {\n    if (Val <= 0) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_requires_positive_integer) << A << /* positive */ 0;"}},
[o]={
["clang/test/SemaOpenCL/unroll-hint.cl"]={"clang/test/SemaOpenCL/unroll-hint.cl:15:18: error: \'opencl_unroll_hint\' attribute requires a positive integral compile time constant expression"}
}
},
},
["err_attribute_riscv_rvv_bits_unsupported"]={
["err_attribute_riscv_rvv_bits_unsupported"]={
[f]="A is only supported when \'-mrvv-vector-bits=<bits>\' is specified with a value of \"zvl\" or a power 2 in the range [64,65536]",
[h]="A is only supported when \'-mrvv-vector-bits=<bits>\' is specified with a value of \"zvl\" or a power 2 in the range [64,65536]",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 is only supported when \'-mrvv-vector-bits=<bits>\' is specified with a value of \"zvl\" or a power 2 in the range [64,65536]",
[i]=m,
[i]=m,
[j]="(.*?) is only supported when \'\\-mrvv\\-vector\\-bits\\=\\<bits\\>\' is specified with a value of \"zvl\" or a power 2 in the range \\[64,65536\\]",
[b]="%0 is only supported when \'-mrvv-vector-bits=<bits>\' is specified with a value of \"zvl\" or a power 2 in the range [64,65536]",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) is only supported when \'\\-mrvv\\-vector\\-bits\\=\\<bits\\>\' is specified with a value of \"zvl\" or a power 2 in the range \\[64,65536\\]",
[d]={N,1625925174,M},
[e]=a,
[k]={{r,8348,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  if (!VScale || !VScale->first || VScale->first != VScale->second) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_riscv_rvv_bits_unsupported) << Attr;"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{s,8348,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  if (!VScale || !VScale->first || VScale->first != VScale->second) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_riscv_rvv_bits_unsupported) << Attr;"}}
},
},
["err_attribute_section_invalid_for_target"]={
["err_attribute_section_invalid_for_target"]={
[f]="argument to ... attribute is not valid for this target: A",
[h]="argument to ... attribute is not valid for this target: A",
[c]=l,
[j]=n,
[e]=n,
[g]="argument to %select{\'code_seg\'|\'section\'}1 attribute is not valid for this target: %0",
[i]=m,
[i]=m,
[j]="argument to (?:\'code_seg\'|\'section\') attribute is not valid for this target\\: (.*?)",
[b]="argument to %select{\'code_seg\'|\'section\'}1 attribute is not valid for this target: %0",
[b]=a,
[g]=l,
[h]=o,
[f]="argument to (?:\'code_seg\'|\'section\') attribute is not valid for this target\\: (.*?)",
[d]={"30ba674391ae",1249930984,"fix a couple of problems with section attributes:"},
[e]=a,
[k]={{p,3328,"bool Sema::checkSectionName(SourceLocation LiteralLoc, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 1 /*\'section\'*/;"},{p,3362,"// This is used for `__declspec(code_seg(\"segname\"))` on a decl.\n// `#pragma code_seg(\"segname\")` uses checkSectionName() instead.\nstatic bool checkCodeSegName(Sema &S, SourceLocation LiteralLoc, StringRef CodeSegName) {\n  if (llvm::Error E = S.isValidSectionSpecifier(CodeSegName)) {\n    S.Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 0 /*\'code-seg\'*/;"}}
[d]=p,
[c]={"30ba674391ae",1249930984,"fix a couple of problems with section attributes:"},
[k]={{q,3328,"bool Sema::checkSectionName(SourceLocation LiteralLoc, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 1 /*\'section\'*/;"},{q,3362,"// This is used for `__declspec(code_seg(\"segname\"))` on a decl.\n// `#pragma code_seg(\"segname\")` uses checkSectionName() instead.\nstatic bool checkCodeSegName(Sema &S, SourceLocation LiteralLoc, StringRef CodeSegName) {\n  if (llvm::Error E = S.isValidSectionSpecifier(CodeSegName)) {\n    S.Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 0 /*\'code-seg\'*/;"}},
[o]={
["clang/test/Sema/pragma-section-invalid.c"]={"clang/test/Sema/pragma-section-invalid.c:4:18: error: argument to \'section\' attribute is not valid for this target: mach-o section specifier requires a segment and section separated by a comma"}
}
},
},
["err_attribute_selectany_non_extern_data"]={
["err_attribute_selectany_non_extern_data"]={
[h]="\'selectany\' can only be applied to data items with external linkage",
[j]=n,
[i]=m,
[b]="\'selectany\' can only be applied to data items with external linkage",
[g]=l,
[f]="\'selectany\' can only be applied to data items with external linkage",
[f]="\'selectany\' can only be applied to data items with external linkage",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'selectany\' can only be applied to data items with external linkage",
[c]={"b144d366934f",1369058557,"Implement __declspec(selectany) under -fms-extensions"},
[i]=m,
[k]={{r,6979,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // \'selectany\' only applies to externally visible variable declarations.\n  // It does not apply to functions.\n  if (SelectAnyAttr *Attr = ND.getAttr<SelectAnyAttr>()) {\n    if (isa<FunctionDecl>(ND) || !ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_selectany_non_extern_data);"}},
[j]="\'selectany\' can only be applied to data items with external linkage",
[o]={
[b]=a,
["clang/test/SemaCXX/declspec-selectany.cpp"]={"clang/test/SemaCXX/declspec-selectany.cpp:6:22: error: \'selectany\' can only be applied to data items with external linkage"}
[h]=o,
}
[d]={"b144d366934f",1369058557,"Implement __declspec(selectany) under -fms-extensions"},
[k]={{q,6979,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // \'selectany\' only applies to externally visible variable declarations.\n  // It does not apply to functions.\n  if (SelectAnyAttr *Attr = ND.getAttr<SelectAnyAttr>()) {\n    if (isa<FunctionDecl>(ND) || !ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_selectany_non_extern_data);"}}
},
},
["err_attribute_sentinel_less_than_zero"]={
["err_attribute_sentinel_less_than_zero"]={
[h]="\'sentinel\' parameter 1 less than zero",
[j]=n,
[i]=m,
[b]="\'sentinel\' parameter 1 less than zero",
[g]=l,
[f]="\'sentinel\' parameter 1 less than zero",
[f]="\'sentinel\' parameter 1 less than zero",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'sentinel\' parameter 1 less than zero",
[c]={C,1236199783,B},
[i]=m,
[k]={{q,3060,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (Idx->isSigned() && Idx->isNegative()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_less_than_zero) << E->getSourceRange();"}},
[j]="\'sentinel\' parameter 1 less than zero",
[o]={
[b]=a,
["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:14:45: error: \'sentinel\' parameter 1 less than zero"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{p,3060,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (Idx->isSigned() && Idx->isNegative()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_less_than_zero) << E->getSourceRange();"}}
},
},
["err_attribute_sentinel_not_zero_or_one"]={
["err_attribute_sentinel_not_zero_or_one"]={
[h]="\'sentinel\' parameter 2 not 0 or 1",
[j]=n,
[i]=m,
[b]="\'sentinel\' parameter 2 not 0 or 1",
[g]=l,
[f]="\'sentinel\' parameter 2 not 0 or 1",
[f]="\'sentinel\' parameter 2 not 0 or 1",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'sentinel\' parameter 2 not 0 or 1",
[c]={C,1236199783,B},
[i]=m,
[k]={{q,3082,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 1) {\n    if ((Idx->isSigned() && Idx->isNegative()) || nullPos > 1) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) << E->getSourceRange();"}},
[j]="\'sentinel\' parameter 2 not 0 or 1",
[o]={
[b]=a,
["clang/test/Sema/sentinel-attribute.c"]={"clang/test/Sema/sentinel-attribute.c:14:37: error: \'sentinel\' parameter 2 not 0 or 1"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{p,3082,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 1) {\n    if ((Idx->isSigned() && Idx->isNegative()) || nullPos > 1) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) << E->getSourceRange();"}}
},
},
["err_attribute_size_too_large"]={
["err_attribute_size_too_large"]={
[f]="A size too large",
[h]="A size too large",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 size too large",
[i]=m,
[i]=m,
[j]="(.*?) size too large",
[b]="%0 size too large",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) size too large",
[d]={"efe9fa62f5b4",1374800027,"Tighten type-checking for vector attributes."},
[e]=a,
[k]={{r,2742,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // vecSize is specified in bytes - convert to bits.\n  if (!VecSize->isIntN(61)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{r,2762,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (VectorSizeBits / TypeSize > std::numeric_limits<uint32_t>::max()) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{r,2814,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    if (!vecSize->isIntN(32)) {\n      Diag(AttrLoc, diag::err_attribute_size_too_large) << ArraySize->getSourceRange() << \"vector\";"},{r,2898,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (!ConstantMatrixType::isDimensionValid(MatrixRows)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << RowRange << \"matrix row\";"},{r,2903,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (!ConstantMatrixType::isDimensionValid(MatrixColumns)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << ColRange << \"matrix column\";"}}
[d]=p,
[c]={"efe9fa62f5b4",1374800027,"Tighten type-checking for vector attributes."},
[k]={{s,2742,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // vecSize is specified in bytes - convert to bits.\n  if (!VecSize->isIntN(61)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{s,2762,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (VectorSizeBits / TypeSize > std::numeric_limits<uint32_t>::max()) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{s,2814,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    if (!vecSize->isIntN(32)) {\n      Diag(AttrLoc, diag::err_attribute_size_too_large) << ArraySize->getSourceRange() << \"vector\";"},{s,2898,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (!ConstantMatrixType::isDimensionValid(MatrixRows)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << RowRange << \"matrix row\";"},{s,2903,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (!ConstantMatrixType::isDimensionValid(MatrixColumns)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << ColRange << \"matrix column\";"}},
[o]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:25:42: error: matrix row size too large"}
}
},
},
["err_attribute_sizeless_type"]={
["err_attribute_sizeless_type"]={
[f]="A attribute cannot be applied to sizeless type B",
[h]="A attribute cannot be applied to sizeless type B",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute cannot be applied to sizeless type %1",
[i]=m,
[i]=m,
[j]="(.*?) attribute cannot be applied to sizeless type (.*?)",
[b]="%0 attribute cannot be applied to sizeless type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute cannot be applied to sizeless type (.*?)",
[d]={W,1576908663,V},
[e]=a,
[k]={{p,4610,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  if (Align && DiagTy->isSizelessType()) {\n    Diag(LastAlignedAttr->getLocation(), diag::err_attribute_sizeless_type) << LastAlignedAttr << DiagTy;"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{q,4610,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  if (Align && DiagTy->isSizelessType()) {\n    Diag(LastAlignedAttr->getLocation(), diag::err_attribute_sizeless_type) << LastAlignedAttr << DiagTy;"}},
[o]={
["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:63:27: error: \'aligned\' attribute cannot be applied to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:64:27: error: \'aligned\' attribute cannot be applied to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:65:12: error: \'_Alignas\' attribute cannot be applied to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
}
},
},
["err_attribute_too_few_arguments"]={
["err_attribute_too_few_arguments"]={
[f]="A attribute takes at least B argumentC",
[h]="A attribute takes at least B argumentC",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute takes at least %1 argument%s1",
[i]=m,
[i]=m,
[j]="(.*?) attribute takes at least (.*?) argument(.*?)",
[b]="%0 attribute takes at least %1 argument%s1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute takes at least (.*?) argument(.*?)",
[d]={"63fa667c6874",1311883955,"Added basic parsing for all remaining attributes, thread safety"},
[e]=a,
[k]={{"clang/lib/Sema/ParsedAttr.cpp",289,"bool ParsedAttr::checkAtLeastNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_few_arguments, std::less<unsigned>()); }"},{p,1834,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  case OwnershipAttr::Holds:\n    if (AL.getNumArgs() < 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_few_arguments) << AL << 2;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",215,"static void instantiateDependentAnnotationAttr(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AnnotateAttr *Attr, Decl *New) {\n  if (HasDelayedArgs) {\n    if (Args.size() < 1) {\n      S.Diag(Attr->getLoc(), diag::err_attribute_too_few_arguments) << Attr << 1;"},{r,8478,"static void HandleAnnotateTypeAttr(TypeProcessingState &State, QualType &CurType, const ParsedAttr &PA) {\n  if (PA.getNumArgs() < 1) {\n    S.Diag(PA.getLoc(), diag::err_attribute_too_few_arguments) << PA << 1;"}}
[d]=p,
[c]={"63fa667c6874",1311883955,"Added basic parsing for all remaining attributes, thread safety"},
[k]={{"clang/lib/Sema/ParsedAttr.cpp",289,"bool ParsedAttr::checkAtLeastNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_few_arguments, std::less<unsigned>()); }"},{q,1834,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  case OwnershipAttr::Holds:\n    if (AL.getNumArgs() < 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_few_arguments) << AL << 2;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",215,"static void instantiateDependentAnnotationAttr(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AnnotateAttr *Attr, Decl *New) {\n  if (HasDelayedArgs) {\n    if (Args.size() < 1) {\n      S.Diag(Attr->getLoc(), diag::err_attribute_too_few_arguments) << Attr << 1;"},{s,8478,"static void HandleAnnotateTypeAttr(TypeProcessingState &State, QualType &CurType, const ParsedAttr &PA) {\n  if (PA.getNumArgs() < 1) {\n    S.Diag(PA.getLoc(), diag::err_attribute_too_few_arguments) << PA << 1;"}},
[o]={
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:22:41: error: \'callable_when\' attribute takes at least 1 argument"}
}
},
},
["err_attribute_too_many_arguments"]={
["err_attribute_too_many_arguments"]={
[f]="A attribute takes no more than B argumentC",
[h]="A attribute takes no more than B argumentC",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute takes no more than %1 argument%s1",
[i]=m,
[i]=m,
[j]="(.*?) attribute takes no more than (.*?) argument(.*?)",
[b]="%0 attribute takes no more than %1 argument%s1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute takes no more than (.*?) argument(.*?)",
[d]={"80ee5963fde8",1299068105,"Pretty up the wrong-number-of-arguments-for-attribute diagnostic by"},
[e]=a,
[k]={{"clang/lib/Sema/ParsedAttr.cpp",294,"bool ParsedAttr::checkAtMostNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_many_arguments, std::greater<unsigned>()); }"},{p,1840,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  case OwnershipAttr::Returns:\n    if (AL.getNumArgs() > 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{p,7354,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{p,7431,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only one optional argument permitted.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"}}
[d]=p,
[c]={"80ee5963fde8",1299068105,"Pretty up the wrong-number-of-arguments-for-attribute diagnostic by"},
[k]={{"clang/lib/Sema/ParsedAttr.cpp",294,"bool ParsedAttr::checkAtMostNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_many_arguments, std::greater<unsigned>()); }"},{q,1840,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  case OwnershipAttr::Returns:\n    if (AL.getNumArgs() > 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{q,7354,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{q,7431,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only one optional argument permitted.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"}},
[o]={
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:8:16: error: \'interrupt\' attribute takes no more than 1 argument"}
}
},
},
["err_attribute_unsupported"]={
["err_attribute_unsupported"]={
[f]="A attribute is not supported on targets missing B; specify an appropriate -march= or -mcpu=",
[h]="A attribute is not supported on targets missing B; specify an appropriate -march= or -mcpu=",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute is not supported on targets missing %1; specify an appropriate -march= or -mcpu=",
[i]=m,
[i]=m,
[j]="(.*?) attribute is not supported on targets missing (.*?); specify an appropriate \\-march\\= or \\-mcpu\\=",
[b]="%0 attribute is not supported on targets missing %1; specify an appropriate -march= or -mcpu=",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute is not supported on targets missing (.*?); specify an appropriate \\-march\\= or \\-mcpu\\=",
[d]={"8c3de546d62e",1379354855,"Add error checking to reject neon_vector_type attribute on targets without NEON."},
[e]=a,
[k]={{r,8211,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // Target must have NEON (or MVE, whose vectors are similar enough\n  // not to need a separate attribute)\n  if (!(S.Context.getTargetInfo().hasFeature(\"neon\") || S.Context.getTargetInfo().hasFeature(\"mve\") || IsTargetCUDAAndHostARM)) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'neon\' or \'mve\'\";"},{r,8256,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have SVE.\n  if (!S.Context.getTargetInfo().hasFeature(\"sve\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'sve\'\";"},{r,8340,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have vector extension.\n  if (!S.Context.getTargetInfo().hasFeature(\"zve32x\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'zve32x\'\";"}}
[d]=p,
[c]={"8c3de546d62e",1379354855,"Add error checking to reject neon_vector_type attribute on targets without NEON."},
[k]={{s,8211,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // Target must have NEON (or MVE, whose vectors are similar enough\n  // not to need a separate attribute)\n  if (!(S.Context.getTargetInfo().hasFeature(\"neon\") || S.Context.getTargetInfo().hasFeature(\"mve\") || IsTargetCUDAAndHostARM)) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'neon\' or \'mve\'\";"},{s,8256,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have SVE.\n  if (!S.Context.getTargetInfo().hasFeature(\"sve\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'sve\'\";"},{s,8340,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have vector extension.\n  if (!S.Context.getTargetInfo().hasFeature(\"zve32x\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'zve32x\'\";"}},
[o]={
["clang/test/Sema/riscv-vector-types-support.c"]={"clang/test/Sema/riscv-vector-types-support.c:3:24: error: \'riscv_rvv_vector_bits\' attribute is not supported on targets missing \'zve32x\'; specify an appropriate -march= or -mcpu="}
}
},
},
["err_attribute_uuid_malformed_guid"]={
["err_attribute_uuid_malformed_guid"]={
[h]="uuid attribute contains a malformed GUID",
[j]=n,
[i]=m,
[b]="uuid attribute contains a malformed GUID",
[g]=l,
[f]="uuid attribute contains a malformed GUID",
[f]="uuid attribute contains a malformed GUID",
[c]=l,
[e]=a,
[e]=n,
[d]=a,
[g]="uuid attribute contains a malformed GUID",
[c]={"7da1166da010",1292809309,"Validate Microsoft\'s uuid attribute string."},
[i]=m,
[k]={{L,4738,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  if (Tok.is(tok::string_literal)) {\n  } else {\n    while (Tok.isNot(tok::r_paren)) {\n      if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n        Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{L,4756,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  if (Tok.is(tok::string_literal)) {\n  } else {\n    if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n      Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{q,7007,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Validate GUID length.\n  if (StrRef.size() != 36) {\n    S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{q,7014,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      if (StrRef[i] != \'-\') {\n        S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{q,7018,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n    } else if (!isHexDigit(StrRef[i])) {\n      S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"}},
[j]="uuid attribute contains a malformed GUID",
[o]={
[b]=a,
["clang/test/Parser/ms-square-bracket-attributes.mm"]={"clang/test/Parser/ms-square-bracket-attributes.mm:21:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:23:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:58:8: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:60:21: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:63:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:65:24: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:67:44: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:70:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:73:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:95:7: error: uuid attribute contains a malformed GUID"}
[h]=a,
}
[d]={"7da1166da010",1292809309,"Validate Microsoft\'s uuid attribute string."},
[k]={{K,4738,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  if (Tok.is(tok::string_literal)) {\n  } else {\n    while (Tok.isNot(tok::r_paren)) {\n      if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n        Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{K,4756,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  if (Tok.is(tok::string_literal)) {\n  } else {\n    if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n      Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{p,7007,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Validate GUID length.\n  if (StrRef.size() != 36) {\n    S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{p,7014,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      if (StrRef[i] != \'-\') {\n        S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{p,7018,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n    } else if (!isHexDigit(StrRef[i])) {\n      S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"}}
},
},
["err_attribute_vecreturn_only_pod_record"]={
["err_attribute_vecreturn_only_pod_record"]={
[f]="the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)",
[h]="the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)",
[c]=l,
[j]=n,
[e]=n,
[g]="the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)",
[i]=m,
[i]=m,
[j]="the vecreturn attribute can only be used on a POD \\(plain old data\\) class or structure \\(i\\.e\\. no virtual functions\\)",
[b]="the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)",
[b]=a,
[g]=l,
[h]=o,
[f]="the vecreturn attribute can only be used on a POD \\(plain old data\\) class or structure \\(i\\.e\\. no virtual functions\\)",
[d]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn"},
[e]=a,
[k]={{p,2300,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!cast<CXXRecordDecl>(R)->isPOD()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_pod_record);"}}
[d]=p,
[c]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn"},
[k]={{q,2300,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!cast<CXXRecordDecl>(R)->isPOD()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_pod_record);"}},
[o]={
["clang/test/Parser/cxx-altivec.cpp"]={"clang/test/Parser/cxx-altivec.cpp:224:18: error: the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)"}
}
},
},
["err_attribute_vecreturn_only_vector_member"]={
["err_attribute_vecreturn_only_vector_member"]={
[h]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
[j]=n,
[i]=m,
[b]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
[g]=l,
[f]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
[f]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
[c]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn"},
[i]=m,
[k]={{q,2295,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<CXXRecordDecl>(R)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"},{q,2306,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (const auto *I : R->fields()) {\n    if ((count == 1) || !I->getType()->isVectorType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"}},
[j]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
[o]={
[b]=a,
["clang/test/Parser/cxx-altivec.cpp"]={"clang/test/Parser/cxx-altivec.cpp:232:18: error: the vecreturn attribute can only be used on a class or structure with one member, which must be a vector"}
[h]=o,
}
[d]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn"},
[k]={{p,2295,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<CXXRecordDecl>(R)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"},{p,2306,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (const auto *I : R->fields()) {\n    if ((count == 1) || !I->getType()->isVectorType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"}}
},
},
["err_attribute_weak_static"]={
["err_attribute_weak_static"]={
[h]="weak declaration cannot have internal linkage",
[j]=n,
[i]=m,
[b]="weak declaration cannot have internal linkage",
[g]=l,
[f]="weak declaration cannot have internal linkage",
[f]="weak declaration cannot have internal linkage",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="weak declaration cannot have internal linkage",
[c]={"41136eec6bdb",1247706744,"Generate error on declaration containing \'static\' and \'__attribute__((weak))\'"},
[i]=m,
[k]={{r,6951,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // \'weak\' only applies to declarations with external linkage.\n  if (WeakAttr *Attr = ND.getAttr<WeakAttr>()) {\n    if (!ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weak_static);"}},
[j]="weak declaration cannot have internal linkage",
[o]={
[b]=a,
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:3:33: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:4:36: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:10:28: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:11:31: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:20:40: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:40:16: error: weak declaration cannot have internal linkage"}
[h]=o,
}
[d]={"41136eec6bdb",1247706744,"Generate error on declaration containing \'static\' and \'__attribute__((weak))\'"},
[k]={{q,6951,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // \'weak\' only applies to declarations with external linkage.\n  if (WeakAttr *Attr = ND.getAttr<WeakAttr>()) {\n    if (!ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weak_static);"}}
},
},
["err_attribute_weakref_not_global_context"]={
["err_attribute_weakref_not_global_context"]={
[f]="weakref declaration of A must be in a global context",
[h]="weakref declaration of A must be in a global context",
[c]=l,
[j]=n,
[e]=n,
[g]="weakref declaration of %0 must be in a global context",
[i]=m,
[i]=m,
[j]="weakref declaration of (.*?) must be in a global context",
[b]="weakref declaration of %0 must be in a global context",
[b]=a,
[g]=l,
[h]=o,
[f]="weakref declaration of (.*?) must be in a global context",
[d]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ..."},
[e]=a,
[k]={{p,1933,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!Ctx->isFileContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_weakref_not_global_context) << cast<NamedDecl>(D);"}}
[d]=p,
[c]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ..."},
[k]={{q,1933,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!Ctx->isFileContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_weakref_not_global_context) << cast<NamedDecl>(D);"}},
[o]={
["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:19:31: error: weakref declaration of \'a\' must be in a global context","clang/test/SemaCXX/attr-weakref.cpp:24:31: error: weakref declaration of \'a\' must be in a global context","clang/test/SemaCXX/attr-weakref.cpp:25:33: error: weakref declaration of \'b\' must be in a global context"}
}
},
},
["err_attribute_weakref_not_static"]={
["err_attribute_weakref_not_static"]={
[h]="weakref declaration must have internal linkage",
[j]=n,
[i]=m,
[b]="weakref declaration must have internal linkage",
[g]=l,
[f]="weakref declaration must have internal linkage",
[f]="weakref declaration must have internal linkage",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="weakref declaration must have internal linkage",
[c]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ..."},
[i]=m,
[k]={{r,6957,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  if (WeakRefAttr *Attr = ND.getAttr<WeakRefAttr>()) {\n    if (ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static);"}},
[j]="weakref declaration must have internal linkage",
[o]={
[b]=a,
["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:27:25: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:28:23: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:38:16: error: weakref declaration must have internal linkage"}
[h]=o,
}
[d]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ..."},
[k]={{q,6957,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  if (WeakRefAttr *Attr = ND.getAttr<WeakRefAttr>()) {\n    if (ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static);"}}
},
},
["err_attribute_weakref_without_alias"]={
["err_attribute_weakref_without_alias"]={
[f]="weakref declaration of A must also have an alias attribute",
[h]="weakref declaration of A must also have an alias attribute",
[c]=l,
[j]=n,
[e]=n,
[g]="weakref declaration of %0 must also have an alias attribute",
[i]=m,
[i]=m,
[j]="weakref declaration of (.*?) must also have an alias attribute",
[b]="weakref declaration of %0 must also have an alias attribute",
[b]=a,
[g]=l,
[h]=o,
[f]="weakref declaration of (.*?) must also have an alias attribute",
[d]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ..."},
[e]=a,
[k]={{p,9516,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle these cases in TableGen.\n  // GCC accepts\n  // static int a9 __attribute__((weakref));\n  // but that looks really pointless. We reject it.\n  if (D->hasAttr<WeakRefAttr>() && !D->hasAttr<AliasAttr>()) {\n    Diag(AttrList.begin()->getLoc(), diag::err_attribute_weakref_without_alias) << cast<NamedDecl>(D);"}}
[d]=p,
[c]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ..."},
[k]={{q,9516,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle these cases in TableGen.\n  // GCC accepts\n  // static int a9 __attribute__((weakref));\n  // but that looks really pointless. We reject it.\n  if (D->hasAttr<WeakRefAttr>() && !D->hasAttr<AliasAttr>()) {\n    Diag(AttrList.begin()->getLoc(), diag::err_attribute_weakref_without_alias) << cast<NamedDecl>(D);"}},
[o]={
["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:15:30: error: weakref declaration of \'a6\' must also have an alias attribute","clang/test/SemaCXX/attr-weakref.cpp:31:23: error: weakref declaration of \'a9\' must also have an alias attribute"}
}
},
},
["err_attribute_webassembly_funcref"]={
["err_attribute_webassembly_funcref"]={
[h]="\'__funcref\' attribute can only be applied to a function pointer type",
[j]=n,
[i]=m,
[b]="\'__funcref\' attribute can only be applied to a function pointer type",
[g]=l,
[f]="\'__funcref\' attribute can only be applied to a function pointer type",
[f]="\'__funcref\' attribute can only be applied to a function pointer type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'__funcref\' attribute can only be applied to a function pointer type",
[c]={N,1625925174,O}
[i]=m,
[j]="\'__funcref\' attribute can only be applied to a function pointer type",
[b]=a,
[h]=o,
[d]={N,1625925174,M}
},
},
["err_attribute_wrong_decl_type"]={
["err_attribute_wrong_decl_type"]={
[f]="A... only applies to ...",
[h]="A... only applies to ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%0%select{ attribute|}1 only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}2",
[i]=m,
[i]=m,
[j]="(.*?)(?: attribute|) only applies to (?:functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non\\-K&R\\-style functions)",
[b]="%0%select{ attribute|}1 only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}2",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?)(?: attribute|) only applies to (?:functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non\\-K&R\\-style functions)",
[d]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support."},
[e]=a,
[k]={{p,2249,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n      S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{p,2904,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // \'type_visibility\' can only go on a type or namespace.\n  if (isTypeVisibility && !(isa<TagDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<NamespaceDecl>(D))) {\n   S.Diag(AL.getRange().getBegin(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedTypeOrNamespace;"},{p,4429,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///   declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  if (isa<ParmVarDecl>(D)) {\n  } else if (const auto *VD = dyn_cast<VarDecl>(D)) {\n  } else if (const auto *FD = dyn_cast<FieldDecl>(D)) {\n  } else if (const auto *ED = dyn_cast<EnumDecl>(D)) {\n  } else if (!isa<TagDecl>(D)) {\n    return S.Diag(AttrLoc, diag::err_attribute_wrong_decl_type) << &Attr << Attr.isRegularKeywordAttribute() << (Attr.isC11() ? ExpectedVariableOrField : ExpectedVariableFieldOrTag);"},{p,5706,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<VarDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{p,6289,"static void handleObjCOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(D->getBeginLoc(), diag::err_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{p,8253,"static void handleNoSanitizeSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (isGlobalVar(D) && SanitizerName != \"address\")\n    S.Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{p,9530,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n      // diag::err_attribute_wrong_decl_type + ExpectedKernelFunction."},{p,9544,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{p,9548,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{p,9552,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{p,9556,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUNumVGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"}}
[d]=p,
[c]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support."},
[k]={{q,2249,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n     S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{q,2904,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n // \'type_visibility\' can only go on a type or namespace.\n if (isTypeVisibility && !(isa<TagDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<NamespaceDecl>(D))) {\n   S.Diag(AL.getRange().getBegin(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedTypeOrNamespace;"},{q,4429,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///   parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  if (isa<ParmVarDecl>(D)) {\n  } else if (const auto *VD = dyn_cast<VarDecl>(D)) {\n  } else if (const auto *FD = dyn_cast<FieldDecl>(D)) {\n  } else if (const auto *ED = dyn_cast<EnumDecl>(D)) {\n  } else if (!isa<TagDecl>(D)) {\n    return S.Diag(AttrLoc, diag::err_attribute_wrong_decl_type) << &Attr << Attr.isRegularKeywordAttribute() << (Attr.isC11() ? ExpectedVariableOrField : ExpectedVariableFieldOrTag);"},{q,5706,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<VarDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{q,6289,"static void handleObjCOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(D->getBeginLoc(), diag::err_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{q,8253,"static void handleNoSanitizeSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (isGlobalVar(D) && SanitizerName != \"address\")\n    S.Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{q,9530,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n      // diag::err_attribute_wrong_decl_type + ExpectedKernelFunction."},{q,9544,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{q,9548,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{q,9552,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{q,9556,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n      } else if (const auto *A = D->getAttr<AMDGPUNumVGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp:3:1: error: \'alignas\' attribute only applies to variables, data members and tag types"}
}
},
},
["err_attribute_wrong_decl_type_str"]={
["err_attribute_wrong_decl_type_str"]={
[f]="A... only applies to B",
[h]="A... only applies to B",
[c]=l,
[j]=n,
[e]=n,
[g]="%0%select{ attribute|}1 only applies to %2",
[i]=m,
[i]=m,
[j]="(.*?)(?: attribute|) only applies to (.*?)",
[b]="%0%select{ attribute|}1 only applies to %2",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?)(?: attribute|) only applies to (.*?)",
[d]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th..."},
[e]=a,
[k]={{p,2173,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    // This form is not allowed to be written on a member function (static or\n    // nonstatic) when in Microsoft compatibility mode.\n    if (S.getLangOpts().MSVCCompat && isa<CXXMethodDecl>(D)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"non-member functions\";"}}
[d]=p,
[c]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th..."},
[k]={{q,2173,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    // This form is not allowed to be written on a member function (static or\n    // nonstatic) when in Microsoft compatibility mode.\n    if (S.getLangOpts().MSVCCompat && isa<CXXMethodDecl>(D)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"non-member functions\";"}},
[o]={
["clang/test/SemaObjC/attr-objc-non-lazy.m"]={"clang/test/SemaObjC/attr-objc-non-lazy.m:9:16: error: \'objc_nonlazy_class\' attribute only applies to Objective-C interfaces and Objective-C implementation declarations","clang/test/SemaObjC/attr-objc-non-lazy.m:23:16: error: \'objc_nonlazy_class\' attribute only applies to Objective-C interfaces and Objective-C implementation declarations","clang/test/SemaObjC/attr-objc-non-lazy.m:27:16: error: \'objc_nonlazy_class\' attribute only applies to Objective-C interfaces and Objective-C implementation declarations"}
}
},
},
["err_attribute_wrong_number_arguments"]={
["err_attribute_wrong_number_arguments"]={
[f]="A attribute takes no arguments",
[h]="A attribute takes no arguments",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute %plural{0:takes no arguments|1:takes one argument|:requires exactly %1 arguments}1",
[i]=m,
[i]=m,
[j]="(.*?) attribute (?:takes no arguments|takes one argument|requires exactly (.*?) arguments)",
[b]="%0 attribute %plural{0:takes no arguments|1:takes one argument|:requires exactly %1 arguments}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute (?:takes no arguments|takes one argument|requires exactly (.*?) arguments)",
[d]={A,1236199783,z},
[e]=a,
[k]={{"clang/lib/Sema/ParsedAttr.cpp",284,"bool ParsedAttr::checkExactlyNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_wrong_number_arguments, std::not_equal_to<unsigned>()); }"},{p,1505,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The iboutletcollection attribute can have zero or one arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{p,1917,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{p,3260,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.hasParsedType()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{p,4162,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (CalleeFnProtoType->getNumParams() > EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{p,4168,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (CalleeFnProtoType->getNumParams() < EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{p,4373,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{r,6795,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // Check the number of attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,6837,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  if (Attr.getKind() == ParsedAttr::AT_AddressSpace) {\n    // Check the attribute arguments.\n    if (Attr.getNumArgs() != 1) {\n      S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,7114,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (attr.getNumArgs() > 1) {\n    S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"},{r,8094,"/// HandleVectorSizeAttribute - this attribute is only applicable to integral\n/// and float scalars, although arrays, pointers, and function return values are\n/// allowed in conjunction with this construct. Aggregates with this attribute\n/// are invalid, even if they are of the same size as a corresponding scalar.\n/// The raw attribute should contain precisely 1 argument, the vector size for\n/// the variable, measured in bytes. If curType and rawAttr are well formed,\n/// this routine will return a new vector type.\nstatic void HandleVectorSizeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,8114,"/// Process the OpenCL-like ext_vector_type attribute when it occurs on\n/// a type.\nstatic void HandleExtVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,8218,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,8273,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,8356,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{r,8461,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (Attr.getNumArgs() != 2) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 2;"},{r,8777,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    case ParsedAttr::AT_AcquireHandle: {\n      if (attr.getNumArgs() != 1) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{"clang/lib/Sema/ParsedAttr.cpp",284,"bool ParsedAttr::checkExactlyNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_wrong_number_arguments, std::not_equal_to<unsigned>()); }"},{q,1505,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The iboutletcollection attribute can have zero or one arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{q,1917,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{q,3260,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.hasParsedType()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{q,4162,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (CalleeFnProtoType->getNumParams() > EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{q,4168,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (CalleeFnProtoType->getNumParams() < EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{q,4373,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{s,6795,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // Check the number of attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,6837,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  if (Attr.getKind() == ParsedAttr::AT_AddressSpace) {\n    // Check the attribute arguments.\n    if (Attr.getNumArgs() != 1) {\n      S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,7114,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (attr.getNumArgs() > 1) {\n    S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"},{s,8094,"/// HandleVectorSizeAttribute - this attribute is only applicable to integral\n/// and float scalars, although arrays, pointers, and function return values are\n/// allowed in conjunction with this construct. Aggregates with this attribute\n/// are invalid, even if they are of the same size as a corresponding scalar.\n/// The raw attribute should contain precisely 1 argument, the vector size for\n/// the variable, measured in bytes. If curType and rawAttr are well formed,\n/// this routine will return a new vector type.\nstatic void HandleVectorSizeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,8114,"/// Process the OpenCL-like ext_vector_type attribute when it occurs on\n/// a type.\nstatic void HandleExtVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,8218,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,8273,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,8356,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{s,8461,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (Attr.getNumArgs() != 2) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 2;"},{s,8777,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    case ParsedAttr::AT_AcquireHandle: {\n      if (attr.getNumArgs() != 1) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"}},
[o]={
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:20:41: error: \'set_typestate\' attribute takes one argument","clang/test/SemaCXX/warn-consumed-parsing.cpp:21:41: error: \'test_typestate\' attribute takes one argument"}
}
},
},
["err_attribute_wrong_number_arguments_for"]={
["err_attribute_wrong_number_arguments_for"]={
[f]="A attribute references function B, which takes no arguments",
[h]="A attribute references function B, which takes no arguments",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 attribute references function %1, which %plural{0:takes no arguments|1:takes one argument|:takes exactly %2 arguments}2",
[i]=m,
[i]=m,
[j]="(.*?) attribute references function (.*?), which (?:takes no arguments|takes one argument|takes exactly (.*?) arguments)",
[b]="%0 attribute references function %1, which %plural{0:takes no arguments|1:takes one argument|:takes exactly %2 arguments}2",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) attribute references function (.*?), which (?:takes no arguments|takes one argument|takes exactly (.*?) arguments)",
[d]={db,1616787805,cb},
[e]=a,
[k]={{p,1055,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AttrFD->getNumParams() != AL.getNumArgs() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments_for) << AL << AttrFD << AttrFD->getNumParams();"}}
[d]=p,
[c]={cb,1616787805,jb},
[k]={{q,1055,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AttrFD->getNumParams() != AL.getNumArgs() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments_for) << AL << AttrFD << AttrFD->getNumParams();"}},
[o]={
["clang/test/Sema/attr-diagnose-as-builtin.c"]={"clang/test/Sema/attr-diagnose-as-builtin.c:25:107: error: \'diagnose_as_builtin\' attribute references function \'__builtin_memcpy\', which takes exactly 3 arguments","clang/test/Sema/attr-diagnose-as-builtin.c:27:76: error: \'diagnose_as_builtin\' attribute references function \'__builtin_memcpy\', which takes exactly 3 arguments"}
}
},
},
["err_attribute_zero_size"]={
["err_attribute_zero_size"]={
[f]="zero A size",
[h]="zero A size",
[c]=l,
[j]=n,
[e]=n,
[g]="zero %0 size",
[i]=m,
[i]=m,
[j]="zero (.*?) size",
[b]="zero %0 size",
[b]=a,
[g]=l,
[h]=o,
[f]="zero (.*?) size",
[d]={A,1236199783,z},
[e]=a,
[k]={{r,2750,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (VectorSizeBits == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << SizeExpr->getSourceRange() << \"vector\";"},{r,2823,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    if (vectorSize == 0) {\n      Diag(AttrLoc, diag::err_attribute_zero_size) << ArraySize->getSourceRange() << \"vector\";"},{r,2885,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (MatrixRows == 0 && MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange << ColRange;"},{r,2890,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (MatrixRows == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange;"},{r,2894,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << ColRange;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{s,2750,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  if (VectorSizeBits == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << SizeExpr->getSourceRange() << \"vector\";"},{s,2823,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    if (vectorSize == 0) {\n      Diag(AttrLoc, diag::err_attribute_zero_size) << ArraySize->getSourceRange() << \"vector\";"},{s,2885,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (MatrixRows == 0 && MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange << ColRange;"},{s,2890,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (MatrixRows == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange;"},{s,2894,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  if (MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << ColRange;"}},
[o]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:111:28: error: zero matrix size","clang/test/SemaTemplate/matrix-type.cpp:15:42: error: zero matrix size"}
}
},
},
["err_attributes_are_not_compatible"]={
["err_attributes_are_not_compatible"]={
[f]="A and B... are not compatible",
[h]="A and B... are not compatible",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 and %1%select{ attributes|}2 are not compatible",
[i]=m,
[i]=m,
[j]="(.*?) and (.*?)(?: attributes|) are not compatible",
[b]="%0 and %1%select{ attributes|}2 are not compatible",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) and (.*?)(?: attributes|) are not compatible",
[d]={A,1236199783,z},
[e]=a,
[k]={{p,277,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{p,289,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLocation(), diag::err_attributes_are_not_compatible) << &AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{p,1885,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << I << (AL.isRegularKeywordAttribute() || I->isRegularKeywordAttribute());"},{p,3898,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (!Match) {\n      Diag(EA->getLocation(), diag::err_attributes_are_not_compatible) << CI << EA << (CI.isRegularKeywordAttribute() || EA->isRegularKeywordAttribute());"},{p,4958,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(PrevSNA->getLocation(), diag::err_attributes_are_not_compatible) << PrevSNA << &SNA << (PrevSNA->isRegularKeywordAttribute() || SNA.isRegularKeywordAttribute());"},{p,5256,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << OAttr << (AL.isRegularKeywordAttribute() || OAttr->isRegularKeywordAttribute());"},{p,5275,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  } else {\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << PAttr << (AL.isRegularKeywordAttribute() || PAttr->isRegularKeywordAttribute());"},{p,5512,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(CI.getLoc(), diag::err_attributes_are_not_compatible) << getParameterABISpelling(abi) << existingAttr << (CI.isRegularKeywordAttribute() || existingAttr->isRegularKeywordAttribute());"},{r,7363,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__ptr32\'\""},{r,7368,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n  } else if (Attrs[attr::SPtr] && Attrs[attr::UPtr]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__sptr\'\""},{r,7892,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (attr.getKind() == ParsedAttr::AT_Regparm) {\n    if (CC == CC_X86FastCall) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << \"regparm\" << attr.isRegularKeywordAttribute();"},{r,7972,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (CCOld != CC) {\n    // Error out on when there\'s already an attribute on the type\n    // and the CCs don\'t match.\n    if (S.getCallingConvAttributedType(type)) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << FunctionType::getNameForCallConv(CCOld) << attr.isRegularKeywordAttribute();"},{r,8006,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Also diagnose fastcall with regparm.\n  if (CC == CC_X86FastCall && fn->getHasRegParm()) {\n    S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << \"regparm\" << FunctionType::getNameForCallConv(CC_X86FastCall) << attr.isRegularKeywordAttribute();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4022,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    for (const std::string &A : DeclAttrs) {\n      OS << \"      S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)\""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4044,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      for (const std::string &A : DeclAttrs) {\n        MergeDeclOS << \"      S.Diag(First->getLocation(), \"\n                    << \"diag::err_attributes_are_not_compatible) << First << \""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4085,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    MergeStmtOS << \"        S.Diag((*Iter)->getLocation(), \"\n                << \"diag::err_attributes_are_not_compatible) << *Iter << \""}}
[d]=p,
[c]={C,1236199783,B},
[k]={{q,277,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{q,289,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLocation(), diag::err_attributes_are_not_compatible) << &AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{q,1885,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << I << (AL.isRegularKeywordAttribute() || I->isRegularKeywordAttribute());"},{q,3898,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (!Match) {\n      Diag(EA->getLocation(), diag::err_attributes_are_not_compatible) << CI << EA << (CI.isRegularKeywordAttribute() || EA->isRegularKeywordAttribute());"},{q,4958,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(PrevSNA->getLocation(), diag::err_attributes_are_not_compatible) << PrevSNA << &SNA << (PrevSNA->isRegularKeywordAttribute() || SNA.isRegularKeywordAttribute());"},{q,5256,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << OAttr << (AL.isRegularKeywordAttribute() || OAttr->isRegularKeywordAttribute());"},{q,5275,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  } else {\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << PAttr << (AL.isRegularKeywordAttribute() || PAttr->isRegularKeywordAttribute());"},{q,5512,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(CI.getLoc(), diag::err_attributes_are_not_compatible) << getParameterABISpelling(abi) << existingAttr << (CI.isRegularKeywordAttribute() || existingAttr->isRegularKeywordAttribute());"},{s,7363,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__ptr32\'\""},{s,7368,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n  } else if (Attrs[attr::SPtr] && Attrs[attr::UPtr]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__sptr\'\""},{s,7892,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (attr.getKind() == ParsedAttr::AT_Regparm) {\n    if (CC == CC_X86FastCall) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << \"regparm\" << attr.isRegularKeywordAttribute();"},{s,7972,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (CCOld != CC) {\n    // Error out on when there\'s already an attribute on the type\n    // and the CCs don\'t match.\n    if (S.getCallingConvAttributedType(type)) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << FunctionType::getNameForCallConv(CCOld) << attr.isRegularKeywordAttribute();"},{s,8006,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Also diagnose fastcall with regparm.\n  if (CC == CC_X86FastCall && fn->getHasRegParm()) {\n    S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << \"regparm\" << FunctionType::getNameForCallConv(CC_X86FastCall) << attr.isRegularKeywordAttribute();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4022,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    for (const std::string &A : DeclAttrs) {\n      OS << \"      S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)\""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4044,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      for (const std::string &A : DeclAttrs) {\n        MergeDeclOS << \"      S.Diag(First->getLocation(), \"\n                    << \"diag::err_attributes_are_not_compatible) << First << \""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4085,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    MergeStmtOS << \"        S.Diag((*Iter)->getLocation(), \"\n                << \"diag::err_attributes_are_not_compatible) << *Iter << \""}},
[o]={
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:22:26: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:24:23: error: \'interrupt\' and \'mips16\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:26:44: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:28:39: error: \'interrupt\' and \'mips16\' attributes are not compatible"}
}
},
},
["err_attributes_misplaced"]={
["err_attributes_misplaced"]={
[h]="misplaced attributes; expected attributes here",
[j]=n,
[i]=m,
[b]="misplaced attributes; expected attributes here",
[g]=l,
[f]="misplaced attributes; expected attributes here",
[f]="misplaced attributes; expected attributes here",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="misplaced attributes; expected attributes here",
[c]={"c5089c08d4cd",1514240600,"Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword."},
[i]=m,
[k]={{E,1719,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  if (CorrectLocation.isValid()) {\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(CorrectLocation, diag::err_keyword_misplaced) << FirstAttr : Diag(CorrectLocation, diag::err_attributes_misplaced)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"}},
[j]="misplaced attributes; expected attributes here",
[o]={
[b]=a,
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:69:12: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:70:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:71:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:72:10: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:101:12: error: misplaced attributes; expected attributes here"}
[h]=B,
}
[d]={"c5089c08d4cd",1514240600,"Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword."},
[k]={{D,1719,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  if (CorrectLocation.isValid()) {\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(CorrectLocation, diag::err_keyword_misplaced) << FirstAttr : Diag(CorrectLocation, diag::err_attributes_misplaced)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"}}
},
},
["err_attributes_not_allowed"]={
["err_attributes_not_allowed"]={
[h]="an attribute list cannot appear here",
[j]=n,
[i]=m,
[b]="an attribute list cannot appear here",
[g]=l,
[f]="an attribute list cannot appear here",
[f]="an attribute list cannot appear here",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="an attribute list cannot appear here",
[c]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support."},
[i]=m,
[k]={{E,1683,"/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets\n/// of a C++11 attribute-specifier in a location where an attribute is not\n/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this\n/// situation.\n///\n/// \\return \\c true if we skipped an attribute-like chunk of tokens, \\c false if\n/// this doesn\'t appear to actually be an attribute-specifier, and the caller\n/// should try to parse it.\nbool Parser::DiagnoseProhibitedCXX11Attribute() {\n  case CAK_AttributeSpecifier:\n    Diag(BeginLoc, diag::err_attributes_not_allowed) << SourceRange(BeginLoc, EndLoc);"},{E,1707,"/// We have found the opening square brackets of a C++11\n/// attribute-specifier in a location where an attribute is not permitted, but\n/// we know where the attributes ought to be written. Parse them anyway, and\n/// provide a fixit moving them to the right place.\nvoid Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributes &Attrs, SourceLocation CorrectLocation) {\n  (Keyword ? Diag(Loc, diag::err_keyword_not_allowed) << Keyword : Diag(Loc, diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"},{E,1726,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n if (CorrectLocation.isValid()) {\n  } else {\n   (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << Range;"},{E,5052,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]   \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                 \'}\' attributes[opt]\n/// [MS]   \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]   \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\\'}\'\n///\n///       enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///         enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n // An elaborated-type-specifier has a much more constrained grammar:\n //\n  //  \'enum\' nested-name-specifier[opt] identifier\n //\n  // If we parsed any other bits, reject them now.\n  //\n  // MSVC and (for now at least) Objective-C permit a full enum-specifier\n  // or opaque-enum-declaration anywhere.\n  if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n   ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{E,6052,"/// ParseTypeQualifierListOpt\n///          type-qualifier-list: [C99 6.7.5]\n///            type-qualifier\n/// [vendor]  attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n///            type-qualifier-list type-qualifier\n/// [vendor]  type-qualifier-list attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// [C++0x]    attribute-specifier[opt] is allowed before cv-qualifier-seq\n///              [ only if AttReqs & AR_CXX11AttributesParsed ]\n/// Note: vendor can be GNU, MS, etc and can be explicitly controlled via\n/// AttrRequirements bitmask values.\nvoid Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, bool AtomicAllowed, bool IdentifierRequired, std::optional<llvm::function_ref<void()>> CodeCompletionHandler) {\n  while (true) {\n    case tok::kw___attribute:\n      if (AttrReqs & AR_GNUAttributesParsedAndRejected)\n        Diag(Tok, diag::err_attributes_not_allowed);"},{L,777,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // If we had any misplaced attributes from earlier, this is where they\n  // should have been written.\n  if (MisplacedAttrs.Range.isValid()) {\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(Tok.getLocation(), CharSourceRange::getTokenRange(Range)) << FixItHint::CreateRemoval(Range);"},{L,1932,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // Forbid misplaced attributes. In cases of a reference, we pass attributes\n  // to caller to handle.\n  if (TUK != Sema::TUK_Reference) {\n    if (AttrRange.isValid()) {\n      (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << FirstAttr : Diag(Loc, diag::err_attributes_not_allowed)) << AttrRange << FixItHint::CreateInsertionFromRange(AttrFixitLoc, CharSourceRange(AttrRange, true)) << FixItHint::CreateRemoval(AttrRange);"},{L,1979,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n    if (TemplateId->isInvalid()) {\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{L,1996,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n    if (TemplateId->isInvalid()) {\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n    } else if (TUK == Sema::TUK_Reference || (TUK == Sema::TUK_Friend && TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{L,2066,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{L,2077,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  } else {\n    if (TUK != Sema::TUK_Declaration && TUK != Sema::TUK_Definition)\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{L,3060,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    if (DS.isFriendSpecified()) {\n      // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains\n      // to a friend declaration, that declaration shall be a definition.\n      //\n      // Diagnose attributes that appear in a friend member function declarator:\n      //  friend int foo [[]] ();\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isCXX11Attribute() || AL.isRegularKeywordAttribute()) {\n          (AL.isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << AL : Diag(Loc, diag::err_attributes_not_allowed)) << AL.getRange();"},{L,4664,"void Parser::DiagnoseAndSkipCXX11Attributes() {\n  if (EndLoc.isValid()) {\n    (Keyword ? Diag(StartLoc, diag::err_keyword_not_allowed) << Keyword : Diag(StartLoc, diag::err_attributes_not_allowed)) << Range;"}},
[j]="an attribute list cannot appear here",
[o]={
[b]=a,
["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:15:7: error: an attribute list cannot appear here"}
[h]=B,
}
[d]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support."},
[k]={{D,1683,"/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets\n/// of a C++11 attribute-specifier in a location where an attribute is not\n/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this\n/// situation.\n///\n/// \\return \\c true if we skipped an attribute-like chunk of tokens, \\c false if\n/// this doesn\'t appear to actually be an attribute-specifier, and the caller\n/// should try to parse it.\nbool Parser::DiagnoseProhibitedCXX11Attribute() {\n case CAK_AttributeSpecifier:\n   Diag(BeginLoc, diag::err_attributes_not_allowed) << SourceRange(BeginLoc, EndLoc);"},{D,1707,"/// We have found the opening square brackets of a C++11\n/// attribute-specifier in a location where an attribute is not permitted, but\n/// we know where the attributes ought to be written. Parse them anyway, and\n/// provide a fixit moving them to the right place.\nvoid Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributes &Attrs, SourceLocation CorrectLocation) {\n  (Keyword ? Diag(Loc, diag::err_keyword_not_allowed) << Keyword : Diag(Loc, diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"},{D,1726,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  if (CorrectLocation.isValid()) {\n } else {\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << Range;"},{D,5052,"/// ParseEnumSpecifier\n///       enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]   \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]   \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                 \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///         \'enum\' \'class\'\n///         \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///         \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]   \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // An elaborated-type-specifier has a much more constrained grammar:\n  //\n  //   \'enum\' nested-name-specifier[opt] identifier\n  //\n  // If we parsed any other bits, reject them now.\n  //\n  // MSVC and (for now at least) Objective-C permit a full enum-specifier\n // or opaque-enum-declaration anywhere.\n  if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{D,6052,"/// ParseTypeQualifierListOpt\n///          type-qualifier-list: [C99 6.7.5]\n///            type-qualifier\n/// [vendor]  attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n///            type-qualifier-list type-qualifier\n/// [vendor]  type-qualifier-list attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// [C++0x]    attribute-specifier[opt] is allowed before cv-qualifier-seq\n///              [ only if AttReqs & AR_CXX11AttributesParsed ]\n/// Note: vendor can be GNU, MS, etc and can be explicitly controlled via\n/// AttrRequirements bitmask values.\nvoid Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, bool AtomicAllowed, bool IdentifierRequired, std::optional<llvm::function_ref<void()>> CodeCompletionHandler) {\n  while (true) {\n    case tok::kw___attribute:\n      if (AttrReqs & AR_GNUAttributesParsedAndRejected)\n        Diag(Tok, diag::err_attributes_not_allowed);"},{K,777,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // If we had any misplaced attributes from earlier, this is where they\n  // should have been written.\n  if (MisplacedAttrs.Range.isValid()) {\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(Tok.getLocation(), CharSourceRange::getTokenRange(Range)) << FixItHint::CreateRemoval(Range);"},{K,1932,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // Forbid misplaced attributes. In cases of a reference, we pass attributes\n  // to caller to handle.\n  if (TUK != Sema::TUK_Reference) {\n    if (AttrRange.isValid()) {\n      (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << FirstAttr : Diag(Loc, diag::err_attributes_not_allowed)) << AttrRange << FixItHint::CreateInsertionFromRange(AttrFixitLoc, CharSourceRange(AttrRange, true)) << FixItHint::CreateRemoval(AttrRange);"},{K,1979,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n    if (TemplateId->isInvalid()) {\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{K,1996,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n    if (TemplateId->isInvalid()) {\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n    } else if (TUK == Sema::TUK_Reference || (TUK == Sema::TUK_Friend && TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{K,2066,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{K,2077,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  } else {\n    if (TUK != Sema::TUK_Declaration && TUK != Sema::TUK_Definition)\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{K,3060,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    if (DS.isFriendSpecified()) {\n      // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains\n      // to a friend declaration, that declaration shall be a definition.\n      //\n      // Diagnose attributes that appear in a friend member function declarator:\n      //  friend int foo [[]] ();\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isCXX11Attribute() || AL.isRegularKeywordAttribute()) {\n          (AL.isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << AL : Diag(Loc, diag::err_attributes_not_allowed)) << AL.getRange();"},{K,4664,"void Parser::DiagnoseAndSkipCXX11Attributes() {\n  if (EndLoc.isValid()) {\n    (Keyword ? Diag(StartLoc, diag::err_keyword_not_allowed) << Keyword : Diag(StartLoc, diag::err_attributes_not_allowed)) << Range;"}}
},
},
["err_auto_bitfield"]={
["err_auto_bitfield"]={
[f]="cannot pass bit-field as __auto_type initializer in C",
[h]="cannot pass bit-field as __auto_type initializer in C",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass bit-field as __auto_type initializer in C",
[i]=m,
[i]=m,
[j]="cannot pass bit\\-field as __auto_type initializer in C",
[b]="cannot pass bit-field as __auto_type initializer in C",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot pass bit\\-field as __auto_type initializer in C",
[d]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[e]=a,
[k]={{xb,4868,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  } else {\n    if (InitList) {\n    } else {\n      if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {\n        Diag(Loc, diag::err_auto_bitfield);"}}
[d]=p,
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[k]={{Gb,4868,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  } else {\n    if (InitList) {\n    } else {\n      if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {\n        Diag(Loc, diag::err_auto_bitfield);"}},
[o]={
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:20:40: error: cannot pass bit-field as __auto_type initializer in C"}
}
},
},
["err_auto_different_deductions"]={
["err_auto_different_deductions"]={
[f]="... deduced as A in declaration of B and deduced as C in declaration of D",
[h]="... deduced as A in declaration of B and deduced as C in declaration of D",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{\'auto\'|\'decltype(auto)\'|\'__auto_type\'|template arguments}0 deduced as %1 in declaration of %2 and deduced as %3 in declaration of %4",
[i]=m,
[i]=m,
[j]="(?:\'auto\'|\'decltype\\(auto\\)\'|\'__auto_type\'|template arguments) deduced as (.*?) in declaration of (.*?) and deduced as (.*?) in declaration of (.*?)",
[b]="%select{\'auto\'|\'decltype(auto)\'|\'__auto_type\'|template arguments}0 deduced as %1 in declaration of %2 and deduced as %3 in declaration of %4",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:\'auto\'|\'decltype\\(auto\\)\'|\'__auto_type\'|template arguments) deduced as (.*?) in declaration of (.*?) and deduced as (.*?) in declaration of (.*?)",
[d]={wb,1298171975,vb},
[e]=a,
[k]={{q,14629,"/// BuildDeclaratorGroup - convert a list of declarations into a declaration\n/// group, performing any necessary semantic checking.\nSema::DeclGroupPtrTy Sema::BuildDeclaratorGroup(MutableArrayRef<Decl *> Group) {\n  // C++14 [dcl.spec.auto]p7: (DR1347)\n  //  If the type that replaces the placeholder type is not the same in each\n  //  deduction, the program is ill-formed.\n  if (Group.size() > 1) {\n    for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n      if (Deduced.isNull()) {\n      } else if (!Context.hasSameType(DT->getDeducedType(), Deduced)) {\n        auto Dia = Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), diag::err_auto_different_deductions) << (AT ? (unsigned)AT->getKeyword() : 3) << Deduced << DeducedDecl->getDeclName() << DT->getDeducedType() << D->getDeclName();"}}
[d]=p,
[c]={Ib,1298171975,Cb},
[k]={{r,14629,"/// BuildDeclaratorGroup - convert a list of declarations into a declaration\n/// group, performing any necessary semantic checking.\nSema::DeclGroupPtrTy Sema::BuildDeclaratorGroup(MutableArrayRef<Decl *> Group) {\n  // C++14 [dcl.spec.auto]p7: (DR1347)\n  //  If the type that replaces the placeholder type is not the same in each\n  //  deduction, the program is ill-formed.\n  if (Group.size() > 1) {\n    for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n      if (Deduced.isNull()) {\n      } else if (!Context.hasSameType(DT->getDeducedType(), Deduced)) {\n        auto Dia = Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), diag::err_auto_different_deductions) << (AT ? (unsigned)AT->getKeyword() : 3) << Deduced << DeducedDecl->getDeclName() << DT->getDeducedType() << D->getDeclName();"}},
[o]={
["clang/test/SemaCXX/auto-invalid-init-crash.cpp"]={"clang/test/SemaCXX/auto-invalid-init-crash.cpp:7:1: error: \'auto\' deduced as \'int\' in declaration of \'c\' and deduced as \'std::initializer_list<int>\' in declaration of \'d\'"}
}
},
},
["err_auto_expr_deduction_failure"]={
["err_auto_expr_deduction_failure"]={
[f]="functional-style cast to A has incompatible initializer of type B",
[h]="functional-style cast to A has incompatible initializer of type B",
[c]=l,
[j]=n,
[e]=n,
[g]="functional-style cast to %0 has incompatible initializer of type %1",
[i]=m,
[i]=m,
[j]="functional\\-style cast to (.*?) has incompatible initializer of type (.*?)",
[b]="functional-style cast to %0 has incompatible initializer of type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="functional\\-style cast to (.*?) has incompatible initializer of type (.*?)",
[d]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[e]=a,
[k]={{x,1533,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_deduction_failure) << Ty << Deduce->getType() << FullRange << Deduce->getSourceRange());"}}
[d]=p,
[c]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[k]={{y,1533,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_deduction_failure) << Ty << Deduce->getType() << FullRange << Deduce->getSourceRange());"}},
[o]={
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:27:7: error: functional-style cast to \'auto\' has incompatible initializer of type \'<overloaded function type>\'"}
}
},
},
["err_auto_expr_init_multiple_expressions"]={
["err_auto_expr_init_multiple_expressions"]={
[f]="initializer for functional-style cast to A contains multiple expressions",
[h]="initializer for functional-style cast to A contains multiple expressions",
[c]=l,
[j]=n,
[e]=n,
[g]="initializer for functional-style cast to %0 contains multiple expressions",
[i]=m,
[i]=m,
[j]="initializer for functional\\-style cast to (.*?) contains multiple expressions",
[b]="initializer for functional-style cast to %0 contains multiple expressions",
[b]=a,
[g]=l,
[h]=o,
[f]="initializer for functional\\-style cast to (.*?) contains multiple expressions",
[d]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[e]=a,
[k]={{x,1516,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Inits.size() > 1) {\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_expr_init_multiple_expressions) << Ty << FullRange);"}}
[d]=p,
[c]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[k]={{y,1516,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Inits.size() > 1) {\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_expr_init_multiple_expressions) << Ty << FullRange);"}},
[o]={
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:29:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:30:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:33:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:34:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:36:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions"}
}
},
},
["err_auto_expr_init_no_expression"]={
["err_auto_expr_init_no_expression"]={
[f]="initializer for functional-style cast to A is empty",
[h]="initializer for functional-style cast to A is empty",
[c]=l,
[j]=n,
[e]=n,
[g]="initializer for functional-style cast to %0 is empty",
[i]=m,
[i]=m,
[j]="initializer for functional\\-style cast to (.*?) is empty",
[b]="initializer for functional-style cast to %0 is empty",
[b]=a,
[g]=l,
[h]=o,
[f]="initializer for functional\\-style cast to (.*?) is empty",
[d]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[e]=a,
[k]={{x,1511,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Inits.empty())\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_init_no_expression) << Ty << FullRange);"}}
[d]=p,
[c]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[k]={{y,1511,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Inits.empty())\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_init_no_expression) << Ty << FullRange);"}},
[o]={
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:15:7: error: initializer for functional-style cast to \'auto\' is empty","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:16:7: error: initializer for functional-style cast to \'auto\' is empty"}
}
},
},
["err_auto_expr_init_paren_braces"]={
["err_auto_expr_init_paren_braces"]={
[f]="cannot deduce actual type for A from ... initializer list",
[h]="cannot deduce actual type for A from ... initializer list",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot deduce actual type for %1 from %select{parenthesized|nested}0 initializer list",
[i]=m,
[i]=m,
[j]="cannot deduce actual type for (.*?) from (?:parenthesized|nested) initializer list",
[b]="cannot deduce actual type for %1 from %select{parenthesized|nested}0 initializer list",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot deduce actual type for (.*?) from (?:parenthesized|nested) initializer list",
[d]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[e]=a,
[k]={{x,1526,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << ListInitialization << Ty << FullRange);"},{x,2065,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << Braced << AllocType << TypeRange);"}}
[d]=p,
[c]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[k]={{y,1526,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << ListInitialization << Ty << FullRange);"},{y,2065,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << Braced << AllocType << TypeRange);"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:8:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list","clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:9:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list"}
}
},
},
["err_auto_fn_deduction_failure"]={
["err_auto_fn_deduction_failure"]={
[f]="cannot deduce return type A from returned value of type B",
[h]="cannot deduce return type A from returned value of type B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot deduce return type %0 from returned value of type %1",
[i]=m,
[i]=m,
[j]="cannot deduce return type (.*?) from returned value of type (.*?)",
[b]="cannot deduce return type %0 from returned value of type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot deduce return type (.*?) from returned value of type (.*?)",
[d]={ib,1367650832,pb},
[e]=a,
[k]={{R,3869,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    default:\n      Diag(RetExpr->getExprLoc(), diag::err_auto_fn_deduction_failure) << OrigResultType.getType() << RetExpr->getType();"}}
[d]=p,
[c]={nb,1367650832,tb},
[k]={{S,3869,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    default:\n      Diag(RetExpr->getExprLoc(), diag::err_auto_fn_deduction_failure) << OrigResultType.getType() << RetExpr->getType();"}},
[o]={
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:74:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:82:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:90:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:98:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'"}
}
},
},
["err_auto_fn_different_deductions"]={
["err_auto_fn_different_deductions"]={
[f]="\'...\' in return type deduced as A here but deduced as B in earlier return statement",
[h]="\'...\' in return type deduced as A here but deduced as B in earlier return statement",
[c]=l,
[j]=n,
[e]=n,
[g]="\'%select{auto|decltype(auto)}0\' in return type deduced as %1 here but deduced as %2 in earlier return statement",
[i]=m,
[i]=m,
[j]="\'(?:auto|decltype\\(auto\\))\' in return type deduced as (.*?) here but deduced as (.*?) in earlier return statement",
[b]="\'%select{auto|decltype(auto)}0\' in return type deduced as %1 here but deduced as %2 in earlier return statement",
[b]=a,
[g]=l,
[h]=o,
[f]="\'(?:auto|decltype\\(auto\\))\' in return type deduced as (.*?) here but deduced as (.*?) in earlier return statement",
[d]={ib,1367650832,pb},
[e]=a,
[k]={{R,3863,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    case TDK_Inconsistent: {\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n      else\n        Diag(ReturnLoc, diag::err_auto_fn_different_deductions) << (AT->isDecltypeAuto() ? 1 : 0) << Info.SecondArg << Info.FirstArg;"}}
[d]=p,
[c]={nb,1367650832,tb},
[k]={{S,3863,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    case TDK_Inconsistent: {\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n      else\n        Diag(ReturnLoc, diag::err_auto_fn_different_deductions) << (AT->isDecltypeAuto() ? 1 : 0) << Info.SecondArg << Info.FirstArg;"}},
[o]={
["clang/test/SemaCXX/cxx2b-consteval-if.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-if.cpp:6:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:11:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:26:5: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement"}
}
},
},
["err_auto_fn_no_return_but_not_auto"]={
["err_auto_fn_no_return_but_not_auto"]={
[f]="cannot deduce return type A for function with no return statements",
[h]="cannot deduce return type A for function with no return statements",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot deduce return type %0 for function with no return statements",
[i]=m,
[i]=m,
[j]="cannot deduce return type (.*?) for function with no return statements",
[b]="cannot deduce return type %0 for function with no return statements",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot deduce return type (.*?) for function with no return statements",
[d]={ib,1367650832,pb},
[e]=a,
[k]={{q,15589,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (getLangOpts().CPlusPlus14) {\n        if (!FD->isInvalidDecl() && Body && !FD->isDependentContext() && FD->getReturnType()->isUndeducedType()) {\n          // For a function with a deduced result type to return void,\n          // the result type as written must be \'auto\' or \'decltype(auto)\',\n          // possibly cv-qualified or constrained, but not ref-qualified.\n          if (!FD->getReturnType()->getAs<AutoType>()) {\n            Diag(dcl->getLocation(), diag::err_auto_fn_no_return_but_not_auto) << FD->getReturnType();"}}
[d]=p,
[c]={nb,1367650832,tb},
[k]={{r,15589,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (getLangOpts().CPlusPlus14) {\n        if (!FD->isInvalidDecl() && Body && !FD->isDependentContext() && FD->getReturnType()->isUndeducedType()) {\n          // For a function with a deduced result type to return void,\n          // the result type as written must be \'auto\' or \'decltype(auto)\',\n          // possibly cv-qualified or constrained, but not ref-qualified.\n          if (!FD->getReturnType()->getAs<AutoType>()) {\n            Diag(dcl->getLocation(), diag::err_auto_fn_no_return_but_not_auto) << FD->getReturnType();"}},
[o]={
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:69:7: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:85:11: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:104:7: error: cannot deduce return type \'auto &\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:122:11: error: cannot deduce return type \'auto &\' for function with no return statements"}
}
},
},
["err_auto_fn_return_init_list"]={
["err_auto_fn_return_init_list"]={
[h]="cannot deduce return type from initializer list",
[j]=n,
[i]=m,
[b]="cannot deduce return type from initializer list",
[g]=l,
[f]="cannot deduce return type from initializer list",
[f]="cannot deduce return type from initializer list",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot deduce return type from initializer list",
[c]={nb,1367650832,tb},
[i]=m,
[k]={{S,3799,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  if (RetExpr && isa<InitListExpr>(RetExpr)) {\n    Diag(RetExpr->getExprLoc(), getCurLambda() ? diag::err_lambda_return_init_list : diag::err_auto_fn_return_init_list) << RetExpr->getSourceRange();"}},
[j]="cannot deduce return type from initializer list",
[o]={
[b]=a,
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:99:29: error: cannot deduce return type from initializer list","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:100:39: error: cannot deduce return type from initializer list"}
[h]=o,
}
[d]={ib,1367650832,pb},
[k]={{R,3799,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  if (RetExpr && isa<InitListExpr>(RetExpr)) {\n    Diag(RetExpr->getExprLoc(), getCurLambda() ? diag::err_lambda_return_init_list : diag::err_auto_fn_return_init_list) << RetExpr->getSourceRange();"}}
},
},
["err_auto_fn_return_void_but_not_auto"]={
["err_auto_fn_return_void_but_not_auto"]={
[f]="cannot deduce return type A from omitted return expression",
[h]="cannot deduce return type A from omitted return expression",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot deduce return type %0 from omitted return expression",
[i]=m,
[i]=m,
[j]="cannot deduce return type (.*?) from omitted return expression",
[b]="cannot deduce return type %0 from omitted return expression",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot deduce return type (.*?) from omitted return expression",
[d]={ib,1367650832,pb},
[e]=a,
[k]={{R,3823,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  if (!RetExpr) {\n    // For a function with a deduced result type to return with omitted\n    // expression, the result type as written must be \'auto\' or\n    // \'decltype(auto)\', possibly cv-qualified or constrained, but not\n    // ref-qualified.\n    if (!OrigResultType.getType()->getAs<AutoType>()) {\n      Diag(ReturnLoc, diag::err_auto_fn_return_void_but_not_auto) << OrigResultType.getType();"}}
[d]=p,
[c]={nb,1367650832,tb},
[k]={{S,3823,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  if (!RetExpr) {\n    // For a function with a deduced result type to return with omitted\n    // expression, the result type as written must be \'auto\' or\n    // \'decltype(auto)\', possibly cv-qualified or constrained, but not\n    // ref-qualified.\n    if (!OrigResultType.getType()->getAs<AutoType>()) {\n      Diag(ReturnLoc, diag::err_auto_fn_return_void_but_not_auto) << OrigResultType.getType();"}},
[o]={
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:71:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:78:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:87:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:94:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:107:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:114:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:124:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:131:3: error: cannot deduce return type \'auto &\' from omitted return expression"}
}
},
},
["err_auto_fn_used_before_defined"]={
["err_auto_fn_used_before_defined"]={
[f]="function A with deduced return type cannot be used before it is defined",
[h]="function A with deduced return type cannot be used before it is defined",
[c]=l,
[j]=n,
[e]=n,
[g]="function %0 with deduced return type cannot be used before it is defined",
[i]=m,
[i]=m,
[j]="function (.*?) with deduced return type cannot be used before it is defined",
[b]="function %0 with deduced return type cannot be used before it is defined",
[b]=a,
[g]=l,
[h]=o,
[f]="function (.*?) with deduced return type cannot be used before it is defined",
[d]={ib,1367650832,pb},
[e]=a,
[k]={{xb,5038,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(Loc, diag::err_auto_fn_used_before_defined) << FD;"}}
[d]=p,
[c]={nb,1367650832,tb},
[k]={{Gb,5038,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(Loc, diag::err_auto_fn_used_before_defined) << FD;"}},
[o]={
["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:22:14: error: function \'operator auto\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:97:9: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:98:16: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:108:16: error: function \'fac_2\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:142:11: error: function \'fwd_decl<int>\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:259:14: error: function \'f\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:350:15: error: function \'f\' with deduced return type cannot be used before it is defined"}
}
},
},
["err_auto_fn_virtual"]={
["err_auto_fn_virtual"]={
[h]="function with deduced return type cannot be virtual",
[j]=n,
[i]=m,
[b]="function with deduced return type cannot be virtual",
[g]=l,
[f]="function with deduced return type cannot be virtual",
[f]="function with deduced return type cannot be virtual",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="function with deduced return type cannot be virtual",
[c]={nb,1367650832,tb},
[i]=m,
[k]={{r,9898,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [dcl.fct.spec]p5:\n    //  The virtual specifier shall only be used in declarations of\n    //  nonstatic class member functions that appear within a\n    //  member-specification of a class declaration; see 10.3.\n    //\n    if (isVirtual && !NewFD->isInvalidDecl()) {\n      if (getLangOpts().CPlusPlus14 && NewFD->getReturnType()->isUndeducedType())\n        Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_auto_fn_virtual);"}},
[j]="function with deduced return type cannot be virtual",
[o]={
[b]=a,
["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:313:5: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:324:14: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:325:18: error: function with deduced return type cannot be virtual"}
[h]=o,
}
[d]={ib,1367650832,pb},
[k]={{q,9898,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [dcl.fct.spec]p5:\n    //  The virtual specifier shall only be used in declarations of\n    //  nonstatic class member functions that appear within a\n    //  member-specification of a class declaration; see 10.3.\n    //\n    if (isVirtual && !NewFD->isInvalidDecl()) {\n      if (getLangOpts().CPlusPlus14 && NewFD->getReturnType()->isUndeducedType())\n        Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_auto_fn_virtual);"}}
},
},
["err_auto_inconsistent_deduction"]={
["err_auto_inconsistent_deduction"]={
[f]="deduced conflicting types (A vs B) for initializer list element type",
[h]="deduced conflicting types (A vs B) for initializer list element type",
[c]=l,
[j]=n,
[e]=n,
[g]="deduced conflicting types %diff{($ vs $) |}0,1for initializer list element type",
[i]=m,
[i]=m,
[j]="deduced conflicting types (?:\\((.*?) vs (.*?)\\) |)for initializer list element type",
[b]="deduced conflicting types %diff{($ vs $) |}0,1for initializer list element type",
[b]=a,
[g]=l,
[h]=o,
[f]="deduced conflicting types (?:\\((.*?) vs (.*?)\\) |)for initializer list element type",
[d]={"b1efc9b410ea",1504053848,"Give a better error if auto deduction fails due to inconsistent element types in a braced initialize..."},
[e]=a,
[k]={{xb,4854,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  } else {\n    if (InitList) {\n      for (Expr *Init : InitList->inits()) {\n        if (auto TDK = DeduceTemplateArgumentsFromCallArgument(*this, TemplateParamsSt.get(), 0, TemplArg, Init, Info, Deduced, OriginalCallArgs, /*Decomposed=*/true,\n          if (TDK == TDK_Inconsistent) {\n            Diag(Info.getLocation(), diag::err_auto_inconsistent_deduction) << Info.FirstArg << Info.SecondArg << DeducedFromInitRange << Init->getSourceRange();"}}
[d]=p,
[c]={"b1efc9b410ea",1504053848,"Give a better error if auto deduction fails due to inconsistent element types in a braced initialize..."},
[k]={{Gb,4854,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  } else {\n    if (InitList) {\n      for (Expr *Init : InitList->inits()) {\n        if (auto TDK = DeduceTemplateArgumentsFromCallArgument(*this, TemplateParamsSt.get(), 0, TemplArg, Init, Info, Deduced, OriginalCallArgs, /*Decomposed=*/true,\n          if (TDK == TDK_Inconsistent) {\n            Diag(Info.getLocation(), diag::err_auto_inconsistent_deduction) << Info.FirstArg << Info.SecondArg << DeducedFromInitRange << Init->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:139:13: error: deduced conflicting types (\'int\' vs \'double\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:144:13: error: deduced conflicting types (\'void (*)(int)\' vs \'void (*)(float)\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:147:16: error: deduced conflicting types (\'double\' vs \'float\') for initializer list element type"}
}
},
},
["err_auto_init_list_from_c"]={
["err_auto_init_list_from_c"]={
[h]="cannot use __auto_type with initializer list in C",
[j]=n,
[i]=m,
[b]="cannot use __auto_type with initializer list in C",
[g]=l,
[f]="cannot use __auto_type with initializer list in C",
[f]="cannot use __auto_type with initializer list in C",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot use __auto_type with initializer list in C",
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[i]=m,
[k]={{Gb,4791,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  if (!getLangOpts().CPlusPlus && InitList) {\n    Diag(Init->getBeginLoc(), diag::err_auto_init_list_from_c);"}}
[j]="cannot use __auto_type with initializer list in C",
[b]=a,
[h]=o,
[d]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[k]={{xb,4791,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  if (!getLangOpts().CPlusPlus && InitList) {\n    Diag(Init->getBeginLoc(), diag::err_auto_init_list_from_c);"}}
},
},
["err_auto_missing_trailing_return"]={
["err_auto_missing_trailing_return"]={
[f]="\'auto\' return without trailing return type; deduced return types are a C++14 extension",
[h]="\'auto\' return without trailing return type; deduced return types are a C++14 extension",
[c]=l,
[j]=n,
[e]=n,
[g]="\'auto\' return without trailing return type; deduced return types are a C++14 extension",
[i]=m,
[i]=m,
[j]="\'auto\' return without trailing return type; deduced return types are a C\\+\\+14 extension",
[b]="\'auto\' return without trailing return type; deduced return types are a C++14 extension",
[b]=a,
[g]=l,
[h]=o,
[f]="\'auto\' return without trailing return type; deduced return types are a C\\+\\+14 extension",
[d]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[e]=a,
[k]={{r,5198,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto ? diag::err_auto_missing_trailing_return : diag::err_deduced_return_type);"}}
[d]=p,
[c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[k]={{s,5198,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto ? diag::err_auto_missing_trailing_return : diag::err_deduced_return_type);"}},
[o]={
["clang/test/ParserHLSL/group_shared_202x.hlsl"]={"clang/test/ParserHLSL/group_shared_202x.hlsl:21:1: error: \'auto\' return without trailing return type; deduced return types are a C++14 extension"}
}
},
},
["err_auto_new_ctor_multiple_expressions"]={
["err_auto_new_ctor_multiple_expressions"]={
[f]="new expression for type A contains multiple constructor arguments",
[h]="new expression for type A contains multiple constructor arguments",
[c]=l,
[j]=n,
[e]=n,
[g]="new expression for type %0 contains multiple constructor arguments",
[i]=m,
[i]=m,
[j]="new expression for type (.*?) contains multiple constructor arguments",
[b]="new expression for type %0 contains multiple constructor arguments",
[b]=a,
[g]=l,
[h]=o,
[f]="new expression for type (.*?) contains multiple constructor arguments",
[d]={wb,1298171975,vb},
[e]=a,
[k]={{x,2056,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Inits.size() > 1) {\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_new_ctor_multiple_expressions) << AllocType << TypeRange);"}}
[d]=p,
[c]={Ib,1298171975,Cb},
[k]={{y,2056,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Inits.size() > 1) {\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_new_ctor_multiple_expressions) << AllocType << TypeRange);"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:6:16: error: new expression for type \'auto\' contains multiple constructor arguments"}
}
},
},
["err_auto_new_deduction_failure"]={
["err_auto_new_deduction_failure"]={
[f]="new expression for type A has incompatible constructor argument of type B",
[h]="new expression for type A has incompatible constructor argument of type B",
[c]=l,
[j]=n,
[e]=n,
[g]="new expression for type %0 has incompatible constructor argument of type %1",
[i]=m,
[i]=m,
[j]="new expression for type (.*?) has incompatible constructor argument of type (.*?)",
[b]="new expression for type %0 has incompatible constructor argument of type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="new expression for type (.*?) has incompatible constructor argument of type (.*?)",
[d]={wb,1298171975,vb},
[e]=a,
[k]={{x,2072,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure) << AllocType << Deduce->getType() << TypeRange << Deduce->getSourceRange());"}}
[d]=p,
[c]={Ib,1298171975,Cb},
[k]={{y,2072,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure) << AllocType << Deduce->getType() << TypeRange << Deduce->getSourceRange());"}},
[o]={
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:14:9: error: new expression for type \'auto *\' has incompatible constructor argument of type \'void\'"}
}
},
},
["err_auto_new_requires_ctor_arg"]={
["err_auto_new_requires_ctor_arg"]={
[f]="new expression for type A requires a constructor argument",
[h]="new expression for type A requires a constructor argument",
[c]=l,
[j]=n,
[e]=n,
[g]="new expression for type %0 requires a constructor argument",
[i]=m,
[i]=m,
[j]="new expression for type (.*?) requires a constructor argument",
[b]="new expression for type %0 requires a constructor argument",
[b]=a,
[g]=l,
[h]=o,
[f]="new expression for type (.*?) requires a constructor argument",
[d]={wb,1298171975,vb},
[e]=a,
[k]={{x,2051,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (initStyle == CXXNewExpr::NoInit || Inits.empty())\n      return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg) << AllocType << TypeRange);"}}
[d]=p,
[c]={Ib,1298171975,Cb},
[k]={{y,2051,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (initStyle == CXXNewExpr::NoInit || Inits.empty())\n      return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg) << AllocType << TypeRange);"}},
[o]={
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:7:3: error: new expression for type \'auto\' requires a constructor argument"}
}
},
},
["err_auto_non_deduced_not_alone"]={
["err_auto_non_deduced_not_alone"]={
[f]="... must be the only declaration in its group",
[h]="... must be the only declaration in its group",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{function with deduced return type|declaration with trailing return type}0 must be the only declaration in its group",
[i]=m,
[i]=m,
[j]="(?:function with deduced return type|declaration with trailing return type) must be the only declaration in its group",
[b]="%select{function with deduced return type|declaration with trailing return type}0 must be the only declaration in its group",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:function with deduced return type|declaration with trailing return type) must be the only declaration in its group",
[d]={"8210ed558662",1484274121,"Implement DR1265 (wg21.link/cwg1265)."},
[e]=a,
[k]={{q,14580,"Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, ArrayRef<Decl *> Group) {\n  for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n    if (Decl *D = Group[i]) {\n      // For declarators, there are some additional syntactic-ish checks we need\n      // to perform.\n      if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {\n        if (FirstDeclaratorInGroup != DD) {\n          // A declarator that uses \'auto\' in any way other than to declare a\n          // variable with a deduced type cannot be combined with any other\n          // declarator in the same group.\n          if (FirstNonDeducedAutoInGroup && !DiagnosedNonDeducedAuto) {\n            Diag(FirstNonDeducedAutoInGroup->getLocation(), diag::err_auto_non_deduced_not_alone) << FirstNonDeducedAutoInGroup->getType()->hasAutoForTrailingReturnType() << FirstDeclaratorInGroup->getSourceRange() << DD->getSourceRange();"}}
[d]=p,
[c]={"8210ed558662",1484274121,"Implement DR1265 (wg21.link/cwg1265)."},
[k]={{r,14580,"Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, ArrayRef<Decl *> Group) {\n  for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n    if (Decl *D = Group[i]) {\n      // For declarators, there are some additional syntactic-ish checks we need\n      // to perform.\n      if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {\n        if (FirstDeclaratorInGroup != DD) {\n          // A declarator that uses \'auto\' in any way other than to declare a\n          // variable with a deduced type cannot be combined with any other\n          // declarator in the same group.\n          if (FirstNonDeducedAutoInGroup && !DiagnosedNonDeducedAuto) {\n            Diag(FirstNonDeducedAutoInGroup->getLocation(), diag::err_auto_non_deduced_not_alone) << FirstNonDeducedAutoInGroup->getType()->hasAutoForTrailingReturnType() << FirstDeclaratorInGroup->getSourceRange() << DD->getSourceRange();"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:25:10: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:28:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:30:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:41:15: error: declaration with trailing return type must be the only declaration in its group"}
}
},
},
["err_auto_not_allowed"]={
["err_auto_not_allowed"]={
[f]="... not allowed ...",
[h]="... not allowed ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{\'auto\'|\'decltype(auto)\'|\'__auto_type\'|use of %select{class template|function template|variable template|alias template|template template parameter|concept|template}2 %3 requires template arguments; argument deduction}0 not allowed %select{in function prototype|in non-static struct member|in struct member|in non-static union member|in union member|in non-static class member|in interface member|in exception declaration|in template parameter until C++17|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by \'new\'|in K&R-style function parameter|in template parameter|in friend declaration|in function prototype that is not a function declaration|in requires expression parameter}1",
[i]=m,
[i]=m,
[j]="(?:\'auto\'|\'decltype\\(auto\\)\'|\'__auto_type\'|use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments; argument deduction) not allowed (?:in function prototype|in non\\-static struct member|in struct member|in non\\-static union member|in union member|in non\\-static class member|in interface member|in exception declaration|in template parameter until C\\+\\+17|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by \'new\'|in K&R\\-style function parameter|in template parameter|in friend declaration|in function prototype that is not a function declaration|in requires expression parameter)",
[b]="%select{\'auto\'|\'decltype(auto)\'|\'__auto_type\'|use of %select{class template|function template|variable template|alias template|template template parameter|concept|template}2 %3 requires template arguments; argument deduction}0 not allowed %select{in function prototype|in non-static struct member|in struct member|in non-static union member|in union member|in non-static class member|in interface member|in exception declaration|in template parameter until C++17|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by \'new\'|in K&R-style function parameter|in template parameter|in friend declaration|in function prototype that is not a function declaration|in requires expression parameter}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:\'auto\'|\'decltype\\(auto\\)\'|\'__auto_type\'|use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments; argument deduction) not allowed (?:in function prototype|in non\\-static struct member|in struct member|in non\\-static union member|in union member|in non\\-static class member|in interface member|in exception declaration|in template parameter until C\\+\\+17|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by \'new\'|in K&R\\-style function parameter|in template parameter|in friend declaration|in function prototype that is not a function declaration|in requires expression parameter)",
[d]={"94ff77a356a7",1246054739,"More auto work."},
[e]=a,
[k]={{r,3735,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    if (Error != -1) {\n      SemaRef.Diag(AutoRange.getBegin(), diag::err_auto_not_allowed) << Kind << Error << (int)SemaRef.getTemplateNameKindForDiagnostics(TN) << QualType(Deduced, 0) << AutoRange;"}}
[d]=p,
[c]={"94ff77a356a7",1246054739,"More auto work."},
[k]={{s,3735,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    if (Error != -1) {\n      SemaRef.Diag(AutoRange.getBegin(), diag::err_auto_not_allowed) << Kind << Error << (int)SemaRef.getTemplateNameKindForDiagnostics(TN) << QualType(Deduced, 0) << AutoRange;"}},
[o]={
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:12:12: error: \'__auto_type\' not allowed in struct member","clang/test/Sema/auto-type.c:16:1: error: \'__auto_type\' not allowed in function return type","clang/test/Sema/auto-type.c:25:1: error: \'__auto_type\' not allowed in K&R-style function parameter","clang/test/Sema/auto-type.c:39:11: error: \'__auto_type\' not allowed here"}
}
},
},
["err_auto_not_allowed_var_inst"]={
["err_auto_not_allowed_var_inst"]={
[h]="\'auto\' variable template instantiation is not allowed",
[j]=n,
[i]=m,
[b]="\'auto\' variable template instantiation is not allowed",
[g]=l,
[f]="\'auto\' variable template instantiation is not allowed",
[f]="\'auto\' variable template instantiation is not allowed",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'auto\' variable template instantiation is not allowed",
[c]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[i]=m,
[k]={{Ob,10482,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n    } else {\n      // C++1y [dcl.spec.auto]p6:\n      //  ... A program that uses auto or decltype(auto) in a context not\n      //  explicitly allowed in this section is ill-formed.\n      //\n      // This includes auto-typed variable template instantiations.\n      if (R->isUndeducedType()) {\n        Diag(T->getTypeLoc().getBeginLoc(), diag::err_auto_not_allowed_var_inst);"}},
[j]="\'auto\' variable template instantiation is not allowed",
[o]={
[b]=a,
["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:161:14: error: \'auto\' variable template instantiation is not allowed"}
[h]=o,
}
[d]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[k]={{Cb,10482,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n    } else {\n      // C++1y [dcl.spec.auto]p6:\n      //  ... A program that uses auto or decltype(auto) in a context not\n      //  explicitly allowed in this section is ill-formed.\n      //\n      // This includes auto-typed variable template instantiations.\n      if (R->isUndeducedType()) {\n        Diag(T->getTypeLoc().getBeginLoc(), diag::err_auto_not_allowed_var_inst);"}}
},
},
["err_auto_var_deduction_failure"]={
["err_auto_var_deduction_failure"]={
[f]="variable A with type B has incompatible initializer of type C",
[h]="variable A with type B has incompatible initializer of type C",
[c]=l,
[j]=n,
[e]=n,
[g]="variable %0 with type %1 has incompatible initializer of type %2",
[i]=m,
[i]=m,
[j]="variable (.*?) with type (.*?) has incompatible initializer of type (.*?)",
[b]="variable %0 with type %1 has incompatible initializer of type %2",
[b]=a,
[g]=l,
[h]=o,
[f]="variable (.*?) with type (.*?) has incompatible initializer of type (.*?)",
[d]={wb,1298171975,vb},
[e]=a,
[k]={{xb,4977,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n  else\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure : diag::err_auto_var_deduction_failure) << VDecl->getDeclName() << VDecl->getType() << Init->getType() << Init->getSourceRange();"}}
[d]=p,
[c]={Ib,1298171975,Cb},
[k]={{Gb,4977,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n  else\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure : diag::err_auto_var_deduction_failure) << VDecl->getDeclName() << VDecl->getType() << Init->getType() << Init->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:6:9: error: variable \'c\' with type \'auto *\' has incompatible initializer of type \'void\'","clang/test/SemaCXX/auto-subst-failure.cpp:10:9: error: variable \'g\' with type \'auto *\' has incompatible initializer of type \'void\'"}
}
},
},
["err_auto_var_deduction_failure_from_init_list"]={
["err_auto_var_deduction_failure_from_init_list"]={
[f]="cannot deduce actual type for variable A with type B from initializer list",
[h]="cannot deduce actual type for variable A with type B from initializer list",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot deduce actual type for variable %0 with type %1 from initializer list",
[i]=m,
[i]=m,
[j]="cannot deduce actual type for variable (.*?) with type (.*?) from initializer list",
[b]="cannot deduce actual type for variable %0 with type %1 from initializer list",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot deduce actual type for variable (.*?) with type (.*?) from initializer list",
[d]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no..."},
[e]=a,
[k]={{xb,4972,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure_from_init_list : diag::err_auto_var_deduction_failure_from_init_list) << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();"}}
[d]=p,
[c]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no..."},
[k]={{Gb,4972,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure_from_init_list : diag::err_auto_var_deduction_failure_from_init_list) << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:352:12: error: cannot deduce actual type for variable \'x\' with type \'auto no_conversion_after_auto_list_deduction::X::*\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:355:10: error: cannot deduce actual type for variable \'y\' with type \'auto (*)()\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:359:18: error: cannot deduce actual type for variable \'a\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:360:18: error: cannot deduce actual type for variable \'b\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:361:18: error: cannot deduce actual type for variable \'c\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:362:18: error: cannot deduce actual type for variable \'d\' with type \'const auto\' from initializer list"}
}
},
},
["err_auto_var_init_multiple_expressions"]={
["err_auto_var_init_multiple_expressions"]={
[f]="initializer for variable A with type B contains multiple expressions",
[h]="initializer for variable A with type B contains multiple expressions",
[c]=l,
[j]=n,
[e]=n,
[g]="initializer for variable %0 with type %1 contains multiple expressions",
[i]=m,
[i]=m,
[j]="initializer for variable (.*?) with type (.*?) contains multiple expressions",
[b]="initializer for variable %0 with type %1 contains multiple expressions",
[b]=a,
[g]=l,
[h]=o,
[f]="initializer for variable (.*?) with type (.*?) contains multiple expressions",
[d]={wb,1298171975,vb},
[e]=a,
[k]={{q,12740,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  if (DeduceInits.size() > 1) {\n    Diag(DeduceInits[1]->getBeginLoc(), IsInitCapture ? diag::err_init_capture_multiple_expressions : diag::err_auto_var_init_multiple_expressions) << VN << Type << Range;"}}
[d]=p,
[c]={Ib,1298171975,Cb},
[k]={{r,12740,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  if (DeduceInits.size() > 1) {\n    Diag(DeduceInits[1]->getBeginLoc(), IsInitCapture ? diag::err_init_capture_multiple_expressions : diag::err_auto_var_init_multiple_expressions) << VN << Type << Range;"}},
[o]={
["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:10: error: initializer for variable \'x\' with type \'auto\' contains multiple expressions"}
}
},
},
["err_auto_var_init_no_expression"]={
["err_auto_var_init_no_expression"]={
[f]="initializer for variable A with type B is empty",
[h]="initializer for variable A with type B is empty",
[c]=l,
[j]=n,
[e]=n,
[g]="initializer for variable %0 with type %1 is empty",
[i]=m,
[i]=m,
[j]="initializer for variable (.*?) with type (.*?) is empty",
[b]="initializer for variable %0 with type %1 is empty",
[b]=a,
[g]=l,
[h]=o,
[f]="initializer for variable (.*?) with type (.*?) is empty",
[d]={"de30e523b40d",1325802848,"Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initi..."},
[e]=a,
[k]={{q,12732,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // Deduction only works if we have exactly one source expression.\n  if (DeduceInits.empty()) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_no_expression : diag::err_auto_var_init_no_expression) << VN << Type << Range;"}}
[d]=p,
[c]={"de30e523b40d",1325802848,"Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initi..."},
[k]={{r,12732,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // Deduction only works if we have exactly one source expression.\n  if (DeduceInits.empty()) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_no_expression : diag::err_auto_var_init_no_expression) << VN << Type << Range;"}},
[o]={
["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:9: error: initializer for variable \'x\' with type \'auto\' is empty"}
}
},
},
["err_auto_var_init_paren_braces"]={
["err_auto_var_init_paren_braces"]={
[f]="cannot deduce type for variable A with type B from ... initializer list",
[h]="cannot deduce type for variable A with type B from ... initializer list",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot deduce type for variable %1 with type %2 from %select{parenthesized|nested}0 initializer list",
[i]=m,
[i]=m,
[j]="cannot deduce type for variable (.*?) with type (.*?) from (?:parenthesized|nested) initializer list",
[b]="cannot deduce type for variable %1 with type %2 from %select{parenthesized|nested}0 initializer list",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot deduce type for variable (.*?) with type (.*?) from (?:parenthesized|nested) initializer list",
[d]={"66204ecff985",1394646165,"DR1346: a parenthesized braced-init-list cannot be used as the initializer when"},
[e]=a,
[k]={{q,12749,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  if (DirectInit && isa<InitListExpr>(DeduceInit)) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_paren_braces : diag::err_auto_var_init_paren_braces) << isa<InitListExpr>(Init) << VN << Type << Range;"}}
[d]=p,
[c]={"66204ecff985",1394646165,"DR1346: a parenthesized braced-init-list cannot be used as the initializer when"},
[k]={{r,12749,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  if (DirectInit && isa<InitListExpr>(DeduceInit)) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_paren_braces : diag::err_auto_var_init_paren_braces) << isa<InitListExpr>(Init) << VN << Type << Range;"}},
[o]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:217:10: error: cannot deduce type for variable \'x\' with type \'auto\' from nested initializer list"}
}
},
},
["err_auto_var_requires_init"]={
["err_auto_var_requires_init"]={
[f]="declaration of variable A with deduced type B requires an initializer",
[h]="declaration of variable A with deduced type B requires an initializer",
[c]=l,
[j]=n,
[e]=n,
[g]="declaration of variable %0 with deduced type %1 requires an initializer",
[i]=m,
[i]=m,
[j]="declaration of variable (.*?) with deduced type (.*?) requires an initializer",
[b]="declaration of variable %0 with deduced type %1 requires an initializer",
[b]=a,
[g]=l,
[h]=o,
[f]="declaration of variable (.*?) with deduced type (.*?) requires an initializer",
[d]={"ae01993a12d6",1247272479,"Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Als..."},
[e]=a,
[k]={{q,12696,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // C++11 [dcl.spec.auto]p3\n  if (!Init) {\n    // Except for class argument deduction, and then for an initializing\n    // declaration only, i.e. no static at class scope or extern.\n    if (!isa<DeducedTemplateSpecializationType>(Deduced) || VDecl->hasExternalStorage() || VDecl->isStaticDataMember()) {\n      Diag(VDecl->getLocation(), diag::err_auto_var_requires_init) << VDecl->getDeclName() << Type;"}}
[d]=p,
[c]={"ae01993a12d6",1247272479,"Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Als..."},
[k]={{r,12696,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // C++11 [dcl.spec.auto]p3\n  if (!Init) {\n    // Except for class argument deduction, and then for an initializing\n    // declaration only, i.e. no static at class scope or extern.\n    if (!isa<DeducedTemplateSpecializationType>(Deduced) || VDecl->hasExternalStorage() || VDecl->isStaticDataMember()) {\n      Diag(VDecl->getLocation(), diag::err_auto_var_requires_init) << VDecl->getDeclName() << Type;"}},
[o]={
["clang/test/SemaCXX/crash-auto-36064.cpp"]={"clang/test/SemaCXX/crash-auto-36064.cpp:5:15: error: declaration of variable \'c\' with deduced type \'auto\' requires an initializer"}
}
},
},
["err_auto_variable_cannot_appear_in_own_initializer"]={
["err_auto_variable_cannot_appear_in_own_initializer"]={
[f]="variable A declared with deduced type B cannot appear in its own initializer",
[h]="variable A declared with deduced type B cannot appear in its own initializer",
[c]=l,
[j]=n,
[e]=n,
[g]="variable %0 declared with deduced type %1 cannot appear in its own initializer",
[i]=m,
[i]=m,
[j]="variable (.*?) declared with deduced type (.*?) cannot appear in its own initializer",
[b]="variable %0 declared with deduced type %1 cannot appear in its own initializer",
[b]=a,
[g]=l,
[h]=o,
[f]="variable (.*?) declared with deduced type (.*?) cannot appear in its own initializer",
[d]={"364035d1a821",1246043767,"An auto variable can\'t appear in its own initializer."},
[e]=a,
[k]={{y,260,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n    } else {\n      Diag(Loc, diag::err_auto_variable_cannot_appear_in_own_initializer) << D->getDeclName() << cast<VarDecl>(D)->getType();"}}
[d]=p,
[c]={"364035d1a821",1246043767,"An auto variable can\'t appear in its own initializer."},
[k]={{z,260,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n    } else {\n      Diag(Loc, diag::err_auto_variable_cannot_appear_in_own_initializer) << D->getDeclName() << cast<VarDecl>(D)->getType();"}},
[o]={
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:10:17: error: variable \'e\' declared with deduced type \'__auto_type\' cannot appear in its own initializer"}
}
},
},
["err_avail_query_expected_platform_name"]={
["err_avail_query_expected_platform_name"]={
[h]="expected a platform name here",
[j]=n,
[i]=m,
[b]="expected a platform name here",
[g]=l,
[f]="expected a platform name here",
[f]="expected a platform name here",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="expected a platform name here",
[c]={Nb,1468629323,Qb},
[i]=m,
[k]={{mb,3773,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  } else {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_avail_query_expected_platform_name);"}},
[j]="expected a platform name here",
[o]={
[b]=a,
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:18:20: error: expected a platform name here","clang/test/Parser/objc-available.m:19:32: error: expected a platform name here"}
[h]=B,
}
[d]={Gb,1468629323,Db},
[k]={{kb,3773,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  } else {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_avail_query_expected_platform_name);"}}
},
},
["err_avail_query_unrecognized_platform_name"]={
["err_avail_query_unrecognized_platform_name"]={
[f]="unrecognized platform name A",
[h]="unrecognized platform name A",
[c]=l,
[j]=n,
[e]=n,
[g]="unrecognized platform name %0",
[i]=m,
[i]=m,
[j]="unrecognized platform name (.*?)",
[b]="unrecognized platform name %0",
[b]=a,
[g]=l,
[h]=B,
[f]="unrecognized platform name (.*?)",
[d]={Gb,1468629323,Db},
[e]=a,
[k]={{kb,3790,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  } else {\n    if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {\n      Diag(PlatformIdentifier->Loc, diag::err_avail_query_unrecognized_platform_name) << GivenPlatform;"}}
[d]=A,
[c]={Nb,1468629323,Qb},
[k]={{mb,3790,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  } else {\n    if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {\n      Diag(PlatformIdentifier->Loc, diag::err_avail_query_unrecognized_platform_name) << GivenPlatform;"}},
[o]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:14:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:35: error: unrecognized platform name hat_os"}
}
},
},
["err_availability_expected_change"]={
["err_availability_expected_change"]={
[h]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[j]=n,
[i]=m,
[b]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[g]=l,
[f]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[f]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[c]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[i]=m,
[k]={{E,1187,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_availability_expected_change);"}}
[j]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[b]=a,
[h]=B,
[d]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[k]={{D,1187,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_availability_expected_change);"}}
},
},
["err_availability_expected_platform"]={
["err_availability_expected_platform"]={
[f]="expected a platform name, e.g., \'macos\'",
[h]="expected a platform name, e.g., \'macos\'",
[c]=l,
[j]=n,
[e]=n,
[g]="expected a platform name, e.g., \'macos\'",
[i]=m,
[i]=m,
[j]="expected a platform name, e\\.g\\., \'macos\'",
[b]="expected a platform name, e.g., \'macos\'",
[b]=a,
[g]=l,
[h]=B,
[f]="expected a platform name, e\\.g\\., \'macos\'",
[d]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[e]=a,
[k]={{D,1146,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // Parse the platform name.\n  if (Tok.isNot(tok::identifier)) {\n    Diag(Tok, diag::err_availability_expected_platform);"}}
[d]=A,
[c]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[k]={{E,1146,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // Parse the platform name.\n  if (Tok.isNot(tok::identifier)) {\n    Diag(Tok, diag::err_availability_expected_platform);"}}
},
},
["err_availability_query_repeated_platform"]={
["err_availability_query_repeated_platform"]={
[f]="version for \'A\' already specified",
[h]="version for \'A\' already specified",
[c]=l,
[j]=n,
[e]=n,
[g]="version for \'%0\' already specified",
[i]=m,
[i]=m,
[j]="version for \'(.*?)\' already specified",
[b]="version for \'%0\' already specified",
[b]=a,
[g]=l,
[h]=B,
[f]="version for \'(.*?)\' already specified",
[d]={Gb,1468629323,Db},
[e]=a,
[k]={{kb,3741,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  for (const auto &Spec : AvailSpecs) {\n    if (!Inserted) {\n      P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_platform) << Spec.getEndLoc() << Platform;"}}
[d]=A,
[c]={Nb,1468629323,Qb},
[k]={{mb,3741,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  for (const auto &Spec : AvailSpecs) {\n    if (!Inserted) {\n      P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_platform) << Spec.getEndLoc() << Platform;"}},
[o]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:12:33: error: version for \'macos\' already specified"}
}
},
},
["err_availability_query_repeated_star"]={
["err_availability_query_repeated_star"]={
[f]="\'*\' query has already been specified",
[h]="\'*\' query has already been specified",
[c]=l,
[j]=n,
[e]=n,
[g]="\'*\' query has already been specified",
[i]=m,
[i]=m,
[j]="\'\\*\' query has already been specified",
[b]="\'*\' query has already been specified",
[b]=a,
[g]=l,
[h]=B,
[f]="\'\\*\' query has already been specified",
[d]={Gb,1468629323,Db},
[e]=a,
[k]={{kb,3727,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  for (const auto &Spec : AvailSpecs) {\n    if (Spec.isOtherPlatformSpec()) {\n      if (HasOtherPlatformSpec) {\n        P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_star);"}}
[d]=A,
[c]={Nb,1468629323,Qb},
[k]={{mb,3727,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  for (const auto &Spec : AvailSpecs) {\n    if (Spec.isOtherPlatformSpec()) {\n      if (HasOtherPlatformSpec) {\n        P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_star);"}}
},
},
["err_availability_query_wildcard_required"]={
["err_availability_query_wildcard_required"]={
[f]="must handle potential future platforms with \'*\'",
[h]="must handle potential future platforms with \'*\'",
[c]=l,
[j]=n,
[e]=n,
[g]="must handle potential future platforms with \'*\'",
[i]=m,
[i]=m,
[j]="must handle potential future platforms with \'\\*\'",
[b]="must handle potential future platforms with \'*\'",
[b]=a,
[g]=l,
[h]=B,
[f]="must handle potential future platforms with \'\\*\'",
[d]={Gb,1468629323,Db},
[e]=a,
[k]={{kb,3749,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  if (!HasOtherPlatformSpec) {\n    P.Diag(InsertWildcardLoc, diag::err_availability_query_wildcard_required) << FixItHint::CreateInsertion(InsertWildcardLoc, \", *\");"}}
[d]=A,
[c]={Nb,1468629323,Qb},
[k]={{mb,3749,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  if (!HasOtherPlatformSpec) {\n    P.Diag(InsertWildcardLoc, diag::err_availability_query_wildcard_required) << FixItHint::CreateInsertion(InsertWildcardLoc, \", *\");"}},
[o]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:11:31: error: must handle potential future platforms with \'*\'"}
}
},
},
["err_availability_redundant"]={
["err_availability_redundant"]={
[f]="redundant A availability change; only the last specified change will be used",
[h]="redundant A availability change; only the last specified change will be used",
[c]=l,
[j]=n,
[e]=n,
[g]="redundant %0 availability change; only the last specified change will be used",
[i]=m,
[i]=m,
[j]="redundant (.*?) availability change; only the last specified change will be used",
[b]="redundant %0 availability change; only the last specified change will be used",
[b]=a,
[g]=l,
[h]=B,
[f]="redundant (.*?) availability change; only the last specified change will be used",
[d]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[e]=a,
[k]={{D,1196,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Keyword == Ident_strict) {\n      if (StrictLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(StrictLoc);"},{D,1205,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Keyword == Ident_unavailable) {\n      if (UnavailableLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(UnavailableLoc);"},{D,1216,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Keyword == Ident_deprecated && Platform->Ident && Platform->Ident->isStr(\"swift\")) {\n      // For swift, we deprecate for all versions.\n      if (Changes[Deprecated].KeywordLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Deprecated].KeywordLoc);"},{D,1294,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Index < Unknown) {\n      if (!Changes[Index].KeywordLoc.isInvalid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}}
[d]=A,
[c]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[k]={{E,1196,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Keyword == Ident_strict) {\n      if (StrictLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(StrictLoc);"},{E,1205,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Keyword == Ident_unavailable) {\n      if (UnavailableLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(UnavailableLoc);"},{E,1216,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Keyword == Ident_deprecated && Platform->Ident && Platform->Ident->isStr(\"swift\")) {\n      // For swift, we deprecate for all versions.\n      if (Changes[Deprecated].KeywordLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Deprecated].KeywordLoc);"},{E,1294,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Index < Unknown) {\n      if (!Changes[Index].KeywordLoc.isInvalid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}},
[o]={
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:13:94: error: redundant \'introduced\' availability change; only the last specified change will be used","clang/test/Parser/attr-availability.c:17:98: error: redundant \'unavailable\' availability change; only the last specified change will be used"}
}
},
},
["err_availability_unknown_change"]={
["err_availability_unknown_change"]={
[f]="A is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[h]="A is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[i]=m,
[i]=m,
[j]="(.*?) is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[b]="%0 is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[b]=a,
[g]=l,
[h]=B,
[f]="(.*?) is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[d]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[e]=a,
[k]={{D,1304,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Index < Unknown) {\n    } else {\n      Diag(KeywordLoc, diag::err_availability_unknown_change) << Keyword << VersionRange;"}}
[d]=A,
[c]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[k]={{E,1304,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  do {\n    if (Index < Unknown) {\n    } else {\n      Diag(KeywordLoc, diag::err_availability_unknown_change) << Keyword << VersionRange;"}},
[o]={
["clang/test/Sema/attr-availability-square-brackets.c"]={"clang/test/Sema/attr-availability-square-brackets.c:25:35: error: \'should\' is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'"}
}
},
},
["err_avx_calling_convention"]={
["err_avx_calling_convention"]={
[f]="AVX vector ... of type A without \'B\' enabled changes the ABI",
[h]="AVX vector ... of type A without \'B\' enabled changes the ABI",
[c]=l,
[j]=n,
[e]=n,
[g]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI",
[i]=m,
[i]=m,
[j]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI",
[b]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI",
[b]=a,
[g]=l,
[h]=a,
[f]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI",
[d]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error"},
[e]=a,
[k]={{"clang/lib/CodeGen/Targets/X86.cpp",1504,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  // Mixing calling conventions here is very clearly an error.\n  if (!CallerHasFeat || !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::err_avx_calling_convention) << IsArgument << Ty << Feature;"}}
[d]=a,
[c]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error"},
[k]={{"clang/lib/CodeGen/Targets/X86.cpp",1504,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  // Mixing calling conventions here is very clearly an error.\n  if (!CallerHasFeat || !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::err_avx_calling_convention) << IsArgument << Ty << Feature;"}},
[o]={
["clang/test/CodeGen/target-avx-abi-diag.c"]={"clang/test/CodeGen/target-avx-abi-diag.c:36:3: error: AVX vector argument of type \'avx512fType\' (vector of 32 \'short\' values) without \'avx512f\' enabled changes the ABI","clang/test/CodeGen/target-avx-abi-diag.c:39:3: error: AVX vector argument of type \'avx512fType\' (vector of 32 \'short\' values) without \'avx512f\' enabled changes the ABI"}
}
},
},
["err_await_suspend_invalid_return_type"]={
["err_await_suspend_invalid_return_type"]={
[f]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have A)",
[h]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have A)",
[c]=l,
[j]=n,
[e]=n,
[g]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have %0)",
[i]=m,
[i]=m,
[j]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' \\(have (.*?)\\)",
[b]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have %0)",
[b]=a,
[g]=l,
[h]="Coroutines Issue",
[f]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' \\(have (.*?)\\)",
[d]={"d978e53c6d70",1495995672,"[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing c..."},
[e]=a,
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",448,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitSuspend->getType()->isDependentType()) {\n    // Support for coroutine_handle returning await_suspend.\n    if (Expr *TailCallSuspend = maybeTailCall(S, RetType, AwaitSuspend, Loc))\n    else {\n      // non-class prvalues always have cv-unqualified types\n      if (RetType->isReferenceType() || (!RetType->isBooleanType() && !RetType->isVoidType())) {\n        S.Diag(AwaitSuspend->getCalleeDecl()->getLocation(), diag::err_await_suspend_invalid_return_type) << RetType;"}}
[d]="Coroutines Issue",
[c]={"d978e53c6d70",1495995672,"[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing c..."},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",448,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitSuspend->getType()->isDependentType()) {\n    // Support for coroutine_handle returning await_suspend.\n    if (Expr *TailCallSuspend = maybeTailCall(S, RetType, AwaitSuspend, Loc))\n    else {\n      // non-class prvalues always have cv-unqualified types\n      if (RetType->isReferenceType() || (!RetType->isBooleanType() && !RetType->isVoidType())) {\n        S.Diag(AwaitSuspend->getCalleeDecl()->getLocation(), diag::err_await_suspend_invalid_return_type) << RetType;"}},
[o]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1011:8: error: return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have \'char\')","clang/test/SemaCXX/coroutines.cpp:1033:13: error: return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have \'bool &&\')","clang/test/SemaCXX/coroutines.cpp:1033:13: error: return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have \'bool &\')"}
}
},
},
["err_bad_cast_incomplete"]={
["err_bad_cast_incomplete"]={
[f]="A is an incomplete type",
[h]="A is an incomplete type",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 is an incomplete type",
[i]=m,
[i]=m,
[j]="(.*?) is an incomplete type",
[b]="%0 is an incomplete type",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) is an incomplete type",
[d]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[e]=a,
[k]={{w,816,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointee->isVoidType()) {\n  } else if (DestRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee, diag::err_bad_cast_incomplete, DestRange)) {"},{w,861,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (SrcRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee, diag::err_bad_cast_incomplete, SrcExpr.get())) {"},{w,1400,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // Reverse integral promotion/conversion. All such conversions are themselves\n  // again integral promotions or conversions and are thus already handled by\n  // p2 (TryDirectInitialization above).\n  // (Note: any data loss warnings should be suppressed.)\n  // The exception is the reverse of enum->integer, i.e. integer->enum (and\n  // enum->enum). See also C++ 5.2.9p7.\n  // The same goes for reverse floating point promotion/conversion and\n  // floating-integral conversions. Again, only floating->enum is relevant.\n  if (DestType->isEnumeralType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete)) {"},{w,1883,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"}}
[d]=p,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{x,816,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointee->isVoidType()) {\n  } else if (DestRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee, diag::err_bad_cast_incomplete, DestRange)) {"},{x,861,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (SrcRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee, diag::err_bad_cast_incomplete, SrcExpr.get())) {"},{x,1400,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // Reverse integral promotion/conversion. All such conversions are themselves\n  // again integral promotions or conversions and are thus already handled by\n  // p2 (TryDirectInitialization above).\n  // (Note: any data loss warnings should be suppressed.)\n  // The exception is the reverse of enum->integer, i.e. integer->enum (and\n  // enum->enum). See also C++ 5.2.9p7.\n  // The same goes for reverse floating point promotion/conversion and\n  // floating-integral conversions. Again, only floating->enum is relevant.\n  if (DestType->isEnumeralType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete)) {"},{x,1883,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:37:9: error: \'Incomplete\' is an incomplete type","clang/test/SemaCXX/dynamic-cast.cpp:39:9: error: \'Incomplete\' is an incomplete type"}
}
},
},
["err_bad_category_property_decl"]={
["err_bad_category_property_decl"]={
[f]="property implementation must have its declaration in the category A",
[h]="property implementation must have its declaration in the category A",
[c]=l,
[j]=n,
[e]=n,
[g]="property implementation must have its declaration in the category %0",
[i]=m,
[i]=m,
[j]="property implementation must have its declaration in the category (.*?)",
[b]="property implementation must have its declaration in the category %0",
[b]=a,
[g]=l,
[h]=o,
[f]="property implementation must have its declaration in the category (.*?)",
[d]={ub,1480718311,yb},
[e]=a,
[k]={{P,1194,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    if (!property) {\n      Diag(PropertyLoc, diag::err_bad_category_property_decl) << Category->getDeclName();"}}
[d]=p,
[c]={zb,1480718311,vb},
[k]={{R,1194,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    if (!property) {\n      Diag(PropertyLoc, diag::err_bad_category_property_decl) << Category->getDeclName();"}},
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:27:10: error: property implementation must have its declaration in the category \'CAT\'"}
}
},
},
["err_bad_character_encoding"]={
["err_bad_character_encoding"]={
[h]="illegal character encoding in character literal",
[j]=n,
[i]=m,
[b]="illegal character encoding in character literal",
[g]=l,
[f]="illegal character encoding in character literal",
[f]="illegal character encoding in character literal",
[c]=l,
[e]=a,
[e]=n,
[d]=ib,
[g]="illegal character encoding in character literal",
[c]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals"},
[i]=m,
[k]={{"clang/lib/Lex/LiteralSupport.cpp",1745,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      if (res != llvm::conversionOK) {\n        unsigned Msg = diag::err_bad_character_encoding;"}},
[j]="illegal character encoding in character literal",
[o]={
[b]=a,
["clang/test/Lexer/char-literal-encoding-error.c"]={"clang/test/Lexer/char-literal-encoding-error.c:7:9: error: illegal character encoding in character literal","clang/test/Lexer/char-literal-encoding-error.c:8:9: error: illegal character encoding in character literal","clang/test/Lexer/char-literal-encoding-error.c:9:9: error: illegal character encoding in character literal"}
[h]=gb,
}
[d]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals"},
[k]={{"clang/lib/Lex/LiteralSupport.cpp",1745,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      if (res != llvm::conversionOK) {\n        unsigned Msg = diag::err_bad_character_encoding;"}}
},
},
["err_bad_const_cast_dest"]={
["err_bad_const_cast_dest"]={
[f]="... to A, which is not a reference, pointer-to-object, or pointer-to-data-member",
[h]="... to A, which is not a reference, pointer-to-object, or pointer-to-data-member",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast||||C-style cast|functional-style cast|}0 to %2, which is not a reference, pointer-to-object, or pointer-to-data-member",
[i]=m,
[i]=m,
[j]="(?:const_cast||||C\\-style cast|functional\\-style cast|) to (.*?), which is not a reference, pointer\\-to\\-object, or pointer\\-to\\-data\\-member",
[b]="%select{const_cast||||C-style cast|functional-style cast|}0 to %2, which is not a reference, pointer-to-object, or pointer-to-data-member",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast||||C\\-style cast|functional\\-style cast|) to (.*?), which is not a reference, pointer\\-to\\-object, or pointer\\-to\\-data\\-member",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,1998,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (!DestType->isPointerType() && !DestType->isMemberPointerType() && !DestType->isObjCObjectPointerType()) {\n    // Cannot cast to non-pointer, non-reference type. Note that, if DestType\n    // was a reference type, we converted it to a pointer above.\n    // The status of rvalue references isn\'t entirely clear, but it looks like\n    // conversion to them is simply invalid.\n    // C++ 5.2.11p3: For two pointer types [...]\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"},{w,2007,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (DestType->isFunctionPointerType() || DestType->isMemberFunctionPointerType()) {\n    // Cannot cast direct function pointers.\n    // C++ 5.2.11p2: [...] where T is any object type or the void type [...]\n    // T is the ultimate pointee of source and target type.\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,1998,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (!DestType->isPointerType() && !DestType->isMemberPointerType() && !DestType->isObjCObjectPointerType()) {\n    // Cannot cast to non-pointer, non-reference type. Note that, if DestType\n    // was a reference type, we converted it to a pointer above.\n    // The status of rvalue references isn\'t entirely clear, but it looks like\n    // conversion to them is simply invalid.\n    // C++ 5.2.11p3: For two pointer types [...]\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"},{x,2007,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (DestType->isFunctionPointerType() || DestType->isMemberFunctionPointerType()) {\n    // Cannot cast direct function pointers.\n    // C++ 5.2.11p2: [...] where T is any object type or the void type [...]\n    // T is the ultimate pointee of source and target type.\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"}},
[o]={
["clang/test/SemaCXX/const-cast.cpp"]={"clang/test/SemaCXX/const-cast.cpp:59:12: error: const_cast to \'char\', which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:71:11: error: const_cast to \'f\' (aka \'int (*)(int)\'), which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:73:9: error: const_cast to \'void (A::*)()\', which is not a reference, pointer-to-object, or pointer-to-data-member"}
}
},
},
["err_bad_cstyle_cast_overload"]={
["err_bad_cstyle_cast_overload"]={
[f]="address of overloaded function A cannot be cast to type B",
[h]="address of overloaded function A cannot be cast to type B",
[c]=l,
[j]=n,
[e]=n,
[g]="address of overloaded function %0 cannot be cast to type %1",
[i]=m,
[i]=m,
[j]="address of overloaded function (.*?) cannot be cast to type (.*?)",
[b]="address of overloaded function %0 cannot be cast to type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="address of overloaded function (.*?) cannot be cast to type (.*?)",
[d]={"b491ed36b4ef",1298151169,"Handle the resolution of a reference to a function template (which"},
[e]=a,
[k]={{w,2738,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  if (DestType->isVoidType()) {\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr, /* Decay Function to ptr */ false,\n                                                            /* Complain */ true, DestRange, DestType, diag::err_bad_cstyle_cast_overload);"},{w,2848,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      if (Fn) {\n        Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload) << OE->getName() << DestType << OpRange << OE->getQualifierLoc().getSourceRange();"}}
[d]=p,
[c]={"b491ed36b4ef",1298151169,"Handle the resolution of a reference to a function template (which"},
[k]={{x,2738,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  if (DestType->isVoidType()) {\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr, /* Decay Function to ptr */ false,\n                                                            /* Complain */ true, DestRange, DestType, diag::err_bad_cstyle_cast_overload);"},{x,2848,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      if (Fn) {\n        Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload) << OE->getName() << DestType << OpRange << OE->getQualifierLoc().getSourceRange();"}},
[o]={
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:68:16: error: address of overloaded function \'f\' cannot be cast to type \'FnType\' (aka \'void (int)\')"}
}
},
},
["err_bad_cxx_cast_addr_space_mismatch"]={
["err_bad_cxx_cast_addr_space_mismatch"]={
[f]="... from A to B converts between mismatching address spaces",
[h]="... from A to B converts between mismatching address spaces",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from %1 to %2 converts between mismatching address spaces",
[i]=m,
[i]=m,
[j]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from (.*?) to (.*?) converts between mismatching address spaces",
[b]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from %1 to %2 converts between mismatching address spaces",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from (.*?) to (.*?) converts between mismatching address spaces",
[d]={"6f7c536e083b",1551978390,"[Sema] Change addr space diagnostics in casts to follow C++ style."},
[e]=a,
[k]={{w,2622,"static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg, CastKind &Kind) {\n  if (!DestPointeeType.isAddressSpaceOverlapping(SrcPointeeType)) {\n    msg = diag::err_bad_cxx_cast_addr_space_mismatch;"}}
[d]=p,
[c]={"6f7c536e083b",1551978390,"[Sema] Change addr space diagnostics in casts to follow C++ style."},
[k]={{x,2622,"static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg, CastKind &Kind) {\n  if (!DestPointeeType.isAddressSpaceOverlapping(SrcPointeeType)) {\n    msg = diag::err_bad_cxx_cast_addr_space_mismatch;"}},
[o]={
["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:11:20: error: addrspace_cast from \'__global int *__private\' to \'__local int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:23:13: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:24:23: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces"}
}
},
},
["err_bad_cxx_cast_bitfield"]={
["err_bad_cxx_cast_bitfield"]={
[f]="... from bit-field lvalue to reference type A",
[h]="... from bit-field lvalue to reference type A",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from bit-field lvalue to reference type %2",
[i]=m,
[i]=m,
[j]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from bit\\-field lvalue to reference type (.*?)",
[b]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from bit-field lvalue to reference type %2",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from bit\\-field lvalue to reference type (.*?)",
[d]={"d25db7ed0f8e",1367876352,"Grab-bag of bit-field fixes:"},
[e]=a,
[k]={{w,1978,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // It\'s not completely clear under the standard whether we can\n    // const_cast bit-field gl-values.  Doing so would not be\n    // intrinsically complicated, but for now, we say no for\n    // consistency with other compilers and await the word of the\n    // committee.\n    if (SrcExpr.get()->refersToBitField()) {\n      msg = diag::err_bad_cxx_cast_bitfield;"},{w,2290,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    case OK_BitField:\n      msg = diag::err_bad_cxx_cast_bitfield;"}}
[d]=p,
[c]={"d25db7ed0f8e",1367876352,"Grab-bag of bit-field fixes:"},
[k]={{x,1978,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // It\'s not completely clear under the standard whether we can\n    // const_cast bit-field gl-values.  Doing so would not be\n    // intrinsically complicated, but for now, we say no for\n    // consistency with other compilers and await the word of the\n    // committee.\n    if (SrcExpr.get()->refersToBitField()) {\n      msg = diag::err_bad_cxx_cast_bitfield;"},{x,2290,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    case OK_BitField:\n      msg = diag::err_bad_cxx_cast_bitfield;"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:53:20: error: C-style cast from bit-field lvalue to reference type \'unsigned int &\'","clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:54:20: error: const_cast from bit-field lvalue to reference type \'unsigned int &\'"}
}
},
},
["err_bad_cxx_cast_generic"]={
["err_bad_cxx_cast_generic"]={
[f]="... from A to B is not allowed",
[h]="... from A to B is not allowed",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from %1 to %2 is not allowed",
[i]=m,
[i]=m,
[j]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from (.*?) to (.*?) is not allowed",
[b]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from %1 to %2 is not allowed",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from (.*?) to (.*?) is not allowed",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,521,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (msg == diag::err_bad_cxx_cast_generic && tryDiagnoseOverloadedCast(S, castType, opRange, src, destType, listInitialization))"},{w,966,"/// CheckConstCast - Check that a const_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.11 for details. const_cast is typically used in code\n/// like this:\n/// const char *str = \"literal\";\n/// legacy_function(const_cast\\<char*\\>(str));\nvoid CastOperation::CheckConstCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{w,977,"void CastOperation::CheckAddrspaceCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{w,1193,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{w,1265,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{w,2798,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,521,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (msg == diag::err_bad_cxx_cast_generic && tryDiagnoseOverloadedCast(S, castType, opRange, src, destType, listInitialization))"},{x,966,"/// CheckConstCast - Check that a const_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.11 for details. const_cast is typically used in code\n/// like this:\n/// const char *str = \"literal\";\n/// legacy_function(const_cast\\<char*\\>(str));\nvoid CastOperation::CheckConstCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{x,977,"void CastOperation::CheckAddrspaceCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{x,1193,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{x,1265,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{x,2798,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"}},
[o]={
["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:5:19: error: addrspace_cast from \'__global int *__private\' to \'__generic float *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:7:11: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:9:14: error: addrspace_cast from \'__global int\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:13:15: error: addrspace_cast from \'const __global int *__private\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:16:18: error: addrspace_cast from \'__global int\' to \'__generic int &\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:25:12: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed"}
}
},
},
["err_bad_cxx_cast_member_pointer_size"]={
["err_bad_cxx_cast_member_pointer_size"]={
[f]="cannot ... from member pointer type A to member pointer type B of different size",
[h]="cannot ... from member pointer type A to member pointer type B of different size",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot %select{||reinterpret_cast||C-style cast||}0 from member pointer type %1 to member pointer type %2 of different size",
[i]=m,
[i]=m,
[j]="cannot (?:||reinterpret_cast||C\\-style cast||) from member pointer type (.*?) to member pointer type (.*?) of different size",
[b]="cannot %select{||reinterpret_cast||C-style cast||}0 from member pointer type %1 to member pointer type %2 of different size",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot (?:||reinterpret_cast||C\\-style cast||) from member pointer type (.*?) to member pointer type (.*?) of different size",
[d]={"ebab1ed5d30c",1281936644,"Error out if reinterpret_casting between member pointers of two different"},
[e]=a,
[k]={{w,2340,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (DestMemPtr && SrcMemPtr) {\n    // Don\'t allow casting between member pointers of different sizes.\n    if (Self.Context.getTypeSize(DestMemPtr) != Self.Context.getTypeSize(SrcMemPtr)) {\n      msg = diag::err_bad_cxx_cast_member_pointer_size;"}}
[d]=p,
[c]={"ebab1ed5d30c",1281936644,"Error out if reinterpret_casting between member pointers of two different"},
[k]={{x,2340,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (DestMemPtr && SrcMemPtr) {\n    // Don\'t allow casting between member pointers of different sizes.\n    if (Self.Context.getTypeSize(DestMemPtr) != Self.Context.getTypeSize(SrcMemPtr)) {\n      msg = diag::err_bad_cxx_cast_member_pointer_size;"}},
[o]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:231:26: error: cannot reinterpret_cast from member pointer type \'int AA::*\' to member pointer type \'int Virtual::*\' of different size"}
}
},
},
["err_bad_cxx_cast_qualifiers_away"]={
["err_bad_cxx_cast_qualifiers_away"]={
[f]="... from A to B casts away qualifiers",
[h]="... from A to B casts away qualifiers",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 casts away qualifiers",
[i]=m,
[i]=m,
[j]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) casts away qualifiers",
[b]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 casts away qualifiers",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) casts away qualifiers",
[d]={"b472e93af799",1302890394,"Implement appropriate semantics for C++ casting and conversion when"},
[e]=a,
[k]={{w,767,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n  case CastAwayConstnessKind::CACK_SimilarKind:\n    DiagID = diag::err_bad_cxx_cast_qualifiers_away;"},{w,881,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  // C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.\n  if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{w,1455,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // Reverse pointer conversion to void*. C++ 4.10.p2 specifies conversion to\n  // void*. C++ 5.2.9p10 specifies additional restrictions, which really is\n  // just the usual constness stuff.\n  if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    if (SrcPointee->isVoidType()) {\n      if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n        if (DestPointee->isIncompleteOrObjectType()) {\n          // This is definitely the intended conversion, but it might fail due\n          // to a qualifier violation. Note that we permit Objective-C lifetime\n          // and GC qualifier mismatches here.\n          if (!CStyle) {\n            if (DestPointeeQuals != SrcPointeeQuals && !DestPointeeQuals.compatiblyIncludes(SrcPointeeQuals)) {\n              msg = diag::err_bad_cxx_cast_qualifiers_away;"},{w,1687,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // Must preserve cv, as always, unless we\'re in C-style mode.\n  if (!CStyle && !DestType.isAtLeastAsQualifiedAs(SrcType)) {\n    msg = diag::err_bad_cxx_cast_qualifiers_away;"}}
[d]=p,
[c]={"b472e93af799",1302890394,"Implement appropriate semantics for C++ casting and conversion when"},
[k]={{x,767,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n  case CastAwayConstnessKind::CACK_SimilarKind:\n    DiagID = diag::err_bad_cxx_cast_qualifiers_away;"},{x,881,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  // C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.\n  if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{x,1455,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // Reverse pointer conversion to void*. C++ 4.10.p2 specifies conversion to\n  // void*. C++ 5.2.9p10 specifies additional restrictions, which really is\n  // just the usual constness stuff.\n  if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    if (SrcPointee->isVoidType()) {\n      if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n        if (DestPointee->isIncompleteOrObjectType()) {\n          // This is definitely the intended conversion, but it might fail due\n          // to a qualifier violation. Note that we permit Objective-C lifetime\n          // and GC qualifier mismatches here.\n          if (!CStyle) {\n            if (DestPointeeQuals != SrcPointeeQuals && !DestPointeeQuals.compatiblyIncludes(SrcPointeeQuals)) {\n              msg = diag::err_bad_cxx_cast_qualifiers_away;"},{x,1687,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // Must preserve cv, as always, unless we\'re in C-style mode.\n  if (!CStyle && !DestType.isAtLeastAsQualifiedAs(SrcType)) {\n    msg = diag::err_bad_cxx_cast_qualifiers_away;"}},
[o]={
["clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp"]={"clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:8:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:10:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'float *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:12:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *Y::*X::**\' casts away qualifiers"}
}
},
},
["err_bad_cxx_cast_rvalue"]={
["err_bad_cxx_cast_rvalue"]={
[f]="... from rvalue to reference type A",
[h]="... from rvalue to reference type A",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from rvalue to reference type %2",
[i]=m,
[i]=m,
[j]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from rvalue to reference type (.*?)",
[b]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from rvalue to reference type %2",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from rvalue to reference type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,845,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointer) {\n  } else if (DestReference->isLValueReferenceType()) {\n    if (!SrcExpr.get()->isLValue()) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{w,1595,"/// Tests whether a conversion according to C++ 5.2.9p5 is valid.\nTryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (!RValueRef && !SrcExpr->isLValue()) {\n    msg = diag::err_bad_cxx_cast_rvalue;"},{w,1955,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (isa<LValueReferenceType>(DestTypeTmp) && !SrcExpr.get()->isLValue()) {\n      msg = diag::err_bad_cxx_cast_rvalue;"},{w,1963,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (isa<RValueReferenceType>(DestTypeTmp) && SrcExpr.get()->isPRValue()) {\n      if (!SrcType->isRecordType()) {\n        msg = diag::err_bad_cxx_cast_rvalue;"},{w,2272,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (!SrcExpr.get()->isGLValue()) {\n      msg = diag::err_bad_cxx_cast_rvalue;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,845,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointer) {\n  } else if (DestReference->isLValueReferenceType()) {\n    if (!SrcExpr.get()->isLValue()) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{x,1595,"/// Tests whether a conversion according to C++ 5.2.9p5 is valid.\nTryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (!RValueRef && !SrcExpr->isLValue()) {\n    msg = diag::err_bad_cxx_cast_rvalue;"},{x,1955,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (isa<LValueReferenceType>(DestTypeTmp) && !SrcExpr.get()->isLValue()) {\n      msg = diag::err_bad_cxx_cast_rvalue;"},{x,1963,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (isa<RValueReferenceType>(DestTypeTmp) && SrcExpr.get()->isPRValue()) {\n      if (!SrcType->isRecordType()) {\n        msg = diag::err_bad_cxx_cast_rvalue;"},{x,2272,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (!SrcExpr.get()->isGLValue()) {\n      msg = diag::err_bad_cxx_cast_rvalue;"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:41:9: error: dynamic_cast from rvalue to reference type \'A &\'"}
}
},
},
["err_bad_cxx_cast_scalar_to_vector_different_size"]={
["err_bad_cxx_cast_scalar_to_vector_different_size"]={
[f]="... from scalar A to vector B of different size",
[h]="... from scalar A to vector B of different size",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{||reinterpret_cast||C-style cast||}0 from scalar %1 to vector %2 of different size",
[i]=m,
[i]=m,
[j]="(?:||reinterpret_cast||C\\-style cast||) from scalar (.*?) to vector (.*?) of different size",
[b]="%select{||reinterpret_cast||C-style cast||}0 from scalar %1 to vector %2 of different size",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:||reinterpret_cast||C\\-style cast||) from scalar (.*?) to vector (.*?) of different size",
[d]={"570af5d42678",1253128783,"Improve handling of vector casts in C++."},
[e]=a,
[k]={{w,2419,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (srcIsVector || destIsVector) {\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    else if (!srcIsVector)\n      msg = diag::err_bad_cxx_cast_scalar_to_vector_different_size;"}}
[d]=p,
[c]={"570af5d42678",1253128783,"Improve handling of vector casts in C++."},
[k]={{x,2419,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (srcIsVector || destIsVector) {\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    else if (!srcIsVector)\n      msg = diag::err_bad_cxx_cast_scalar_to_vector_different_size;"}},
[o]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:42:9: error: reinterpret_cast from scalar \'unsigned char\' to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
}
},
},
["err_bad_cxx_cast_unrelated_class"]={
["err_bad_cxx_cast_unrelated_class"]={
[f]="... from A to B, which are not related by inheritance, is not allowed",
[h]="... from A to B, which are not related by inheritance, is not allowed",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2, which are not related by inheritance, is not allowed",
[i]=m,
[i]=m,
[j]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?), which are not related by inheritance, is not allowed",
[b]="%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2, which are not related by inheritance, is not allowed",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?), which are not related by inheritance, is not allowed",
[d]={"ffa7dc379f2e",1422480686,"PR 17456"},
[e]=a,
[k]={{w,1505,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // See if it looks like the user is trying to convert between\n  // related record types, and select a better diagnostic if so.\n  if (auto SrcPointer = SrcType->getAs<PointerType>())\n    if (auto DestPointer = DestType->getAs<PointerType>())\n      if (SrcPointer->getPointeeType()->getAs<RecordType>() && DestPointer->getPointeeType()->getAs<RecordType>())\n        msg = diag::err_bad_cxx_cast_unrelated_class;"}}
[d]=p,
[c]={"ffa7dc379f2e",1422480686,"PR 17456"},
[k]={{x,1505,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // See if it looks like the user is trying to convert between\n  // related record types, and select a better diagnostic if so.\n  if (auto SrcPointer = SrcType->getAs<PointerType>())\n    if (auto DestPointer = DestType->getAs<PointerType>())\n      if (SrcPointer->getPointeeType()->getAs<RecordType>() && DestPointer->getPointeeType()->getAs<RecordType>())\n        msg = diag::err_bad_cxx_cast_unrelated_class;"}},
[o]={
["clang/test/SemaCXX/address-space-conversion.cpp"]={"clang/test/SemaCXX/address-space-conversion.cpp:72:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:73:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:74:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:75:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:76:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:77:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed"}
}
},
},
["err_bad_cxx_cast_vector_to_scalar_different_size"]={
["err_bad_cxx_cast_vector_to_scalar_different_size"]={
[f]="... from vector A to scalar B of different size",
[h]="... from vector A to scalar B of different size",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{||reinterpret_cast||C-style cast||}0 from vector %1 to scalar %2 of different size",
[i]=m,
[i]=m,
[j]="(?:||reinterpret_cast||C\\-style cast||) from vector (.*?) to scalar (.*?) of different size",
[b]="%select{||reinterpret_cast||C-style cast||}0 from vector %1 to scalar %2 of different size",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:||reinterpret_cast||C\\-style cast||) from vector (.*?) to scalar (.*?) of different size",
[d]={"570af5d42678",1253128783,"Improve handling of vector casts in C++."},
[e]=a,
[k]={{w,2417,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (srcIsVector || destIsVector) {\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n      msg = diag::err_bad_cxx_cast_vector_to_scalar_different_size;"}}
[d]=p,
[c]={"570af5d42678",1253128783,"Improve handling of vector casts in C++."},
[k]={{x,2417,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (srcIsVector || destIsVector) {\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n      msg = diag::err_bad_cxx_cast_vector_to_scalar_different_size;"}},
[o]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:40:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size","clang/test/SemaCXX/vector-casts.cpp:41:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size"}
}
},
},
["err_bad_cxx_cast_vector_to_vector_different_size"]={
["err_bad_cxx_cast_vector_to_vector_different_size"]={
[f]="... from vector A to vector B of different size",
[h]="... from vector A to vector B of different size",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{||reinterpret_cast||C-style cast||}0 from vector %1 to vector %2 of different size",
[i]=m,
[i]=m,
[j]="(?:||reinterpret_cast||C\\-style cast||) from vector (.*?) to vector (.*?) of different size",
[b]="%select{||reinterpret_cast||C-style cast||}0 from vector %1 to vector %2 of different size",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:||reinterpret_cast||C\\-style cast||) from vector (.*?) to vector (.*?) of different size",
[d]={"570af5d42678",1253128783,"Improve handling of vector casts in C++."},
[e]=a,
[k]={{w,2421,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (srcIsVector || destIsVector) {\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    else if (!srcIsVector)\n    else\n      msg = diag::err_bad_cxx_cast_vector_to_vector_different_size;"}}
[d]=p,
[c]={"570af5d42678",1253128783,"Improve handling of vector casts in C++."},
[k]={{x,2421,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (srcIsVector || destIsVector) {\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    else if (!srcIsVector)\n    else\n      msg = diag::err_bad_cxx_cast_vector_to_vector_different_size;"}},
[o]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:44:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:45:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:46:9: error: reinterpret_cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:47:9: error: C-style cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:49:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:50:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:51:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:52:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:53:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:54:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:55:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:56:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
}
},
},
["err_bad_dynamic_cast_not_class"]={
["err_bad_dynamic_cast_not_class"]={
[f]="A is not a class type",
[h]="A is not a class type",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 is not a class type",
[i]=m,
[i]=m,
[j]="(.*?) is not a class type",
[b]="%0 is not a class type",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) is not a class type",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,822,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointee->isVoidType()) {\n  } else if (DestRecord) {\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << DestPointee.getUnqualifiedType() << DestRange;"},{w,867,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (SrcRecord) {\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,822,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointee->isVoidType()) {\n  } else if (DestRecord) {\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << DestPointee.getUnqualifiedType() << DestRange;"},{x,867,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (SrcRecord) {\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:29:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:31:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:33:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:35:9: error: \'int\' is not a class type"}
}
},
},
["err_bad_dynamic_cast_not_polymorphic"]={
["err_bad_dynamic_cast_not_polymorphic"]={
[f]="A is not polymorphic",
[h]="A is not polymorphic",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 is not polymorphic",
[i]=m,
[i]=m,
[j]="(.*?) is not polymorphic",
[b]="%0 is not polymorphic",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) is not polymorphic",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,913,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,913,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:74:9: error: \'A\' is not polymorphic","clang/test/SemaCXX/dynamic-cast.cpp:75:9: error: \'A\' is not polymorphic"}
}
},
},
["err_bad_dynamic_cast_not_ptr"]={
["err_bad_dynamic_cast_not_ptr"]={
[f]="cannot use dynamic_cast to convert from A to B",
[h]="cannot use dynamic_cast to convert from A to B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot use dynamic_cast to convert from %0 to %1",
[i]=m,
[i]=m,
[j]="cannot use dynamic_cast to convert from (.*?) to (.*?)",
[b]="cannot use dynamic_cast to convert from %0 to %1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot use dynamic_cast to convert from (.*?) to (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,838,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointer) {\n    if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    } else {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr) << OrigSrcType << this->DestType << SrcExpr.get()->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,838,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointer) {\n    if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    } else {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr) << OrigSrcType << this->DestType << SrcExpr.get()->getSourceRange();"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:27:9: error: cannot use dynamic_cast to convert from \'int\' to \'A *\'"}
}
},
},
["err_bad_dynamic_cast_not_ref_or_ptr"]={
["err_bad_dynamic_cast_not_ref_or_ptr"]={
[f]="invalid target type A for dynamic_cast; target type must be a reference or pointer type to a defined class",
[h]="invalid target type A for dynamic_cast; target type must be a reference or pointer type to a defined class",
[c]=l,
[j]=n,
[e]=n,
[g]="invalid target type %0 for dynamic_cast; target type must be a reference or pointer type to a defined class",
[i]=m,
[i]=m,
[j]="invalid target type (.*?) for dynamic_cast; target type must be a reference or pointer type to a defined class",
[b]="invalid target type %0 for dynamic_cast; target type must be a reference or pointer type to a defined class",
[b]=a,
[g]=l,
[h]=o,
[f]="invalid target type (.*?) for dynamic_cast; target type must be a reference or pointer type to a defined class",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,805,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointer) {\n  } else if ((DestReference = DestType->getAs<ReferenceType>())) {\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr) << this->DestType << DestRange;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,805,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  if (DestPointer) {\n  } else if ((DestReference = DestType->getAs<ReferenceType>())) {\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr) << this->DestType << DestRange;"}},
[o]={
[rb]={"clang/test/SemaCXX/dynamic-cast.cpp:25:9: error: invalid target type \'A\' for dynamic_cast; target type must be a reference or pointer type to a defined class"}
}
},
},
["err_bad_kernel_param_type"]={
["err_bad_kernel_param_type"]={
[f]="A cannot be used as the type of a kernel parameter",
[h]="A cannot be used as the type of a kernel parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 cannot be used as the type of a kernel parameter",
[i]=m,
[i]=m,
[j]="(.*?) cannot be used as the type of a kernel parameter",
[b]="%0 cannot be used as the type of a kernel parameter",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) cannot be used as the type of a kernel parameter",
[d]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[e]=a,
[k]={{q,9480,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"},{q,9582,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\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      } else {\n        S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"}}
[d]=p,
[c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[k]={{r,9480,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"},{r,9582,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\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      } else {\n        S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"}},
[o]={
["clang/test/SemaOpenCL/event_t.cl"]={"clang/test/SemaOpenCL/event_t.cl:11:25: error: \'__private event_t\' cannot be used as the type of a kernel parameter"}
}
},
},
["err_bad_lvalue_to_rvalue_cast"]={
["err_bad_lvalue_to_rvalue_cast"]={
[f]="cannot cast from lvalue of type A to rvalue reference type B; types are not compatible",
[h]="cannot cast from lvalue of type A to rvalue reference type B; types are not compatible",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot cast from lvalue of type %1 to rvalue reference type %2; types are not compatible",
[i]=m,
[i]=m,
[j]="cannot cast from lvalue of type (.*?) to rvalue reference type (.*?); types are not compatible",
[b]="cannot cast from lvalue of type %1 to rvalue reference type %2; types are not compatible",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot cast from lvalue of type (.*?) to rvalue reference type (.*?); types are not compatible",
[d]={"e97585f7177e",1237761006,"Implement static_cast from lvalue to rvalue reference."},
[e]=a,
[k]={{w,1553,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  if (RefResult != Sema::Ref_Compatible) {\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}}
[d]=p,
[c]={"e97585f7177e",1237761006,"Implement static_cast from lvalue to rvalue reference."},
[k]={{x,1553,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  if (RefResult != Sema::Ref_Compatible) {\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
[o]={
["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:32:13: error: cannot cast from lvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
}
},
},
["err_bad_memptr_lhs"]={
["err_bad_memptr_lhs"]={
[f]="left hand operand to A must be a ...class compatible with the right hand operand, but is B",
[h]="left hand operand to A must be a ...class compatible with the right hand operand, but is B",
[c]=l,
[j]=n,
[e]=n,
[g]="left hand operand to %0 must be a %select{|pointer to }1class compatible with the right hand operand, but is %2",
[i]=m,
[i]=m,
[j]="left hand operand to (.*?) must be a (?:|pointer to )class compatible with the right hand operand, but is (.*?)",
[b]="left hand operand to %0 must be a %select{|pointer to }1class compatible with the right hand operand, but is %2",
[b]=a,
[g]=l,
[h]=o,
[f]="left hand operand to (.*?) must be a (?:|pointer to )class compatible with the right hand operand, but is (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{x,6022,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (isIndirect) {\n    if (const PointerType *Ptr = LHSType->getAs<PointerType>())\n    else {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << 1 << LHSType << FixItHint::CreateReplacement(SourceRange(Loc), \".*\");"},{x,6031,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    if (RequireCompleteType(Loc, LHSType, diag::err_bad_memptr_lhs, OpSpelling, (int)isIndirect)) {"},{x,6037,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    if (!IsDerivedFrom(Loc, LHSType, Class)) {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << (int)isIndirect << LHS.get()->getType();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{y,6022,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (isIndirect) {\n    if (const PointerType *Ptr = LHSType->getAs<PointerType>())\n    else {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << 1 << LHSType << FixItHint::CreateReplacement(SourceRange(Loc), \".*\");"},{y,6031,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    if (RequireCompleteType(Loc, LHSType, diag::err_bad_memptr_lhs, OpSpelling, (int)isIndirect)) {"},{y,6037,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    if (!IsDerivedFrom(Loc, LHSType, Class)) {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << (int)isIndirect << LHS.get()->getType();"}},
[o]={
["clang/test/SemaCXX/member-pointer.cpp"]={"clang/test/SemaCXX/member-pointer.cpp:116:12: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'HasMembers\'","clang/test/SemaCXX/member-pointer.cpp:117:13: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'HasMembers *\'","clang/test/SemaCXX/member-pointer.cpp:118:11: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'int\'","clang/test/SemaCXX/member-pointer.cpp:120:13: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'int *\'","clang/test/SemaCXX/member-pointer.cpp:170:18: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'X\'"}
}
},
},
["err_bad_memptr_rhs"]={
["err_bad_memptr_rhs"]={
[f]="right hand operand to A has non-pointer-to-member type B",
[h]="right hand operand to A has non-pointer-to-member type B",
[c]=l,
[j]=n,
[e]=n,
[g]="right hand operand to %0 has non-pointer-to-member type %1",
[i]=m,
[i]=m,
[j]="right hand operand to (.*?) has non\\-pointer\\-to\\-member type (.*?)",
[b]="right hand operand to %0 has non-pointer-to-member type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="right hand operand to (.*?) has non\\-pointer\\-to\\-member type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{x,6000,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (!MemPtr) {\n    Diag(Loc, diag::err_bad_memptr_rhs) << OpSpelling << RHSType << RHS.get()->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{y,6000,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  if (!MemPtr) {\n    Diag(Loc, diag::err_bad_memptr_rhs) << OpSpelling << RHSType << RHS.get()->getSourceRange();"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:20:4: error: right hand operand to .* has non-pointer-to-member type \'int *\'"}
}
},
},
["err_bad_multiversion_option"]={
["err_bad_multiversion_option"]={
[f]="function multiversioning doesn\'t support ... \'A\'",
[h]="function multiversioning doesn\'t support ... \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="function multiversioning doesn\'t support %select{feature|architecture}0 \'%1\'",
[i]=m,
[i]=m,
[j]="function multiversioning doesn\'t support (?:feature|architecture) \'(.*?)\'",
[b]="function multiversioning doesn\'t support %select{feature|architecture}0 \'%1\'",
[b]=a,
[g]=l,
[h]=a,
[f]="function multiversioning doesn\'t support (?:feature|architecture) \'(.*?)\'",
[d]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"},
[e]=a,
[k]={{q,10957,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TA) {\n    if (!ParseInfo.CPU.empty() && !TargetInfo.validateCpuIs(ParseInfo.CPU)) {\n      S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Architecture << ParseInfo.CPU;"},{q,10964,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TA) {\n    for (const auto &Feat : ParseInfo.Features) {\n      if (Feat[0] == \'-\') {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << (\"no-\" + BareFeat).str();"},{q,10971,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TA) {\n    for (const auto &Feat : ParseInfo.Features) {\n      if (!TargetInfo.validateCpuSupports(BareFeat) || !TargetInfo.isValidFeatureName(BareFeat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << BareFeat;"},{q,10983,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TVA) {\n    for (const auto &Feat : Feats) {\n      if (!TargetInfo.validateCpuSupports(Feat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << Feat;"}}
[d]=a,
[c]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"},
[k]={{r,10957,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TA) {\n    if (!ParseInfo.CPU.empty() && !TargetInfo.validateCpuIs(ParseInfo.CPU)) {\n      S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Architecture << ParseInfo.CPU;"},{r,10964,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TA) {\n    for (const auto &Feat : ParseInfo.Features) {\n      if (Feat[0] == \'-\') {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << (\"no-\" + BareFeat).str();"},{r,10971,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TA) {\n    for (const auto &Feat : ParseInfo.Features) {\n      if (!TargetInfo.validateCpuSupports(BareFeat) || !TargetInfo.isValidFeatureName(BareFeat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << BareFeat;"},{r,10983,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  if (TVA) {\n    for (const auto &Feat : Feats) {\n      if (!TargetInfo.validateCpuSupports(Feat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << Feat;"}},
[o]={
["clang/test/SemaCXX/attr-target-mv.cpp"]={"clang/test/SemaCXX/attr-target-mv.cpp:7:43: error: function multiversioning doesn\'t support feature \'no-sse4.2\'"}
}
},
},
["err_bad_new_type"]={
["err_bad_new_type"]={
[f]="cannot allocate ... type A with new",
[h]="cannot allocate ... type A with new",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot allocate %select{function|reference}1 type %0 with new",
[i]=m,
[i]=m,
[j]="cannot allocate (?:function|reference) type (.*?) with new",
[b]="cannot allocate %select{function|reference}1 type %0 with new",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot allocate (?:function|reference) type (.*?) with new",
[d]={u,1237025389,t},
[e]=a,
[k]={{x,2458,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 0 << R;"},{x,2461,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  else if (AllocType->isReferenceType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 1 << R;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{y,2458,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 0 << R;"},{y,2461,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  else if (AllocType->isReferenceType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 1 << R;"}},
[o]={
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:140:13: error: cannot allocate reference type \'int &\' with new"}
}
},
},
["err_bad_parameter_name"]={
["err_bad_parameter_name"]={
[f]="A cannot be the name of a parameter",
[h]="A cannot be the name of a parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 cannot be the name of a parameter",
[i]=m,
[i]=m,
[j]="(.*?) cannot be the name of a parameter",
[b]="%0 cannot be the name of a parameter",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) cannot be the name of a parameter",
[d]={"a56cbccfc413",1288746426,"Provide an error when a non-identifier name (such as an operator) is used as a"},
[e]=a,
[k]={{q,14711,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  case UnqualifiedIdKind::IK_DeductionGuideName:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) << GetNameForDeclarator(D).getName();"}}
[d]=p,
[c]={"a56cbccfc413",1288746426,"Provide an error when a non-identifier name (such as an operator) is used as a"},
[k]={{r,14711,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  case UnqualifiedIdKind::IK_DeductionGuideName:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) << GetNameForDeclarator(D).getName();"}},
[o]={
["clang/test/SemaCXX/PR8012.cpp"]={"clang/test/SemaCXX/PR8012.cpp:3:14: error: \'operator+\' cannot be the name of a parameter"}
}
},
},
["err_bad_parameter_name_template_id"]={
["err_bad_parameter_name_template_id"]={
[h]="parameter name cannot have template arguments",
[j]=n,
[i]=m,
[b]="parameter name cannot have template arguments",
[g]=l,
[f]="parameter name cannot have template arguments",
[f]="parameter name cannot have template arguments",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="parameter name cannot have template arguments",
[c]={"da70fc0c5f5b",1560542514,"PR42071: Reject weird names for non-type template parameters."},
[i]=m,
[k]={{r,14718,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name_template_id);"}},
[j]="parameter name cannot have template arguments",
[o]={
[b]=a,
["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:261:16: error: parameter name cannot have template arguments"}
[h]=o,
}
[d]={"da70fc0c5f5b",1560542514,"PR42071: Reject weird names for non-type template parameters."},
[k]={{q,14718,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name_template_id);"}}
},
},
["err_bad_property_context"]={
["err_bad_property_context"]={
[h]="property implementation must be in a class or category implementation",
[j]=n,
[i]=m,
[b]="property implementation must be in a class or category implementation",
[g]=l,
[f]="property implementation must be in a class or category implementation",
[f]="property implementation must be in a class or category implementation",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="property implementation must be in a class or category implementation",
[c]={zb,1480718311,vb},
[i]=m,
[k]={{R,1199,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n  } else {\n    Diag(AtLoc, diag::err_bad_property_context);"}}
[j]="property implementation must be in a class or category implementation",
[b]=a,
[h]=o,
[d]={ub,1480718311,yb},
[k]={{P,1199,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n  } else {\n    Diag(AtLoc, diag::err_bad_property_context);"}}
},
},
["err_bad_property_decl"]={
["err_bad_property_decl"]={
[f]="property implementation must have its declaration in interface A or one of its extensions",
[h]="property implementation must have its declaration in interface A or one of its extensions",
[c]=l,
[j]=n,
[e]=n,
[g]="property implementation must have its declaration in interface %0 or one of its extensions",
[i]=m,
[i]=m,
[j]="property implementation must have its declaration in interface (.*?) or one of its extensions",
[b]="property implementation must have its declaration in interface %0 or one of its extensions",
[b]=a,
[g]=l,
[h]=o,
[f]="property implementation must have its declaration in interface (.*?) or one of its extensions",
[d]={ub,1480718311,yb},
[e]=a,
[k]={{P,1114,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (!property) {\n      Diag(PropertyLoc, diag::err_bad_property_decl) << IDecl->getDeclName();"}}
[d]=p,
[c]={zb,1480718311,vb},
[k]={{R,1114,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (!property) {\n      Diag(PropertyLoc, diag::err_bad_property_decl) << IDecl->getDeclName();"}},
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:19:13: error: property implementation must have its declaration in interface \'I\' or one of its extensions","clang/test/SemaObjC/property.m:31:10: error: property implementation must have its declaration in interface \'E\' or one of its extensions"}
}
},
},
["err_bad_receiver_type"]={
["err_bad_receiver_type"]={
[f]="bad receiver type A",
[h]="bad receiver type A",
[c]=l,
[j]=n,
[e]=n,
[g]="bad receiver type %0",
[i]=m,
[i]=m,
[j]="bad receiver type (.*?)",
[b]="bad receiver type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="bad receiver type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{G,3130,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n      } else {\n        Diag(Loc, diag::err_bad_receiver_type) << ReceiverType << RecRange;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{F,3130,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n      } else {\n        Diag(Loc, diag::err_bad_receiver_type) << ReceiverType << RecRange;"}},
[o]={
["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:46:10: error: bad receiver type \'CFStringRef\' (aka \'const struct __CFString *\')"}
}
},
},
["err_bad_reinterpret_cast_overload"]={
["err_bad_reinterpret_cast_overload"]={
[f]="reinterpret_cast cannot resolve overloaded function A to type B",
[h]="reinterpret_cast cannot resolve overloaded function A to type B",
[c]=l,
[j]=n,
[e]=n,
[g]="reinterpret_cast cannot resolve overloaded function %0 to type %1",
[i]=m,
[i]=m,
[j]="reinterpret_cast cannot resolve overloaded function (.*?) to type (.*?)",
[b]="reinterpret_cast cannot resolve overloaded function %0 to type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="reinterpret_cast cannot resolve overloaded function (.*?) to type (.*?)",
[d]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by"},
[e]=a,
[k]={{w,1202,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload) << OverloadExpr::find(SrcExpr.get()).Expression->getName() << DestType << OpRange;"}}
[d]=p,
[c]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by"},
[k]={{x,1202,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload) << OverloadExpr::find(SrcExpr.get()).Expression->getName() << DestType << OpRange;"}},
[o]={
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:31:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:32:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:37:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:38:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:53:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:54:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (*)(char)\'"}
}
},
},
["err_bad_reinterpret_cast_reference"]={
["err_bad_reinterpret_cast_reference"]={
[f]="reinterpret_cast of a A to B needs its address, which is not allowed",
[h]="reinterpret_cast of a A to B needs its address, which is not allowed",
[c]=l,
[j]=n,
[e]=n,
[g]="reinterpret_cast of a %0 to %1 needs its address, which is not allowed",
[i]=m,
[i]=m,
[j]="reinterpret_cast of a (.*?) to (.*?) needs its address, which is not allowed",
[b]="reinterpret_cast of a %0 to %1 needs its address, which is not allowed",
[b]=a,
[g]=l,
[h]=o,
[f]="reinterpret_cast of a (.*?) to (.*?) needs its address, which is not allowed",
[d]={"bf04231a7254",1303516677,"Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to ..."},
[e]=a,
[k]={{w,2302,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (inappropriate) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference) << inappropriate << DestType << OpRange << SrcExpr.get()->getSourceRange();"}}
[d]=p,
[c]={"bf04231a7254",1303516677,"Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to ..."},
[k]={{x,2302,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (inappropriate) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference) << inappropriate << DestType << OpRange << SrcExpr.get()->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:144:28: error: reinterpret_cast of a vector element to \'float &\' needs its address, which is not allowed"}
}
},
},
["err_bad_reinterpret_cast_small_int"]={
["err_bad_reinterpret_cast_small_int"]={
[f]="cast from pointer to smaller type A loses information",
[h]="cast from pointer to smaller type A loses information",
[c]=l,
[j]=n,
[e]=n,
[g]="cast from pointer to smaller type %2 loses information",
[i]=m,
[i]=m,
[j]="cast from pointer to smaller type (.*?) loses information",
[b]="cast from pointer to smaller type %2 loses information",
[b]=a,
[g]=l,
[h]=o,
[f]="cast from pointer to smaller type (.*?) loses information",
[d]={u,1237025389,t},
[e]=a,
[k]={{w,2367,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // See below for the enumeral issue.\n  if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {\n    // C++0x 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it. A value of std::nullptr_t can be\n    //  converted to an integral type; the conversion has the same meaning\n    //  and validity as a conversion of (void*)0 to the integral type.\n    if (Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) {\n      msg = diag::err_bad_reinterpret_cast_small_int;"},{w,2471,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (DestType->isIntegralType(Self.Context)) {\n    // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it; except in Microsoft mode, where the\n    //  integral type size doesn\'t matter (except we don\'t allow bool).\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n      if (MicrosoftException) {\n      } else {\n        msg = diag::err_bad_reinterpret_cast_small_int;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{x,2367,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // See below for the enumeral issue.\n  if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {\n    // C++0x 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it. A value of std::nullptr_t can be\n    //  converted to an integral type; the conversion has the same meaning\n    //  and validity as a conversion of (void*)0 to the integral type.\n    if (Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) {\n      msg = diag::err_bad_reinterpret_cast_small_int;"},{x,2471,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (DestType->isIntegralType(Self.Context)) {\n    // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it; except in Microsoft mode, where the\n    //  integral type size doesn\'t matter (except we don\'t allow bool).\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n      if (MicrosoftException) {\n      } else {\n        msg = diag::err_bad_reinterpret_cast_small_int;"}},
[o]={
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:68:9: error: cast from pointer to smaller type \'char\' loses information"}
}
},
},
["err_bad_rvalue_to_rvalue_cast"]={
["err_bad_rvalue_to_rvalue_cast"]={
[f]="cannot cast from rvalue of type A to rvalue reference type B; types are not compatible",
[h]="cannot cast from rvalue of type A to rvalue reference type B; types are not compatible",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot cast from rvalue of type %1 to rvalue reference type %2; types are not compatible",
[i]=m,
[i]=m,
[j]="cannot cast from rvalue of type (.*?) to rvalue reference type (.*?); types are not compatible",
[b]="cannot cast from rvalue of type %1 to rvalue reference type %2; types are not compatible",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot cast from rvalue of type (.*?) to rvalue reference type (.*?); types are not compatible",
[d]={"e4e9e281a1fb",1478139197,"[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types."},
[e]=a,
[k]={{w,1554,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  if (RefResult != Sema::Ref_Compatible) {\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}}
[d]=p,
[c]={"e4e9e281a1fb",1478139197,"[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types."},
[k]={{x,1554,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  if (RefResult != Sema::Ref_Compatible) {\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
[o]={
["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:33:14: error: cannot cast from rvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
}
},
},
["err_bad_static_cast_member_pointer_nonmp"]={
["err_bad_static_cast_member_pointer_nonmp"]={
[f]="cannot cast from type A to member pointer type B",
[h]="cannot cast from type A to member pointer type B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot cast from type %1 to member pointer type %2",
[i]=m,
[i]=m,
[j]="cannot cast from type (.*?) to member pointer type (.*?)",
[b]="cannot cast from type %1 to member pointer type %2",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot cast from type (.*?) to member pointer type (.*?)",
[d]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve..."},
[e]=a,
[k]={{w,1783,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///  An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///  converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///  where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (!SrcMemPtr) {\n    msg = diag::err_bad_static_cast_member_pointer_nonmp;"}}
[d]=p,
[c]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve..."},
[k]={{x,1783,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///  An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///  converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///  where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (!SrcMemPtr) {\n    msg = diag::err_bad_static_cast_member_pointer_nonmp;"}},
[o]={
["clang/test/SemaTemplate/member-access-ambig.cpp"]={"clang/test/SemaTemplate/member-access-ambig.cpp:51:7: error: cannot cast from type \'int *\' to member pointer type \'P\' (aka \'int (AddrOfMember::A::*)\')"}
}
},
},
["err_bad_static_cast_overload"]={
["err_bad_static_cast_overload"]={
[f]="address of overloaded function A cannot be static_cast to type B",
[h]="address of overloaded function A cannot be static_cast to type B",
[c]=l,
[j]=n,
[e]=n,
[g]="address of overloaded function %0 cannot be static_cast to type %1",
[i]=m,
[i]=m,
[j]="address of overloaded function (.*?) cannot be static_cast to type (.*?)",
[b]="address of overloaded function %0 cannot be static_cast to type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="address of overloaded function (.*?) cannot be static_cast to type (.*?)",
[d]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by"},
[e]=a,
[k]={{w,1249,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  if (DestType->isVoidType()) {\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,\n                                                            OpRange, DestType, diag::err_bad_static_cast_overload);"},{w,1274,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload) << oe->getName() << DestType << OpRange << oe->getQualifierLoc().getSourceRange();"}}
[d]=p,
[c]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by"},
[k]={{x,1249,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  if (DestType->isVoidType()) {\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,\n                                                            OpRange, DestType, diag::err_bad_static_cast_overload);"},{x,1274,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload) << oe->getName() << DestType << OpRange << oe->getQualifierLoc().getSourceRange();"}},
[o]={
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:25:14: error: address of overloaded function \'f\' cannot be static_cast to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:57:14: error: address of overloaded function \'t\' cannot be static_cast to type \'int (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:67:16: error: address of overloaded function \'f\' cannot be static_cast to type \'FnType\' (aka \'void (int)\')"}
}
},
},
["err_bad_static_cast_pointer_nonpointer"]={
["err_bad_static_cast_pointer_nonpointer"]={
[f]="cannot cast from type A to pointer type B",
[h]="cannot cast from type A to pointer type B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot cast from type %1 to pointer type %2",
[i]=m,
[i]=m,
[j]="cannot cast from type (.*?) to pointer type (.*?)",
[b]="cannot cast from type %1 to pointer type %2",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot cast from type (.*?) to pointer type (.*?)",
[d]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve..."},
[e]=a,
[k]={{w,1632,"/// Tests whether a conversion according to C++ 5.2.9p8 is valid.\nTryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (!SrcPointer) {\n    msg = diag::err_bad_static_cast_pointer_nonpointer;"}}
[d]=p,
[c]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve..."},
[k]={{x,1632,"/// Tests whether a conversion according to C++ 5.2.9p8 is valid.\nTryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (!SrcPointer) {\n    msg = diag::err_bad_static_cast_pointer_nonpointer;"}},
[o]={
["clang/test/SemaCXX/ptrtomember.cpp"]={"clang/test/SemaCXX/ptrtomember.cpp:31:11: error: cannot cast from type \'void\' to pointer type \'void *\'"}
}
},
},
["err_bad_string_encoding"]={
["err_bad_string_encoding"]={
[h]="illegal character encoding in string literal",
[j]=n,
[i]=m,
[b]="illegal character encoding in string literal",
[g]=l,
[f]="illegal character encoding in string literal",
[f]="illegal character encoding in string literal",
[c]=l,
[e]=a,
[e]=n,
[d]=ib,
[g]="illegal character encoding in string literal",
[c]={"703e7153af87",1320113690,"Perform proper conversion for strings encoded in the source file as UTF-8.  (For now, we are assumin..."},
[i]=m,
[k]={{"clang/lib/Lex/LiteralSupport.cpp",2265,"/// This function copies from Fragment, which is a sequence of bytes\n/// within Tok\'s contents (which begin at TokBegin) into ResultPtr.\n/// Performs widening for multi-byte characters.\nbool StringLiteralParser::CopyStringFragment(const Token &Tok, const char *TokBegin, StringRef Fragment) {\n  if (Diags) {\n    const DiagnosticBuilder &Builder = Diag(Diags, Features, SourceLoc, TokBegin, ErrorPtr, resyncUTF8(ErrorPtr, Fragment.end()), NoErrorOnBadEncoding ? diag::warn_bad_string_encoding : diag::err_bad_string_encoding);"}},
[j]="illegal character encoding in string literal",
[o]={
[b]=a,
["clang/test/Lexer/string-literal-encoding.c"]={"clang/test/Lexer/string-literal-encoding.c:8:26: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:10:27: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:11:27: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:12:28: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:13:29: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:14:29: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:17:24: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:22:30: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:24:31: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:25:31: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:26:32: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:27:33: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:28:33: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:31:28: error: illegal character encoding in string literal"}
[h]=gb,
}
[d]={"703e7153af87",1320113690,"Perform proper conversion for strings encoded in the source file as UTF-8.  (For now, we are assumin..."},
[k]={{"clang/lib/Lex/LiteralSupport.cpp",2265,"/// This function copies from Fragment, which is a sequence of bytes\n/// within Tok\'s contents (which begin at TokBegin) into ResultPtr.\n/// Performs widening for multi-byte characters.\nbool StringLiteralParser::CopyStringFragment(const Token &Tok, const char *TokBegin, StringRef Fragment) {\n  if (Diags) {\n    const DiagnosticBuilder &Builder = Diag(Diags, Features, SourceLoc, TokBegin, ErrorPtr, resyncUTF8(ErrorPtr, Fragment.end()), NoErrorOnBadEncoding ? diag::warn_bad_string_encoding : diag::err_bad_string_encoding);"}}
},
},
["err_bad_variable_name"]={
["err_bad_variable_name"]={
[f]="A cannot be the name of a variable or data member",
[h]="A cannot be the name of a variable or data member",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 cannot be the name of a variable or data member",
[i]=m,
[i]=m,
[j]="(.*?) cannot be the name of a variable or data member",
[b]="%0 cannot be the name of a variable or data member",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) cannot be the name of a variable or data member",
[d]={A,1236199783,z},
[e]=a,
[k]={{q,7462,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (D.isDecompositionDeclarator()) {\n  } else if (!II) {\n    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) << Name;"},{v,3545,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Data members must have identifiers for names.\n    if (!Name.isIdentifier()) {\n      Diag(Loc, diag::err_bad_variable_name) << Name;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{r,7462,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (D.isDecompositionDeclarator()) {\n  } else if (!II) {\n    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) << Name;"},{w,3545,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Data members must have identifiers for names.\n    if (!Name.isIdentifier()) {\n      Diag(Loc, diag::err_bad_variable_name) << Name;"}},
[o]={
["clang/test/SemaCXX/overloaded-operator-decl.cpp"]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:39:5: error: \'operator+\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:48:3: error: \'operator int\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:49:7: error: \'operator+\' cannot be the name of a variable or data member"}
}
},
},
["err_base_class_has_flexible_array_member"]={
["err_base_class_has_flexible_array_member"]={
[f]="base class A has a flexible array member",
[h]="base class A has a flexible array member",
[c]=l,
[j]=n,
[e]=n,
[g]="base class %0 has a flexible array member",
[i]=m,
[i]=m,
[j]="base class (.*?) has a flexible array member",
[b]="base class %0 has a flexible array member",
[b]=a,
[g]=l,
[h]=o,
[f]="base class (.*?) has a flexible array member",
[d]={"9b1754d05840",1383393636,"Sema: Disallow inheriting from classes with flexible array members"},
[e]=a,
[k]={{v,2771,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // A class which contains a flexible array member is not suitable for use as a\n  // base class:\n  //  - If the layout determines that a base comes before another base,\n  //    the flexible array member would index into the subsequent base.\n  //  - If the layout determines that base comes before the derived class,\n  //    the flexible array member would index into the derived class.\n  if (CXXBaseDecl->hasFlexibleArrayMember()) {\n    Diag(BaseLoc, diag::err_base_class_has_flexible_array_member) << CXXBaseDecl->getDeclName();"}}
[d]=p,
[c]={"9b1754d05840",1383393636,"Sema: Disallow inheriting from classes with flexible array members"},
[k]={{w,2771,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // A class which contains a flexible array member is not suitable for use as a\n  // base class:\n  //  - If the layout determines that a base comes before another base,\n  //    the flexible array member would index into the subsequent base.\n  //  - If the layout determines that base comes before the derived class,\n  //    the flexible array member would index into the derived class.\n  if (CXXBaseDecl->hasFlexibleArrayMember()) {\n    Diag(BaseLoc, diag::err_base_class_has_flexible_array_member) << CXXBaseDecl->getDeclName();"}},
[o]={
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:35:12: error: base class \'J\' has a flexible array member"}
}
},
},
["err_base_clause_on_union"]={
["err_base_clause_on_union"]={
[h]="unions cannot have base classes",
[j]=n,
[i]=m,
[b]="unions cannot have base classes",
[g]=l,
[f]="unions cannot have base classes",
[f]="unions cannot have base classes",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="unions cannot have base classes",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,2663,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // C++ [class.union]p1:\n  //  A union shall not have base classes.\n  if (Class->isUnion()) {\n    Diag(Class->getLocation(), diag::err_base_clause_on_union) << SpecifierRange;"}},
[j]="unions cannot have base classes",
[o]={
[b]=a,
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:21:7: error: unions cannot have base classes"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,2663,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // C++ [class.union]p1:\n  //  A union shall not have base classes.\n  if (Class->isUnion()) {\n    Diag(Class->getLocation(), diag::err_base_clause_on_union) << SpecifierRange;"}}
},
},
["err_base_init_direct_and_virtual"]={
["err_base_init_direct_and_virtual"]={
[f]="base class initializer A names both a direct base class and an inherited virtual base class",
[h]="base class initializer A names both a direct base class and an inherited virtual base class",
[c]=l,
[j]=n,
[e]=n,
[g]="base class initializer %0 names both a direct base class and an inherited virtual base class",
[i]=m,
[i]=m,
[j]="base class initializer (.*?) names both a direct base class and an inherited virtual base class",
[b]="base class initializer %0 names both a direct base class and an inherited virtual base class",
[b]=a,
[g]=l,
[h]=o,
[f]="base class initializer (.*?) names both a direct base class and an inherited virtual base class",
[d]={u,1237025389,t},
[e]=a,
[k]={{v,4763,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // C++ [base.class.init]p2:\n  //  If a mem-initializer-id is ambiguous because it designates both\n  //  a direct non-virtual base class and an inherited virtual base\n  //  class, the mem-initializer is ill-formed.\n  if (DirectBaseSpec && VirtualBaseSpec)\n    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual) << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{w,4763,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // C++ [base.class.init]p2:\n  //  If a mem-initializer-id is ambiguous because it designates both\n  //  a direct non-virtual base class and an inherited virtual base\n  //  class, the mem-initializer is ill-formed.\n  if (DirectBaseSpec && VirtualBaseSpec)\n    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual) << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();"}},
[o]={
["clang/test/SemaCXX/constructor-initializer.cpp"]={"clang/test/SemaCXX/constructor-initializer.cpp:34:9: error: base class initializer \'B\' names both a direct base class and an inherited virtual base class"}
}
},
},
["err_base_init_does_not_name_class"]={
["err_base_init_does_not_name_class"]={
[f]="constructor initializer A does not name a class",
[h]="constructor initializer A does not name a class",
[c]=l,
[j]=n,
[e]=n,
[g]="constructor initializer %0 does not name a class",
[i]=m,
[i]=m,
[j]="constructor initializer (.*?) does not name a class",
[b]="constructor initializer %0 does not name a class",
[b]=a,
[g]=l,
[h]=o,
[f]="constructor initializer (.*?) does not name a class",
[d]={u,1237025389,t},
[e]=a,
[k]={{v,4685,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  if (!BaseType->isDependentType() && !BaseType->isRecordType())\n    return Diag(BaseLoc, diag::err_base_init_does_not_name_class) << BaseType << BaseTInfo->getTypeLoc().getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{w,4685,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  if (!BaseType->isDependentType() && !BaseType->isRecordType())\n    return Diag(BaseLoc, diag::err_base_init_does_not_name_class) << BaseType << BaseTInfo->getTypeLoc().getSourceRange();"}},
[o]={
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:87:14: error: constructor initializer \'decltype(int())\' (aka \'int\') does not name a class"}
}
},
},
["err_base_must_be_class"]={
["err_base_must_be_class"]={
[h]="base specifier must name a class",
[j]=n,
[i]=m,
[b]="base specifier must name a class",
[g]=l,
[f]="base specifier must name a class",
[f]="base specifier must name a class",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="base specifier must name a class",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,2711,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // Base specifiers must be record types.\n  if (!BaseType->isRecordType()) {\n    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;"}},
[j]="base specifier must name a class",
[o]={
[b]=a,
["clang/test/CXX/class.derived/p1.cpp"]={"clang/test/CXX/class.derived/p1.cpp:27:21: error: base specifier must name a class"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,2711,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // Base specifiers must be record types.\n  if (!BaseType->isRecordType()) {\n    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;"}}
},
},
["err_base_specifier_attribute"]={
["err_base_specifier_attribute"]={
[f]="A... cannot be applied to a base specifier",
[h]="A... cannot be applied to a base specifier",
[c]=l,
[j]=n,
[e]=n,
[g]="%0%select{ attribute|}1 cannot be applied to a base specifier",
[i]=m,
[i]=m,
[j]="(.*?)(?: attribute|) cannot be applied to a base specifier",
[b]="%0%select{ attribute|}1 cannot be applied to a base specifier",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?)(?: attribute|) cannot be applied to a base specifier",
[d]={"4c96e99235b3",1361317635,"PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such"},
[e]=a,
[k]={{v,2827,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n///    class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n  // We do not support any C++11 attributes on base-specifiers yet.\n  // Diagnose any attributes we see.\n  for (const ParsedAttr &AL : Attributes) {\n    if (AL.getKind() == ParsedAttr::UnknownAttribute)\n    else\n      Diag(AL.getLoc(), diag::err_base_specifier_attribute) << AL << AL.isRegularKeywordAttribute() << AL.getRange();"}}
[d]=p,
[c]={"4c96e99235b3",1361317635,"PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such"},
[k]={{w,2827,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n///    class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n  // We do not support any C++11 attributes on base-specifiers yet.\n  // Diagnose any attributes we see.\n  for (const ParsedAttr &AL : Attributes) {\n    if (AL.getKind() == ParsedAttr::UnknownAttribute)\n    else\n      Diag(AL.getLoc(), diag::err_base_specifier_attribute) << AL << AL.isRegularKeywordAttribute() << AL.getRange();"}},
[o]={
["clang/test/Parser/cxx11-base-spec-attributes.cpp"]={"clang/test/Parser/cxx11-base-spec-attributes.cpp:9:14: error: \'noreturn\' attribute cannot be applied to a base specifier"}
}
},
},
["err_binding_cannot_appear_in_own_initializer"]={
["err_binding_cannot_appear_in_own_initializer"]={
[f]="binding A cannot appear in the initializer of its own decomposition declaration",
[h]="binding A cannot appear in the initializer of its own decomposition declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="binding %0 cannot appear in the initializer of its own decomposition declaration",
[i]=m,
[i]=m,
[j]="binding (.*?) cannot appear in the initializer of its own decomposition declaration",
[b]="binding %0 cannot appear in the initializer of its own decomposition declaration",
[b]=a,
[g]=l,
[h]=o,
[f]="binding (.*?) cannot appear in the initializer of its own decomposition declaration",
[d]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"},
[e]=a,
[k]={{y,257,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n      Diag(Loc, diag::err_binding_cannot_appear_in_own_initializer) << D->getDeclName();"}}
[d]=p,
[c]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"},
[k]={{z,257,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n      Diag(Loc, diag::err_binding_cannot_appear_in_own_initializer) << D->getDeclName();"}},
[o]={
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:5:14: error: binding \'a\' cannot appear in the initializer of its own decomposition declaration"}
}
},
},
["err_bit_cast_non_trivially_copyable"]={
["err_bit_cast_non_trivially_copyable"]={
[f]="__builtin_bit_cast ... type must be trivially copyable",
[h]="__builtin_bit_cast ... type must be trivially copyable",
[c]=l,
[j]=n,
[e]=n,
[g]="__builtin_bit_cast %select{source|destination}0 type must be trivially copyable",
[i]=m,
[i]=m,
[j]="__builtin_bit_cast (?:source|destination) type must be trivially copyable",
[b]="__builtin_bit_cast %select{source|destination}0 type must be trivially copyable",
[b]=a,
[g]=l,
[h]=a,
[f]="__builtin_bit_cast (?:source|destination) type must be trivially copyable",
[d]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast"},
[e]=a,
[k]={{w,3278,"void CastOperation::CheckBuiltinBitCast() {\n  if (!DestType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 1;"},{w,3285,"void CastOperation::CheckBuiltinBitCast() {\n  if (!SrcType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 0;"}}
[d]=a,
[c]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast"},
[k]={{x,3278,"void CastOperation::CheckBuiltinBitCast() {\n  if (!DestType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 1;"},{x,3285,"void CastOperation::CheckBuiltinBitCast() {\n  if (!SrcType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 0;"}},
[o]={
["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:36:30: error: __builtin_bit_cast source type must be trivially copyable","clang/test/SemaCXX/builtin-bit-cast.cpp:39:21: error: __builtin_bit_cast destination type must be trivially copyable"}
}
},
},
["err_bit_cast_type_size_mismatch"]={
["err_bit_cast_type_size_mismatch"]={
[f]="__builtin_bit_cast source size does not equal destination size (A vs B)",
[h]="__builtin_bit_cast source size does not equal destination size (A vs B)",
[c]=l,
[j]=n,
[e]=n,
[g]="__builtin_bit_cast source size does not equal destination size (%0 vs %1)",
[i]=m,
[i]=m,
[j]="__builtin_bit_cast source size does not equal destination size \\((.*?) vs (.*?)\\)",
[b]="__builtin_bit_cast source size does not equal destination size (%0 vs %1)",
[b]=a,
[g]=l,
[h]=a,
[f]="__builtin_bit_cast source size does not equal destination size \\((.*?) vs (.*?)\\)",
[d]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast"},
[e]=a,
[k]={{w,3271,"void CastOperation::CheckBuiltinBitCast() {\n  if (DestSize != SourceSize) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch) << (int)SourceSize.getQuantity() << (int)DestSize.getQuantity();"}}
[d]=a,
[c]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast"},
[k]={{x,3271,"void CastOperation::CheckBuiltinBitCast() {\n  if (DestSize != SourceSize) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch) << (int)SourceSize.getQuantity() << (int)DestSize.getQuantity();"}},
[o]={
["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:28:22: error: __builtin_bit_cast source size does not equal destination size (4 vs 1)"}
}
},
},
["err_bit_int_bad_size"]={
["err_bit_int_bad_size"]={
[f]="... _BitInt must have a bit size of at least ...",
[h]="... _BitInt must have a bit size of at least ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{signed|unsigned}0 _BitInt must have a bit size of at least %select{2|1}0",
[i]=m,
[i]=m,
[j]="(?:signed|unsigned) _BitInt must have a bit size of at least (?:2|1)",
[b]="%select{signed|unsigned}0 _BitInt must have a bit size of at least %select{2|1}0",
[b]=a,
[g]=l,
[h]=a,
[f]="(?:signed|unsigned) _BitInt must have a bit size of at least (?:2|1)",
[d]={db,1616787805,cb},
[e]=a,
[k]={{r,2359,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  if (!IsUnsigned && NumBits < 2) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 0;"},{r,2364,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  if (IsUnsigned && NumBits < 1) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 1;"}}
[d]=a,
[c]={cb,1616787805,jb},
[k]={{s,2359,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  if (!IsUnsigned && NumBits < 2) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 0;"},{s,2364,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  if (IsUnsigned && NumBits < 1) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 1;"}},
[o]={
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:21:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:22:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:24:3: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:26:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:6:12: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2"}
}
},
},
["err_bit_int_max_size"]={
["err_bit_int_max_size"]={
[f]="... _BitInt of bit sizes greater than A not supported",
[h]="... _BitInt of bit sizes greater than A not supported",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{signed|unsigned}0 _BitInt of bit sizes greater than %1 not supported",
[i]=m,
[i]=m,
[j]="(?:signed|unsigned) _BitInt of bit sizes greater than (.*?) not supported",
[b]="%select{signed|unsigned}0 _BitInt of bit sizes greater than %1 not supported",
[b]=a,
[g]=l,
[h]=a,
[f]="(?:signed|unsigned) _BitInt of bit sizes greater than (.*?) not supported",
[d]={db,1616787805,cb},
[e]=a,
[k]={{r,2370,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  if (NumBits > TI.getMaxBitIntWidth()) {\n    Diag(Loc, diag::err_bit_int_max_size) << IsUnsigned << static_cast<uint64_t>(TI.getMaxBitIntWidth());"}}
[d]=a,
[c]={cb,1616787805,jb},
[k]={{s,2370,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  if (NumBits > TI.getMaxBitIntWidth()) {\n    Diag(Loc, diag::err_bit_int_max_size) << IsUnsigned << static_cast<uint64_t>(TI.getMaxBitIntWidth());"}},
[o]={
["clang/test/Sema/large-bit-int.c"]={"clang/test/Sema/large-bit-int.c:9:3: error: signed _BitInt of bit sizes greater than 1024 not supported","clang/test/Sema/large-bit-int.c:10:3: error: unsigned _BitInt of bit sizes greater than 1024 not supported"}
}
},
},
["err_bitfield_has_negative_width"]={
["err_bitfield_has_negative_width"]={
[f]="bit-field A has negative width (B)",
[h]="bit-field A has negative width (B)",
[c]=l,
[j]=n,
[e]=n,
[g]="bit-field %0 has negative width (%1)",
[i]=m,
[i]=m,
[j]="bit\\-field (.*?) has negative width \\((.*?)\\)",
[b]="bit-field %0 has negative width (%1)",
[b]=a,
[g]=l,
[h]=o,
[f]="bit\\-field (.*?) has negative width \\((.*?)\\)",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,17924,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (Value.isSigned() && Value.isNegative()) {\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_bitfield_has_negative_width) << FieldName << toString(Value, 10);"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,17924,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (Value.isSigned() && Value.isNegative()) {\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_bitfield_has_negative_width) << FieldName << toString(Value, 10);"}},
[o]={
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:5:7: error: bit-field \'a\' has negative width (-1)"}
}
},
},
["err_bitfield_has_zero_width"]={
["err_bitfield_has_zero_width"]={
[f]="named bit-field A has zero width",
[h]="named bit-field A has zero width",
[c]=l,
[j]=n,
[e]=n,
[g]="named bit-field %0 has zero width",
[i]=m,
[i]=m,
[j]="named bit\\-field (.*?) has zero width",
[b]="named bit-field %0 has zero width",
[b]=a,
[g]=l,
[h]=o,
[f]="named bit\\-field (.*?) has zero width",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,17920,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // Zero-width bitfield is ok for anonymous field.\n  if (Value == 0 && FieldName)\n    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,17920,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // Zero-width bitfield is ok for anonymous field.\n  if (Value == 0 && FieldName)\n    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;"}},
[o]={
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:14:7: error: named bit-field \'e\' has zero width"}
}
},
},
["err_bitfield_too_wide"]={
["err_bitfield_too_wide"]={
[f]="... is too wide (A bits)",
[h]="... is too wide (A bits)",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{bit-field %1|anonymous bit-field}0 is too wide (%2 bits)",
[i]=m,
[i]=m,
[j]="(?:bit\\-field (.*?)|anonymous bit\\-field) is too wide \\((.*?) bits\\)",
[b]="%select{bit-field %1|anonymous bit-field}0 is too wide (%2 bits)",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:bit\\-field (.*?)|anonymous bit\\-field) is too wide \\((.*?) bits\\)",
[d]={fb,1590001902,eb},
[e]=a,
[k]={{q,17933,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // The size of the bit-field must not exceed our maximum permitted object\n  // size.\n  if (Value.getActiveBits() > ConstantArrayType::getMaxSizeBits(Context)) {\n    return Diag(FieldLoc, diag::err_bitfield_too_wide) << !FieldName << FieldName << toString(Value, 10);"}}
[d]=p,
[c]={fb,1590001902,gb},
[k]={{r,17933,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // The size of the bit-field must not exceed our maximum permitted object\n  // size.\n  if (Value.getActiveBits() > ConstantArrayType::getMaxSizeBits(Context)) {\n    return Diag(FieldLoc, diag::err_bitfield_too_wide) << !FieldName << FieldName << toString(Value, 10);"}},
[o]={
["clang/test/SemaCXX/bitfield-layout.cpp"]={"clang/test/SemaCXX/bitfield-layout.cpp:45:8: error: bit-field \'c\' is too wide (18446744073709551617 bits)"}
}
},
},
["err_bitfield_width_exceeds_type_width"]={
["err_bitfield_width_exceeds_type_width"]={
[f]="width of... bit-field... (A bits) exceeds the ... of its type (B bitC)",
[h]="width of... bit-field... (A bits) exceeds the ... of its type (B bitC)",
[c]=l,
[j]=n,
[e]=n,
[g]="width of%select{ anonymous|}0 bit-field%select{| %1}0 (%2 bits) exceeds the %select{width|size}3 of its type (%4 bit%s4)",
[i]=m,
[i]=m,
[j]="width of(?: anonymous|) bit\\-field(?:| (.*?)) \\((.*?) bits\\) exceeds the (?:width|size) of its type \\((.*?) bit(.*?)\\)",
[b]="width of%select{ anonymous|}0 bit-field%select{| %1}0 (%2 bits) exceeds the %select{width|size}3 of its type (%4 bit%s4)",
[b]=a,
[g]=l,
[h]=o,
[f]="width of(?: anonymous|) bit\\-field(?:| (.*?)) \\((.*?) bits\\) exceeds the (?:width|size) of its type \\((.*?) bit(.*?)\\)",
[d]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"},
[e]=a,
[k]={{q,17952,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (!FieldTy->isDependentType()) {\n    if (CStdConstraintViolation || MSBitfieldViolation) {\n      return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width) << (bool)FieldName << FieldName << toString(Value, 10) << !CStdConstraintViolation << DiagWidth;"}}
[d]=p,
[c]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"},
[k]={{r,17952,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (!FieldTy->isDependentType()) {\n    if (CStdConstraintViolation || MSBitfieldViolation) {\n      return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width) << (bool)FieldName << FieldName << toString(Value, 10) << !CStdConstraintViolation << DiagWidth;"}},
[o]={
["clang/test/Sema/ext-int.c"]={"clang/test/Sema/ext-int.c:15:14: error: width of bit-field \'A\' (8 bits) exceeds the width of its type (4 bits)"}
}
},
},
["err_block_decl_ref_not_modifiable_lvalue"]={
["err_block_decl_ref_not_modifiable_lvalue"]={
[f]="variable is not assignable (missing __block type specifier)",
[h]="variable is not assignable (missing __block type specifier)",
[c]=l,
[j]=n,
[e]=n,
[g]="variable is not assignable (missing __block type specifier)",
[i]=m,
[i]=m,
[j]="variable is not assignable \\(missing __block type specifier\\)",
[b]="variable is not assignable (missing __block type specifier)",
[b]=a,
[g]=l,
[h]=o,
[f]="variable is not assignable \\(missing __block type specifier\\)",
[d]={u,1237025389,t},
[e]=a,
[k]={{y,14282,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // Use a specialized diagnostic when we\'re assigning to an object\n    // from an enclosing function or block.\n    if (NonConstCaptureKind NCCK = isReferenceToNonConstCapture(S, E)) {\n      if (NCCK == NCCK_Block)\n        DiagID = diag::err_block_decl_ref_not_modifiable_lvalue;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{z,14282,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // Use a specialized diagnostic when we\'re assigning to an object\n    // from an enclosing function or block.\n    if (NonConstCaptureKind NCCK = isReferenceToNonConstCapture(S, E)) {\n      if (NCCK == NCCK_Block)\n        DiagID = diag::err_block_decl_ref_not_modifiable_lvalue;"}},
[o]={
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:11:20: error: variable is not assignable (missing __block type specifier)"}
}
},
},
["err_block_extern_cant_init"]={
["err_block_extern_cant_init"]={
[h]="declaration of block scope identifier with linkage cannot have an initializer",
[j]=n,
[i]=m,
[b]="declaration of block scope identifier with linkage cannot have an initializer",
[g]=l,
[f]="declaration of block scope identifier with linkage cannot have an initializer",
[f]="declaration of block scope identifier with linkage cannot have an initializer",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="declaration of block scope identifier with linkage cannot have an initializer",
[c]={v,1237025389,u},
[i]=m,
[k]={{r,13189,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // C99 6.7.8p5. If the declaration of an identifier has block scope, and\n  // the identifier has external or internal linkage, the declaration shall\n  // have no initializer for the identifier.\n  // C++14 [dcl.init]p5 is the same restriction for C++.\n  if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {\n    Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);"}},
[j]="declaration of block scope identifier with linkage cannot have an initializer",
[o]={
[b]=a,
["clang/test/Sema/err-decl-block-extern-no-init.c"]={"clang/test/Sema/err-decl-block-extern-no-init.c:6:16: error: declaration of block scope identifier with linkage cannot have an initializer","clang/test/Sema/err-decl-block-extern-no-init.c:13:16: error: declaration of block scope identifier with linkage cannot have an initializer"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{q,13189,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // C99 6.7.8p5. If the declaration of an identifier has block scope, and\n  // the identifier has external or internal linkage, the declaration shall\n  // have no initializer for the identifier.\n  // C++14 [dcl.init]p5 is the same restriction for C++.\n  if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {\n    Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);"}}
},
},
["err_block_on_nonlocal"]={
["err_block_on_nonlocal"]={
[h]="__block attribute not allowed, only allowed on local variables",
[j]=n,
[i]=m,
[b]="__block attribute not allowed, only allowed on local variables",
[g]=l,
[f]="__block attribute not allowed, only allowed on local variables",
[f]="__block attribute not allowed, only allowed on local variables",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="__block attribute not allowed, only allowed on local variables",
[c]={"e9efa80c003e",1241050780,"Sema checking for incorrect placement of __block.  Radar 6441502"},
[i]=m,
[k]={{r,8742,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);"},{r,14821,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  if (New->hasAttr<BlocksAttr>()) {\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"},{K,4813,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    if (Param->hasAttr<BlocksAttr>()) {\n      Diag(Param->getLocation(), diag::err_block_on_nonlocal);"},{K,5239,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  if (New->hasAttr<BlocksAttr>())\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"}},
[j]="__block attribute not allowed, only allowed on local variables",
[o]={
[b]=a,
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:150:13: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:152:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:154:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:155:25: error: __block attribute not allowed, only allowed on local variables"}
[h]=o,
}
[d]={"e9efa80c003e",1241050780,"Sema checking for incorrect placement of __block.  Radar 6441502"},
[k]={{q,8742,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);"},{q,14821,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  if (New->hasAttr<BlocksAttr>()) {\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"},{I,4813,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    if (Param->hasAttr<BlocksAttr>()) {\n      Diag(Param->getLocation(), diag::err_block_on_nonlocal);"},{I,5239,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  if (New->hasAttr<BlocksAttr>())\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"}}
},
},
["err_block_on_vm"]={
["err_block_on_vm"]={
[h]="__block attribute not allowed on declaration with a variably modified type",
[j]=n,
[i]=m,
[b]="__block attribute not allowed on declaration with a variably modified type",
[g]=l,
[f]="__block attribute not allowed on declaration with a variably modified type",
[f]="__block attribute not allowed on declaration with a variably modified type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="__block attribute not allowed on declaration with a variably modified type",
[c]={"a71286315f9d",1241221307,"Add Sema checking for __block on vm declarations.  Radar 6441502"},
[i]=m,
[k]={{r,8755,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (isVM && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_vm);"}},
[j]="__block attribute not allowed on declaration with a variably modified type",
[o]={
[b]=a,
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:156:15: error: __block attribute not allowed on declaration with a variably modified type","clang/test/Sema/block-misc.c:157:17: error: __block attribute not allowed on declaration with a variably modified type"}
[h]=o,
}
[d]={"a71286315f9d",1241221307,"Add Sema checking for __block on vm declarations.  Radar 6441502"},
[k]={{q,8755,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (isVM && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_vm);"}}
},
},
["err_block_return_missing_expr"]={
["err_block_return_missing_expr"]={
[f]="non-void block should return a value",
[h]="non-void block should return a value",
[c]=l,
[j]=n,
[e]=n,
[g]="non-void block should return a value",
[i]=m,
[i]=m,
[j]="non\\-void block should return a value",
[b]="non-void block should return a value",
[b]=a,
[g]=l,
[h]=o,
[f]="non\\-void block should return a value",
[d]={u,1237025389,t},
[e]=a,
[k]={{R,3693,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // 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  } else if (FnRetType->isVoidType()) {\n  } else if (!RetValExp) {\n    return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{S,3693,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // 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  } else if (FnRetType->isVoidType()) {\n  } else if (!RetValExp) {\n    return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));"}}
},
},
["err_block_returning_array_function"]={
["err_block_returning_array_function"]={
[f]="block cannot return ... type A",
[h]="block cannot return ... type A",
[c]=l,
[j]=n,
[e]=n,
[g]="block cannot return %select{array|function}0 type %1",
[i]=m,
[i]=m,
[j]="block cannot return (?:array|function) type (.*?)",
[b]="block cannot return %select{array|function}0 type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="block cannot return (?:array|function) type (.*?)",
[d]={"20ad245e3e22",1295997393,"Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks ar..."},
[e]=a,
[k]={{y,21269,"/// Rebuilds a call expression which yielded __unknown_anytype.\nExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) {\n  // Verify that this is a legal result type of a function.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    if (Kind == FK_BlockPointer)\n      diagID = diag::err_block_returning_array_function;"},{r,5272,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // C99 6.7.5.3p1: The return type may not be a function or array type.\n      // For conversion functions, we\'ll diagnose this particular error later.\n      if (!D.isInvalidType() && (T->isArrayType() || T->isFunctionType()) && (D.getName().getKind() != UnqualifiedIdKind::IK_ConversionFunctionId)) {\n        // Last processing chunk in block context means this function chunk\n        // represents the block.\n        if (chunkIndex == 0 && D.getContext() == DeclaratorContext::BlockLiteral)\n          diagID = diag::err_block_returning_array_function;"}}
[d]=p,
[c]={"20ad245e3e22",1295997393,"Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks ar..."},
[k]={{z,21269,"/// Rebuilds a call expression which yielded __unknown_anytype.\nExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) {\n  // Verify that this is a legal result type of a function.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    if (Kind == FK_BlockPointer)\n      diagID = diag::err_block_returning_array_function;"},{s,5272,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // C99 6.7.5.3p1: The return type may not be a function or array type.\n      // For conversion functions, we\'ll diagnose this particular error later.\n      if (!D.isInvalidType() && (T->isArrayType() || T->isFunctionType()) && (D.getName().getKind() != UnqualifiedIdKind::IK_ConversionFunctionId)) {\n        // Last processing chunk in block context means this function chunk\n        // represents the block.\n        if (chunkIndex == 0 && D.getContext() == DeclaratorContext::BlockLiteral)\n          diagID = diag::err_block_returning_array_function;"}},
[o]={
["clang/test/Sema/block-return.c"]={"clang/test/Sema/block-return.c:101:19: error: block cannot return array type \'int (*[5])(long)\'"}
}
},
},
["err_blocks_disable"]={
["err_blocks_disable"]={
[f]="blocks support disabled - compile with -fblocks or ...",
[h]="blocks support disabled - compile with -fblocks or ...",
[c]=l,
[j]=n,
[e]=n,
[g]="blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL C 2.0 or OpenCL C 3.0 with __opencl_c_device_enqueue feature}0",
[i]=m,
[i]=m,
[j]="blocks support disabled \\- compile with \\-fblocks or (?:pick a deployment target that supports them|for OpenCL C 2\\.0 or OpenCL C 3\\.0 with __opencl_c_device_enqueue feature)",
[b]="blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL C 2.0 or OpenCL C 3.0 with __opencl_c_device_enqueue feature}0",
[b]=a,
[g]=l,
[h]=o,
[f]="blocks support disabled \\- compile with \\-fblocks or (?:pick a deployment target that supports them|for OpenCL C 2\\.0 or OpenCL C 3\\.0 with __opencl_c_device_enqueue feature)",
[d]={"9eac931b5f29",1238127486,"Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway"},
[e]=a,
[k]={{y,17158,"/// ActOnBlockStmtExpr - This is called when the body of a block statement\n/// literal was successfully completed.  ^(int x){...}\nExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, Scope *CurScope) {\n  // If blocks are disabled, emit an error.\n  if (!LangOpts.Blocks)\n    Diag(CaretLoc, diag::err_blocks_disable) << LangOpts.OpenCL;"},{r,5034,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::BlockPointer:\n      // If blocks are disabled, emit an error.\n      if (!LangOpts.Blocks)\n        S.Diag(DeclType.Loc, diag::err_blocks_disable) << LangOpts.OpenCL;"}}
[d]=p,
[c]={"9eac931b5f29",1238127486,"Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway"},
[k]={{z,17158,"/// ActOnBlockStmtExpr - This is called when the body of a block statement\n/// literal was successfully completed.  ^(int x){...}\nExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, Scope *CurScope) {\n  // If blocks are disabled, emit an error.\n  if (!LangOpts.Blocks)\n    Diag(CaretLoc, diag::err_blocks_disable) << LangOpts.OpenCL;"},{s,5034,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::BlockPointer:\n      // If blocks are disabled, emit an error.\n      if (!LangOpts.Blocks)\n        S.Diag(DeclType.Loc, diag::err_blocks_disable) << LangOpts.OpenCL;"}},
[o]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:131:19: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them","clang/test/Sema/exprs.c:133:7: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them"}
}
},
},
["err_bool_redeclaration"]={
["err_bool_redeclaration"]={
[f]="redeclaration of C++ built-in type \'bool\'",
[h]="redeclaration of C++ built-in type \'bool\'",
[c]=l,
[j]=n,
[e]=n,
[g]="redeclaration of C++ built-in type \'bool\'",
[i]=m,
[i]=m,
[j]="redeclaration of C\\+\\+ built\\-in type \'bool\'",
[b]="redeclaration of C++ built-in type \'bool\'",
[b]=a,
[g]=l,
[h]=B,
[f]="redeclaration of C\\+\\+ built\\-in type \'bool\'",
[d]={"20ee5ae8710a",1289931493,"Emit a specific diagnostic when typedefing C++ bool, mirroring gcc."},
[e]=a,
[k]={{D,4255,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    case tok::kw__Bool:\n      if (Tok.is(tok::kw_bool) && DS.getTypeSpecType() != DeclSpec::TST_unspecified && DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        DiagID = diag::err_bool_redeclaration;"},{D,4500,"#include \"clang/Basic/TransformTypeTraits.def\"\n    if (DiagID != diag::err_bool_redeclaration && ConsumedEnd.isInvalid())"}}
[d]=A,
[c]={"20ee5ae8710a",1289931493,"Emit a specific diagnostic when typedefing C++ bool, mirroring gcc."},
[k]={{E,4255,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    case tok::kw__Bool:\n      if (Tok.is(tok::kw_bool) && DS.getTypeSpecType() != DeclSpec::TST_unspecified && DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        DiagID = diag::err_bool_redeclaration;"},{E,4500,"#include \"clang/Basic/TransformTypeTraits.def\"\n    if (DiagID != diag::err_bool_redeclaration && ConsumedEnd.isInvalid())"}},
[o]={
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:17:14: error: redeclaration of C++ built-in type \'bool\'"}
}
},
},
["err_bound_member_function"]={
["err_bound_member_function"]={
[f]="reference to non-static member function must be called...",
[h]="reference to non-static member function must be called...",
[c]=l,
[j]=n,
[e]=n,
[g]="reference to non-static member function must be called%select{|; did you mean to call it with no arguments?}0",
[i]=m,
[i]=m,
[j]="reference to non\\-static member function must be called(?:|; did you mean to call it with no arguments\\?)",
[b]="reference to non-static member function must be called%select{|; did you mean to call it with no arguments?}0",
[b]=a,
[g]=l,
[h]=o,
[f]="reference to non\\-static member function must be called(?:|; did you mean to call it with no arguments\\?)",
[d]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion"},
[e]=a,
[k]={{y,21549,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // Bound member functions.\n  case BuiltinType::BoundMember: {\n    PartialDiagnostic PD = PDiag(diag::err_bound_member_function);"},{Q,12958,"// Resolve and fix an overloaded expression that can be resolved\n// because it identifies a single function template specialization.\n//\n// Last three arguments should only be supplied if Complain = true\n//\n// Return true if it was logically possible to so resolve the\n// expression, regardless of whether or not it succeeded.  Always\n// returns true if \'complain\' is set.\nbool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult &SrcExpr, bool doFunctionPointerConversion, bool complain, SourceRange OpRangeForComplaining, QualType DestTypeForComplaining, unsigned DiagIDForComplaining) {\n  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(ovl.Expression, /*complain*/ false, &found)) {\n    // It is only correct to resolve to an instance method if we\'re\n    // resolving a form that\'s permitted to be a pointer to member.\n    // Otherwise we\'ll end up making a bound member expression, which\n    // is illegal in all the contexts we resolve like this.\n    if (!ovl.HasFormOfMemberPointer && isa<CXXMethodDecl>(fn) && cast<CXXMethodDecl>(fn)->isInstance()) {\n      Diag(ovl.Expression->getExprLoc(), diag::err_bound_member_function) << 0 << ovl.Expression->getSourceRange();"}}
[d]=p,
[c]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion"},
[k]={{z,21549,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // Bound member functions.\n  case BuiltinType::BoundMember: {\n    PartialDiagnostic PD = PDiag(diag::err_bound_member_function);"},{T,12958,"// Resolve and fix an overloaded expression that can be resolved\n// because it identifies a single function template specialization.\n//\n// Last three arguments should only be supplied if Complain = true\n//\n// Return true if it was logically possible to so resolve the\n// expression, regardless of whether or not it succeeded.  Always\n// returns true if \'complain\' is set.\nbool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult &SrcExpr, bool doFunctionPointerConversion, bool complain, SourceRange OpRangeForComplaining, QualType DestTypeForComplaining, unsigned DiagIDForComplaining) {\n  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(ovl.Expression, /*complain*/ false, &found)) {\n    // It is only correct to resolve to an instance method if we\'re\n    // resolving a form that\'s permitted to be a pointer to member.\n    // Otherwise we\'ll end up making a bound member expression, which\n    // is illegal in all the contexts we resolve like this.\n    if (!ovl.HasFormOfMemberPointer && isa<CXXMethodDecl>(fn) && cast<CXXMethodDecl>(fn)->isInstance()) {\n      Diag(ovl.Expression->getExprLoc(), diag::err_bound_member_function) << 0 << ovl.Expression->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/overloaded-name.cpp"]={"clang/test/SemaCXX/overloaded-name.cpp:25:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?","clang/test/SemaCXX/overloaded-name.cpp:27:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?"}
}
},
},
["err_box_literal_collection"]={
["err_box_literal_collection"]={
[f]="... literal must be prefixed by \'@\' in a collection",
[h]="... literal must be prefixed by \'@\' in a collection",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{string|character|boolean|numeric}0 literal must be prefixed by \'@\' in a collection",
[i]=m,
[i]=m,
[j]="(?:string|character|boolean|numeric) literal must be prefixed by \'@\' in a collection",
[b]="%select{string|character|boolean|numeric}0 literal must be prefixed by \'@\' in a collection",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:string|character|boolean|numeric) literal must be prefixed by \'@\' in a collection",
[d]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[e]=a,
[k]={{G,438,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // If this is potentially an Objective-C numeric literal, add the \'@\'.\n    if (isa<IntegerLiteral>(OrigElement) || isa<CharacterLiteral>(OrigElement) || isa<FloatingLiteral>(OrigElement) || isa<ObjCBoolLiteralExpr>(OrigElement) || isa<CXXBoolLiteralExpr>(OrigElement)) {\n      if (S.NSAPIObj->getNSNumberFactoryMethodKind(OrigElement->getType())) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << Which << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"},{G,454,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    }\n    // If this is potentially an Objective-C string literal, add the \'@\'.\n    else if (StringLiteral *String = dyn_cast<StringLiteral>(OrigElement)) {\n      if (String->isOrdinary()) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << 0 << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"}}
[d]=p,
[c]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[k]={{F,438,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // If this is potentially an Objective-C numeric literal, add the \'@\'.\n    if (isa<IntegerLiteral>(OrigElement) || isa<CharacterLiteral>(OrigElement) || isa<FloatingLiteral>(OrigElement) || isa<ObjCBoolLiteralExpr>(OrigElement) || isa<CXXBoolLiteralExpr>(OrigElement)) {\n      if (S.NSAPIObj->getNSNumberFactoryMethodKind(OrigElement->getType())) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << Which << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"},{F,454,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    }\n    // If this is potentially an Objective-C string literal, add the \'@\'.\n    else if (StringLiteral *String = dyn_cast<StringLiteral>(OrigElement)) {\n      if (String->isOrdinary()) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << 0 << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"}},
[o]={
["clang/test/SemaObjC/objc-array-literal.m"]={"clang/test/SemaObjC/objc-array-literal.m:51:23: error: string literal must be prefixed by \'@\' in a collection"}
}
},
},
["err_bracket_depth_exceeded"]={
["err_bracket_depth_exceeded"]={
[f]="bracket nesting level exceeded maximum of A",
[h]="bracket nesting level exceeded maximum of A",
[c]=Fb,
[j]=Ub,
[e]=Eb,
[i]=Rb,
[g]="bracket nesting level exceeded maximum of %0",
[b]="bracket nesting level exceeded maximum of %0",
[i]=Bb,
[g]=Tb,
[j]="bracket nesting level exceeded maximum of (.*?)",
[f]="bracket nesting level exceeded maximum of (.*?)",
[b]=a,
[e]=a,
[h]=B,
[d]=A,
[d]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,"},
[c]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,"},
[k]={{Jb,2696,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::err_bracket_depth_exceeded) << P.getLangOpts().BracketDepth;"}}
[k]={{Sb,2696,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::err_bracket_depth_exceeded) << P.getLangOpts().BracketDepth;"}}
},
},
["err_brackets_go_after_unqualified_id"]={
["err_brackets_go_after_unqualified_id"]={
[f]="brackets are not allowed here; to declare an array, place the brackets after the ...",
[h]="brackets are not allowed here; to declare an array, place the brackets after the ...",
[c]=l,
[j]=n,
[e]=n,
[g]="brackets are not allowed here; to declare an array, place the brackets after the %select{identifier|name}0",
[i]=m,
[i]=m,
[j]="brackets are not allowed here; to declare an array, place the brackets after the (?:identifier|name)",
[b]="brackets are not allowed here; to declare an array, place the brackets after the %select{identifier|name}0",
[b]=a,
[g]=l,
[h]=B,
[f]="brackets are not allowed here; to declare an array, place the brackets after the (?:identifier|name)",
[d]={"f4b81d002965",1403651664,"Provide a better diagnostic when braces are put before the identifier."},
[e]=a,
[k]={{D,7725,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  if (NeedParens) {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertion(SuggestParenLoc, \"(\") << FixItHint::CreateInsertion(EndLoc, \")\") << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"},{D,7733,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  if (NeedParens) {\n  } else {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"}}
[d]=A,
[c]={"f4b81d002965",1403651664,"Provide a better diagnostic when braces are put before the identifier."},
[k]={{E,7725,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  if (NeedParens) {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertion(SuggestParenLoc, \"(\") << FixItHint::CreateInsertion(EndLoc, \")\") << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"},{E,7733,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  if (NeedParens) {\n  } else {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"}},
[o]={
["clang/test/Parser/cxx1z-decomposition.cpp"]={"clang/test/Parser/cxx1z-decomposition.cpp:109:16: error: brackets are not allowed here; to declare an array, place the brackets after the name"}
}
},
},
["err_break_not_in_loop_or_switch"]={
["err_break_not_in_loop_or_switch"]={
[h]="\'break\' statement not in loop or switch statement",
[j]=n,
[i]=m,
[b]="\'break\' statement not in loop or switch statement",
[g]=l,
[f]="\'break\' statement not in loop or switch statement",
[f]="\'break\' statement not in loop or switch statement",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'break\' statement not in loop or switch statement",
[c]={v,1237025389,u},
[i]=m,
[k]={{S,3349,"StmtResult Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {\n  if (!S) {\n    return StmtError(Diag(BreakLoc, diag::err_break_not_in_loop_or_switch));"}},
[j]="\'break\' statement not in loop or switch statement",
[o]={
[b]=a,
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:108:8: error: \'break\' statement not in loop or switch statement","clang/test/Sema/block-misc.c:112:8: error: \'break\' statement not in loop or switch statement"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{R,3349,"StmtResult Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {\n  if (!S) {\n    return StmtError(Diag(BreakLoc, diag::err_break_not_in_loop_or_switch));"}}
},
},
["err_btf_type_id_not_const"]={
["err_btf_type_id_not_const"]={
[f]="__builtin_btf_type_id argument A not a constant",
[h]="__builtin_btf_type_id argument A not a constant",
[c]=l,
[j]=n,
[e]=n,
[g]="__builtin_btf_type_id argument %0 not a constant",
[i]=m,
[i]=m,
[j]="__builtin_btf_type_id argument (.*?) not a constant",
[b]="__builtin_btf_type_id argument %0 not a constant",
[b]=a,
[g]=l,
[h]=a,
[f]="__builtin_btf_type_id argument (.*?) not a constant",
[d]={W,1576908663,V},
[e]=a,
[k]={{s,3514,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n      kind = diag::err_btf_type_id_not_const;"}}
[d]=a,
[c]={Y,1576908663,X},
[k]={{t,3514,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n      kind = diag::err_btf_type_id_not_const;"}},
[o]={
["clang/test/Sema/builtin-bpf-btf-type-id.c"]={"clang/test/Sema/builtin-bpf-btf-type-id.c:8:59: error: __builtin_btf_type_id argument 2 not a constant"}
}
},
},
["err_builtin_annotation_first_arg"]={
["err_builtin_annotation_first_arg"]={
[h]="first argument to __builtin_annotation must be an integer",
[j]=n,
[i]=m,
[b]="first argument to __builtin_annotation must be an integer",
[g]=l,
[f]="first argument to __builtin_annotation must be an integer",
[f]="first argument to __builtin_annotation must be an integer",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="first argument to __builtin_annotation must be an integer",
[c]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32."},
[i]=m,
[k]={{t,198,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  if (!Ty->isIntegerType()) {\n    S.Diag(ValArg->getBeginLoc(), diag::err_builtin_annotation_first_arg) << ValArg->getSourceRange();"}},
[j]="first argument to __builtin_annotation must be an integer",
[o]={
[b]=a,
["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:14:34: error: first argument to __builtin_annotation must be an integer"}
[h]=o,
}
[d]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32."},
[k]={{s,198,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  if (!Ty->isIntegerType()) {\n    S.Diag(ValArg->getBeginLoc(), diag::err_builtin_annotation_first_arg) << ValArg->getSourceRange();"}}
},
},
["err_builtin_annotation_second_arg"]={
["err_builtin_annotation_second_arg"]={
[f]="second argument to __builtin_annotation must be a non-wide string constant",
[h]="second argument to __builtin_annotation must be a non-wide string constant",
[c]=l,
[j]=n,
[e]=n,
[g]="second argument to __builtin_annotation must be a non-wide string constant",
[i]=m,
[i]=m,
[j]="second argument to __builtin_annotation must be a non\\-wide string constant",
[b]="second argument to __builtin_annotation must be a non-wide string constant",
[b]=a,
[g]=l,
[h]=o,
[f]="second argument to __builtin_annotation must be a non\\-wide string constant",
[d]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32."},
[e]=a,
[k]={{s,207,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  if (!Literal || !Literal->isOrdinary()) {\n    S.Diag(StrArg->getBeginLoc(), diag::err_builtin_annotation_second_arg) << StrArg->getSourceRange();"}}
[d]=p,
[c]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32."},
[k]={{t,207,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  if (!Literal || !Literal->isOrdinary()) {\n    S.Diag(StrArg->getBeginLoc(), diag::err_builtin_annotation_second_arg) << StrArg->getSourceRange();"}},
[o]={
["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:11:43: error: second argument to __builtin_annotation must be a non-wide string constant","clang/test/Sema/annotate.c:12:43: error: second argument to __builtin_annotation must be a non-wide string constant"}
}
},
},
["err_builtin_definition"]={
["err_builtin_definition"]={
[f]="definition of builtin function A",
[h]="definition of builtin function A",
[c]=l,
[j]=n,
[e]=n,
[g]="definition of builtin function %0",
[i]=m,
[i]=m,
[j]="definition of builtin function (.*?)",
[b]="definition of builtin function %0",
[b]=a,
[g]=l,
[h]=o,
[f]="definition of builtin function (.*?)",
[d]={A,1236199783,z},
[e]=a,
[k]={{q,15334,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // Builtin functions cannot be defined.\n  if (unsigned BuiltinID = FD->getBuiltinID()) {\n    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) && !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {\n      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{r,15334,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // Builtin functions cannot be defined.\n  if (unsigned BuiltinID = FD->getBuiltinID()) {\n    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) && !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {\n      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;"}}
},
},
["err_builtin_fn_use"]={
["err_builtin_fn_use"]={
[h]="builtin functions must be directly called",
[j]=n,
[i]=m,
[b]="builtin functions must be directly called",
[g]=l,
[f]="builtin functions must be directly called",
[f]="builtin functions must be directly called",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="builtin functions must be directly called",
[c]={"34866c7719f8",1346372047,"Change the representation of builtin functions in the AST"},
[i]=m,
[k]={{z,21629,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  case BuiltinType::BuiltinFn: {\n    Diag(E->getBeginLoc(), diag::err_builtin_fn_use);"}},
[j]="builtin functions must be directly called",
[o]={
[b]=a,
["clang/test/Parser/builtin_classify_type.c"]={"clang/test/Parser/builtin_classify_type.c:13:21: error: builtin functions must be directly called"}
[h]=o,
}
[d]={"34866c7719f8",1346372047,"Change the representation of builtin functions in the AST"},
[k]={{y,21629,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  case BuiltinType::BuiltinFn: {\n    Diag(E->getBeginLoc(), diag::err_builtin_fn_use);"}}
},
},
["err_builtin_func_cast_more_than_one_arg"]={
["err_builtin_func_cast_more_than_one_arg"]={
[f]="function-style cast to a builtin type can only take one argument",
[h]="function-style cast to a builtin type can only take one argument",
[c]=l,
[j]=n,
[e]=n,
[g]="function-style cast to a builtin type can only take one argument",
[i]=m,
[i]=m,
[j]="function\\-style cast to a builtin type can only take one argument",
[b]="function-style cast to a builtin type can only take one argument",
[b]=a,
[g]=l,
[h]=o,
[f]="function\\-style cast to a builtin type can only take one argument",
[d]={u,1237025389,t},
[e]=a,
[k]={{E,9814,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_TooManyInitsForScalar: {\n    if (Kind.isCStyleOrFunctionalCast())\n      S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) << R;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{H,9814,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_TooManyInitsForScalar: {\n    if (Kind.isCStyleOrFunctionalCast())\n      S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) << R;"}}
},
},
["err_builtin_invalid_arg_type"]={
["err_builtin_invalid_arg_type"]={
[f]="A argument must be a ... (was B)",
[h]="A argument must be a ... (was B)",
[c]=l,
[j]=n,
[e]=n,
[g]="%ordinal0 argument must be a %select{vector, integer or floating point type|matrix|pointer to a valid matrix element type|signed integer or floating point type|vector type|floating point type|vector of integers}1 (was %2)",
[i]=m,
[i]=m,
[j]="(.*?) argument must be a (?:vector, integer or floating point type|matrix|pointer to a valid matrix element type|signed integer or floating point type|vector type|floating point type|vector of integers) \\(was (.*?)\\)",
[b]="%ordinal0 argument must be a %select{vector, integer or floating point type|matrix|pointer to a valid matrix element type|signed integer or floating point type|vector type|floating point type|vector of integers}1 (was %2)",
[b]=a,
[g]=l,
[h]=a,
[f]="(.*?) argument must be a (?:vector, integer or floating point type|matrix|pointer to a valid matrix element type|signed integer or floating point type|vector type|floating point type|vector of integers) \\(was (.*?)\\)",
[d]={db,1616787805,cb},
[e]=a,
[k]={{s,2045,"// Check if \\p Ty is a valid type for the elementwise math builtins. If it is\n// not a valid type, emit an error message and return true. Otherwise return\n// false.\nstatic bool checkMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType Ty) {\n  if (!Ty->getAs<VectorType>() && !ConstantMatrixType::isValidElementType(Ty)) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << 1 << /* vector, integer or float ty*/ 0 << Ty;"},{s,2059,"static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType ArgTy, int ArgIndex) {\n  if (!EltTy->isRealFloatingType()) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << ArgIndex << /* vector or float ty*/ 5 << ArgTy;"},{s,2623,"#include \"clang/Basic/Builtins.def\"\n  // __builtin_elementwise_abs restricts the element type to signed integers or\n  // floating point types only.\n  case Builtin::BI__builtin_elementwise_abs: {\n    if (EltTy->isUnsignedIntegerType()) {\n      Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* signed integer or float ty*/ 3 << ArgTy;"},{s,2692,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_elementwise_sub_sat: {\n    if (!EltTy->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* integer ty */ 6 << ArgTy;"},{s,2741,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_reduce_min: {\n    if (!TyA) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector ty*/ 4 << Arg->getType();"},{s,2763,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_reduce_and: {\n    if (!TyA || !TyA->getElementType()->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector of integers */ 6 << Arg->getType();"},{s,18725,"bool Sema::SemaBuiltinNonDeterministicValue(CallExpr *TheCall) {\n  if (!TyArg->isBuiltinType() && !TyArg->isVectorType())\n    return Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*vector, integer or floating point ty*/ 0 << TyArg;"},{s,18744,"ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult) {\n  if (!MType) {\n    Diag(Matrix->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* matrix ty*/ 1 << Matrix->getType();"},{s,18816,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"},{s,18823,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n  } else {\n    if (!ConstantMatrixType::isValidElementType(ElementTy)) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /* pointer to element ty*/ 2 << PtrExpr->getType();"},{s,18924,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!MatrixTy) {\n    Diag(MatrixExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*matrix ty */ 1 << MatrixExpr->getType();"},{s,18944,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"}}
[d]=a,
[c]={cb,1616787805,jb},
[k]={{t,2045,"// Check if \\p Ty is a valid type for the elementwise math builtins. If it is\n// not a valid type, emit an error message and return true. Otherwise return\n// false.\nstatic bool checkMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType Ty) {\n  if (!Ty->getAs<VectorType>() && !ConstantMatrixType::isValidElementType(Ty)) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << 1 << /* vector, integer or float ty*/ 0 << Ty;"},{t,2059,"static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType ArgTy, int ArgIndex) {\n  if (!EltTy->isRealFloatingType()) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << ArgIndex << /* vector or float ty*/ 5 << ArgTy;"},{t,2623,"#include \"clang/Basic/Builtins.def\"\n  // __builtin_elementwise_abs restricts the element type to signed integers or\n  // floating point types only.\n  case Builtin::BI__builtin_elementwise_abs: {\n    if (EltTy->isUnsignedIntegerType()) {\n      Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* signed integer or float ty*/ 3 << ArgTy;"},{t,2692,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_elementwise_sub_sat: {\n    if (!EltTy->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* integer ty */ 6 << ArgTy;"},{t,2741,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_reduce_min: {\n    if (!TyA) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector ty*/ 4 << Arg->getType();"},{t,2763,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_reduce_and: {\n    if (!TyA || !TyA->getElementType()->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector of integers */ 6 << Arg->getType();"},{t,18725,"bool Sema::SemaBuiltinNonDeterministicValue(CallExpr *TheCall) {\n  if (!TyArg->isBuiltinType() && !TyArg->isVectorType())\n    return Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*vector, integer or floating point ty*/ 0 << TyArg;"},{t,18744,"ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult) {\n  if (!MType) {\n    Diag(Matrix->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* matrix ty*/ 1 << Matrix->getType();"},{t,18816,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"},{t,18823,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n  } else {\n    if (!ConstantMatrixType::isValidElementType(ElementTy)) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /* pointer to element ty*/ 2 << PtrExpr->getType();"},{t,18924,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!MatrixTy) {\n    Diag(MatrixExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*matrix ty */ 1 << MatrixExpr->getType();"},{t,18944,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"}},
[o]={
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:28:49: error: 2nd argument must be a pointer to a valid matrix element type (was \'double4x4\' (aka \'double __attribute__((matrix_type(4, 4)))\'))"}
}
},
},
["err_builtin_launder_invalid_arg"]={
["err_builtin_launder_invalid_arg"]={
[f]="... argument to \'__builtin_launder\' is not allowed",
[h]="... argument to \'__builtin_launder\' is not allowed",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{non-pointer|function pointer|void pointer}0 argument to \'__builtin_launder\' is not allowed",
[i]=m,
[i]=m,
[j]="(?:non\\-pointer|function pointer|void pointer) argument to \'__builtin_launder\' is not allowed",
[b]="%select{non-pointer|function pointer|void pointer}0 argument to \'__builtin_launder\' is not allowed",
[b]=a,
[g]=l,
[h]=a,
[f]="(?:non\\-pointer|function pointer|void pointer) argument to \'__builtin_launder\' is not allowed",
[d]={"261875054e5e",1544821888,"[Clang] Add __builtin_launder"},
[e]=a,
[k]={{s,1925,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  if (DiagSelect) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) << *DiagSelect << TheCall->getSourceRange();"}}
[d]=a,
[c]={"261875054e5e",1544821888,"[Clang] Add __builtin_launder"},
[k]={{t,1925,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  if (DiagSelect) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) << *DiagSelect << TheCall->getSourceRange();"}},
[o]={
[pb]={"clang/test/Sema/builtins.c:269:3: error: non-pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:271:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:272:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:276:3: error: function pointer argument to \'__builtin_launder\' is not allowed"}
}
},
},
["err_builtin_longjmp_invalid_val"]={
["err_builtin_longjmp_invalid_val"]={
[h]="argument to __builtin_longjmp must be a constant 1",
[j]=n,
[i]=m,
[b]="argument to __builtin_longjmp must be a constant 1",
[g]=l,
[f]="argument to __builtin_longjmp must be a constant 1",
[f]="argument to __builtin_longjmp must be a constant 1",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="argument to __builtin_longjmp must be a constant 1",
[c]={"7903ca0993a4",1241326928,"Add diagnostic for r70658."},
[i]=m,
[k]={{t,9321,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (Result != 1)\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) << SourceRange(Arg->getBeginLoc(), Arg->getEndLoc());"}}
[j]="argument to __builtin_longjmp must be a constant 1",
[b]=a,
[h]=o,
[d]={"7903ca0993a4",1241326928,"Add diagnostic for r70658."},
[k]={{s,9321,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (Result != 1)\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) << SourceRange(Arg->getBeginLoc(), Arg->getEndLoc());"}}
},
},
["err_builtin_longjmp_unsupported"]={
["err_builtin_longjmp_unsupported"]={
[h]="__builtin_longjmp is not supported for the current target",
[j]=n,
[i]=m,
[b]="__builtin_longjmp is not supported for the current target",
[g]=l,
[f]="__builtin_longjmp is not supported for the current target",
[f]="__builtin_longjmp is not supported for the current target",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="__builtin_longjmp is not supported for the current target",
[c]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/"},
[i]=m,
[k]={{t,9310,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[j]="__builtin_longjmp is not supported for the current target",
[o]={
[b]=a,
["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:27:3: error: __builtin_longjmp is not supported for the current target"}
[h]=o,
}
[d]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/"},
[k]={{s,9310,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}}
},
},
["err_builtin_matrix_disabled"]={
["err_builtin_matrix_disabled"]={
[f]="matrix types extension is disabled. Pass -fenable-matrix to enable it",
[h]="matrix types extension is disabled. Pass -fenable-matrix to enable it",
[c]=l,
[j]=n,
[e]=n,
[g]="matrix types extension is disabled. Pass -fenable-matrix to enable it",
[i]=m,
[i]=m,
[j]="matrix types extension is disabled\\. Pass \\-fenable\\-matrix to enable it",
[b]="matrix types extension is disabled. Pass -fenable-matrix to enable it",
[b]=a,
[g]=l,
[h]=a,
[f]="matrix types extension is disabled\\. Pass \\-fenable\\-matrix to enable it",
[d]={W,1576908663,V},
[e]=a,
[k]={{s,18785,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!getLangOpts().MatrixTypes) {\n    Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled);"},{r,8456,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (!S.getLangOpts().MatrixTypes) {\n    S.Diag(Attr.getLoc(), diag::err_builtin_matrix_disabled);"}}
[d]=a,
[c]={Y,1576908663,X},
[k]={{t,18785,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!getLangOpts().MatrixTypes) {\n    Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled);"},{s,8456,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (!S.getLangOpts().MatrixTypes) {\n    S.Diag(Attr.getLoc(), diag::err_builtin_matrix_disabled);"}},
[o]={
["clang/test/Parser/matrix-type-disabled.c"]={"clang/test/Parser/matrix-type-disabled.c:9:39: error: matrix types extension is disabled. Pass -fenable-matrix to enable it"}
}
},
},
["err_builtin_matrix_invalid_dimension"]={
["err_builtin_matrix_invalid_dimension"]={
[f]="A dimension is outside the allowed range [1, B]",
[h]="A dimension is outside the allowed range [1, B]",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 dimension is outside the allowed range [1, %1]",
[i]=m,
[i]=m,
[j]="(.*?) dimension is outside the allowed range \\[1, (.*?)\\]",
[b]="%0 dimension is outside the allowed range [1, %1]",
[b]=a,
[g]=l,
[h]=a,
[f]="(.*?) dimension is outside the allowed range \\[1, (.*?)\\]",
[d]={T,1582847864,U},
[e]=a,
[k]={{s,18775,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  if (!ConstantMatrixType::isDimensionValid(Dim)) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_invalid_dimension) << Name << ConstantMatrixType::getMaxElementsPerDimension();"}}
[d]=a,
[c]={U,1582847864,W},
[k]={{t,18775,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  if (!ConstantMatrixType::isDimensionValid(Dim)) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_invalid_dimension) << Name << ConstantMatrixType::getMaxElementsPerDimension();"}},
[o]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:67:57: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:69:61: error: column dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:74:7: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:75:7: error: column dimension is outside the allowed range [1, 1048575]"}
}
},
},
["err_builtin_matrix_pointer_arg_mismatch"]={
["err_builtin_matrix_pointer_arg_mismatch"]={
[f]="the pointee of the 2nd argument must match the element type of the 1st argument (A != B)",
[h]="the pointee of the 2nd argument must match the element type of the 1st argument (A != B)",
[c]=l,
[j]=n,
[e]=n,
[g]="the pointee of the 2nd argument must match the element type of the 1st argument (%0 != %1)",
[i]=m,
[i]=m,
[j]="the pointee of the 2nd argument must match the element type of the 1st argument \\((.*?) \\!\\= (.*?)\\)",
[b]="the pointee of the 2nd argument must match the element type of the 1st argument (%0 != %1)",
[b]=a,
[g]=l,
[h]=a,
[f]="the pointee of the 2nd argument must match the element type of the 1st argument \\((.*?) \\!\\= (.*?)\\)",
[d]={T,1582847864,U},
[e]=a,
[k]={{s,18957,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n  } else {\n    if (MatrixTy && !Context.hasSameType(ElementTy, MatrixTy->getElementType())) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_pointer_arg_mismatch) << ElementTy << MatrixTy->getElementType();"}}
[d]=a,
[c]={U,1582847864,W},
[k]={{t,18957,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n  } else {\n    if (MatrixTy && !Context.hasSameType(ElementTy, MatrixTy->getElementType())) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_pointer_arg_mismatch) << ElementTy << MatrixTy->getElementType();"}},
[o]={
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:49: error: the pointee of the 2nd argument must match the element type of the 1st argument (\'float\' != \'double\')"}
}
},
},
["err_builtin_matrix_scalar_unsigned_arg"]={
["err_builtin_matrix_scalar_unsigned_arg"]={
[f]="A argument must be a constant unsigned integer expression",
[h]="A argument must be a constant unsigned integer expression",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 argument must be a constant unsigned integer expression",
[i]=m,
[i]=m,
[j]="(.*?) argument must be a constant unsigned integer expression",
[b]="%0 argument must be a constant unsigned integer expression",
[b]=a,
[g]=l,
[h]=a,
[f]="(.*?) argument must be a constant unsigned integer expression",
[d]={T,1582847864,U},
[e]=a,
[k]={{s,18769,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  if (!Value) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_scalar_unsigned_arg) << Name;"}}
[d]=a,
[c]={U,1582847864,W},
[k]={{t,18769,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  if (!Value) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_scalar_unsigned_arg) << Name;"}},
[o]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:81:7: error: column argument must be a constant unsigned integer expression"}
}
},
},
["err_builtin_matrix_store_to_const"]={
["err_builtin_matrix_store_to_const"]={
[f]="cannot store matrix to read-only pointer",
[h]="cannot store matrix to read-only pointer",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot store matrix to read-only pointer",
[i]=m,
[i]=m,
[j]="cannot store matrix to read\\-only pointer",
[b]="cannot store matrix to read-only pointer",
[b]=a,
[g]=l,
[h]=a,
[f]="cannot store matrix to read\\-only pointer",
[d]={T,1582847864,U},
[e]=a,
[k]={{s,18950,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n  } else {\n    if (ElementTy.isConstQualified()) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_store_to_const);"}}
[d]=a,
[c]={U,1582847864,W},
[k]={{t,18950,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  if (!PtrTy) {\n  } else {\n    if (ElementTy.isConstQualified()) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_store_to_const);"}},
[o]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:112:44: error: cannot store matrix to read-only pointer"}
}
},
},
["err_builtin_matrix_stride_too_small"]={
["err_builtin_matrix_stride_too_small"]={
[h]="stride must be greater or equal to the number of rows",
[j]=n,
[i]=m,
[b]="stride must be greater or equal to the number of rows",
[g]=l,
[f]="stride must be greater or equal to the number of rows",
[f]="stride must be greater or equal to the number of rows",
[c]=l,
[e]=a,
[e]=n,
[d]=a,
[g]="stride must be greater or equal to the number of rows",
[c]={U,1582847864,W},
[i]=m,
[k]={{t,18884,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (MaybeRows) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      if (Stride < *MaybeRows) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"},{t,18984,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // Check stride argument.\n  if (MatrixTy) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      if (Stride < MatrixTy->getNumRows()) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"}},
[j]="stride must be greater or equal to the number of rows",
[o]={
[b]=a,
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:54: error: stride must be greater or equal to the number of rows"}
[h]=a,
}
[d]={T,1582847864,U},
[k]={{s,18884,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (MaybeRows) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      if (Stride < *MaybeRows) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"},{s,18984,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // Check stride argument.\n  if (MatrixTy) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      if (Stride < MatrixTy->getNumRows()) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"}}
},
},
["err_builtin_move_forward_unsupported"]={
["err_builtin_move_forward_unsupported"]={
[f]="unsupported signature for A",
[h]="unsupported signature for A",
[c]=l,
[j]=n,
[e]=n,
[g]="unsupported signature for %q0",
[i]=m,
[i]=m,
[j]="unsupported signature for (.*?)",
[b]="unsupported signature for %q0",
[b]=a,
[g]=l,
[h]=o,
[f]="unsupported signature for (.*?)",
[d]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[e]=a,
[k]={{s,2512,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BIas_const: {\n    if (!(Param->isReferenceType() && (ReturnsPointer ? Result->isAnyPointerType() : Result->isReferenceType()) && Context.hasSameUnqualifiedType(Param->getPointeeType(), Result->getPointeeType()))) {\n      Diag(TheCall->getBeginLoc(), diag::err_builtin_move_forward_unsupported) << FDecl;"}}
[d]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{t,2512,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BIas_const: {\n    if (!(Param->isReferenceType() && (ReturnsPointer ? Result->isAnyPointerType() : Result->isReferenceType()) && Context.hasSameUnqualifiedType(Param->getPointeeType(), Result->getPointeeType()))) {\n      Diag(TheCall->getBeginLoc(), diag::err_builtin_move_forward_unsupported) << FDecl;"}},
[o]={
["clang/test/SemaCXX/builtin-std-move.cpp"]={"clang/test/SemaCXX/builtin-std-move.cpp:169:21: error: unsupported signature for \'std::move<int>\'"}
}
},
},
["err_builtin_needs_feature"]={
["err_builtin_needs_feature"]={
[f]="A needs target feature B",
[h]="A needs target feature B",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 needs target feature %1",
[i]=m,
[i]=m,
[j]="(.*?) needs target feature (.*?)",
[b]="%0 needs target feature %1",
[b]=a,
[g]=l,
[h]=a,
[f]="(.*?) needs target feature (.*?)",
[d]={"15709991d09d",1444952831,"Add an error when calling a builtin that requires features that don\'t"},
[e]=a,
[k]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2603,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n  if (BuiltinID) {\n    if (!Builtin::evaluateRequiredTargetFeatures(FeatureList, CallerFeatureMap)) {\n      CGM.getDiags().Report(Loc, diag::err_builtin_needs_feature) << TargetDecl->getDeclName() << FeatureList;"}}
[d]=a,
[c]={"15709991d09d",1444952831,"Add an error when calling a builtin that requires features that don\'t"},
[k]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2603,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n  if (BuiltinID) {\n    if (!Builtin::evaluateRequiredTargetFeatures(FeatureList, CallerFeatureMap)) {\n      CGM.getDiags().Report(Loc, diag::err_builtin_needs_feature) << TargetDecl->getDeclName() << FeatureList;"}},
[o]={
["clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl"]={"clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:13:15: error: \'__builtin_amdgcn_global_atomic_fadd_v2f16\' needs target feature atomic-buffer-global-pk-add-f16-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:14:13: error: \'__builtin_amdgcn_global_atomic_fadd_f32\' needs target feature atomic-fadd-rtn-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:15:10: error: \'__builtin_amdgcn_global_atomic_fadd_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:16:10: error: \'__builtin_amdgcn_global_atomic_fmax_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:17:10: error: \'__builtin_amdgcn_global_atomic_fmin_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:18:10: error: \'__builtin_amdgcn_flat_atomic_fadd_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:19:10: error: \'__builtin_amdgcn_flat_atomic_fmin_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:20:10: error: \'__builtin_amdgcn_flat_atomic_fmax_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:21:3: error: \'__builtin_amdgcn_ds_atomic_fadd_v2f16\' needs target feature atomic-ds-pk-add-16-insts"}
}
},
},
["err_builtin_operator_new_delete_not_usual"]={
["err_builtin_operator_new_delete_not_usual"]={
[f]="call to \'...\' selects non-usual ... function",
[h]="call to \'...\' selects non-usual ... function",
[c]=l,
[j]=n,
[e]=n,
[g]="call to \'%select{__builtin_operator_new|__builtin_operator_delete}0\' selects non-usual %select{allocation|deallocation}0 function",
[i]=m,
[i]=m,
[j]="call to \'(?:__builtin_operator_new|__builtin_operator_delete)\' selects non\\-usual (?:allocation|deallocation) function",
[b]="call to \'%select{__builtin_operator_new|__builtin_operator_delete}0\' selects non-usual %select{allocation|deallocation}0 function",
[b]=a,
[g]=l,
[h]=o,
[f]="call to \'(?:__builtin_operator_new|__builtin_operator_delete)\' selects non\\-usual (?:allocation|deallocation) function",
[d]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati..."},
[e]=a,
[k]={{x,3859,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  case OR_Success: {\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(R.getNameLoc(), diag::err_builtin_operator_new_delete_not_usual) << (IsDelete ? 1 : 0) << Range;"}}
[d]=p,
[c]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati..."},
[k]={{y,3859,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  case OR_Success: {\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(R.getNameLoc(), diag::err_builtin_operator_new_delete_not_usual) << (IsDelete ? 1 : 0) << Range;"}},
[o]={
["clang/test/SemaCXX/builtin-operator-new-delete.cpp"]={"clang/test/SemaCXX/builtin-operator-new-delete.cpp:93:13: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:94:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:112:3: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:113:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function"}
}
},
},
["err_builtin_pass_in_regs_non_class"]={
["err_builtin_pass_in_regs_non_class"]={
[f]="argument A is not an unqualified class type",
[h]="argument A is not an unqualified class type",
[c]=l,
[j]=n,
[e]=n,
[g]="argument %0 is not an unqualified class type",
[i]=m,
[i]=m,
[j]="argument (.*?) is not an unqualified class type",
[b]="argument %0 is not an unqualified class type",
[b]=a,
[g]=l,
[h]=a,
[f]="argument (.*?) is not an unqualified class type",
[d]={N,1625925174,M},
[e]=a,
[k]={{x,5393,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n  case UTT_CanPassInRegs:\n    Self.Diag(KeyLoc, diag::err_builtin_pass_in_regs_non_class) << T;"}}
[d]=a,
[c]={N,1625925174,O},
[k]={{y,5393,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n  case UTT_CanPassInRegs:\n    Self.Diag(KeyLoc, diag::err_builtin_pass_in_regs_non_class) << T;"}},
[o]={
["clang/test/SemaCXX/type-traits.cpp"]={"clang/test/SemaCXX/type-traits.cpp:3505:9: error: argument \'const A\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3506:9: error: argument \'A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3507:9: error: argument \'A &&\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3508:9: error: argument \'const A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3510:9: error: argument \'int\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3511:9: error: argument \'int &\' is not an unqualified class type"}
}
},
},
["err_builtin_redeclare"]={
["err_builtin_redeclare"]={
[f]="cannot redeclare builtin function A",
[h]="cannot redeclare builtin function A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot redeclare builtin function %0",
[i]=m,
[i]=m,
[j]="cannot redeclare builtin function (.*?)",
[b]="cannot redeclare builtin function %0",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot redeclare builtin function (.*?)",
[d]={"41af97137572",1523914208,"Limit types of builtins that can be redeclared."},
[e]=a,
[k]={{q,3678,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName();"}}
[d]=p,
[c]={"41af97137572",1523914208,"Limit types of builtins that can be redeclared."},
[k]={{r,3678,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName();"}},
[o]={
["clang/test/Sema/crash-invalid-builtin.c"]={"clang/test/Sema/crash-invalid-builtin.c:4:1: error: cannot redeclare builtin function \'__builtin_isinf\'"}
}
},
},
["err_builtin_requires_language"]={
["err_builtin_requires_language"]={
[f]="\'A\' is only available in B",
[h]="\'A\' is only available in B",
[c]=l,
[j]=n,
[e]=n,
[g]="\'%0\' is only available in %1",
[i]=m,
[i]=m,
[j]="\'(.*?)\' is only available in (.*?)",
[b]="\'%0\' is only available in %1",
[b]=a,
[g]=l,
[h]=o,
[f]="\'(.*?)\' is only available in (.*?)",
[d]={"760520bcb78d",1401838064,"Add __builtin_operator_new and __builtin_operator_delete, which act like calls"},
[e]=a,
[k]={{x,3902,"ExprResult Sema::SemaBuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult, bool IsDelete) {\n  if (!getLangOpts().CPlusPlus) {\n    Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language) << (IsDelete ? \"__builtin_operator_delete\" : \"__builtin_operator_new\") << \"C++\";"}}
[d]=p,
[c]={"760520bcb78d",1401838064,"Add __builtin_operator_new and __builtin_operator_delete, which act like calls"},
[k]={{y,3902,"ExprResult Sema::SemaBuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult, bool IsDelete) {\n  if (!getLangOpts().CPlusPlus) {\n    Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language) << (IsDelete ? \"__builtin_operator_delete\" : \"__builtin_operator_new\") << \"C++\";"}},
[o]={
[pb]={"clang/test/Sema/builtins.c:216:3: error: \'__builtin_operator_new\' is only available in C++","clang/test/Sema/builtins.c:217:3: error: \'__builtin_operator_delete\' is only available in C++"}
}
},
},
["err_builtin_setjmp_unsupported"]={
["err_builtin_setjmp_unsupported"]={
[h]="__builtin_setjmp is not supported for the current target",
[j]=n,
[i]=m,
[b]="__builtin_setjmp is not supported for the current target",
[g]=l,
[f]="__builtin_setjmp is not supported for the current target",
[f]="__builtin_setjmp is not supported for the current target",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="__builtin_setjmp is not supported for the current target",
[c]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/"},
[i]=m,
[k]={{t,9331,"/// SemaBuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).\n/// This checks that the target supports __builtin_setjmp.\nbool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[j]="__builtin_setjmp is not supported for the current target",
[o]={
[b]=a,
["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:33:8: error: __builtin_setjmp is not supported for the current target"}
[h]=o,
}
[d]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/"},
[k]={{s,9331,"/// SemaBuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).\n/// This checks that the target supports __builtin_setjmp.\nbool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}}
},
},
["err_builtin_target_unsupported"]={
["err_builtin_target_unsupported"]={
[h]="builtin is not supported on this target",
[j]=n,
[i]=m,
[b]="builtin is not supported on this target",
[g]=l,
[f]="builtin is not supported on this target",
[f]="builtin is not supported on this target",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="builtin is not supported on this target",
[c]={"aa46ed927860",1528407544,"[MS] Re-add support for the ARM interlocked bittest intrinscs"},
[i]=m,
[k]={{t,1962,"// Emit an error and return true if the current object format type is in the\n// list of unsupported types.\nstatic bool CheckBuiltinTargetNotInUnsupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ObjectFormatType> UnsupportedObjectFormatTypes) {\n  if (llvm::is_contained(UnsupportedObjectFormatTypes, CurObjFormat)) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{t,1978,"// Emit an error and return true if the current architecture is not in the list\n// of supported architectures.\nstatic bool CheckBuiltinTargetInSupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ArchType> SupportedArchs) {\n  S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{t,8577,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().checkArithmeticFenceSupported())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[j]="builtin is not supported on this target",
[o]={
[b]=a,
["clang/test/Sema/builtin_set_flt_rounds.c"]={"clang/test/Sema/builtin_set_flt_rounds.c:5:3: error: builtin is not supported on this target"}
[h]=o,
}
[d]={"aa46ed927860",1528407544,"[MS] Re-add support for the ARM interlocked bittest intrinscs"},
[k]={{s,1962,"// Emit an error and return true if the current object format type is in the\n// list of unsupported types.\nstatic bool CheckBuiltinTargetNotInUnsupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ObjectFormatType> UnsupportedObjectFormatTypes) {\n  if (llvm::is_contained(UnsupportedObjectFormatTypes, CurObjFormat)) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{s,1978,"// Emit an error and return true if the current architecture is not in the list\n// of supported architectures.\nstatic bool CheckBuiltinTargetInSupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ArchType> SupportedArchs) {\n  S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{s,8577,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().checkArithmeticFenceSupported())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}}
},
},
["err_builtin_x64_aarch64_only"]={
["err_builtin_x64_aarch64_only"]={
[f]="this builtin is only available on x86-64 and aarch64 targets",
[h]="this builtin is only available on x86-64 and aarch64 targets",
[c]=l,
[j]=n,
[e]=n,
[g]="this builtin is only available on x86-64 and aarch64 targets",
[i]=m,
[i]=m,
[j]="this builtin is only available on x86\\-64 and aarch64 targets",
[b]="this builtin is only available on x86-64 and aarch64 targets",
[b]=a,
[g]=l,
[h]=o,
[f]="this builtin is only available on x86\\-64 and aarch64 targets",
[d]={"022e782e7576",1500324585,"[AArch64] Add support for __builtin_ms_va_list on aarch64"},
[e]=a,
[k]={{s,8059,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n  if (IsMSVAStart)\n    return S.Diag(Fn->getBeginLoc(), diag::err_builtin_x64_aarch64_only);"}}
[d]=p,
[c]={"022e782e7576",1500324585,"[AArch64] Add support for __builtin_ms_va_list on aarch64"},
[k]={{t,8059,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n  if (IsMSVAStart)\n    return S.Diag(Fn->getBeginLoc(), diag::err_builtin_x64_aarch64_only);"}},
[o]={
["clang/test/Sema/varargs-x86-32.c"]={"clang/test/Sema/varargs-x86-32.c:4:3: error: this builtin is only available on x86-64 and aarch64 targets"}
}
},
},
["err_c11_noreturn_misplaced"]={
["err_c11_noreturn_misplaced"]={
[h]="\'_Noreturn\' keyword must precede function declarator",
[j]=n,
[i]=m,
[b]="\'_Noreturn\' keyword must precede function declarator",
[g]=l,
[f]="\'_Noreturn\' keyword must precede function declarator",
[f]="\'_Noreturn\' keyword must precede function declarator",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="\'_Noreturn\' keyword must precede function declarator",
[c]={"99c464c3f377",1415653832,"Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when..."},
[i]=m,
[k]={{E,2155,"/// ParseDeclGroup - Having concluded that this is either a function\n/// definition or a group of object declarations, actually parse the\n/// result.\nParser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, DeclaratorContext Context, ParsedAttributes &Attrs, SourceLocation *DeclEnd, ForRangeInit *FRI) {\n  if (D.isFunctionDeclarator()) {\n    // The _Noreturn keyword can\'t appear here, unlike the GNU noreturn\n    // attribute. If we find the keyword here, tell the user to put it\n    // at the start instead.\n    if (Tok.is(tok::kw__Noreturn)) {\n      Diag(Loc, diag::err_c11_noreturn_misplaced) << (Fixit ? FixItHint::CreateRemoval(Loc) : FixItHint()) << (Fixit ? FixItHint::CreateInsertion(D.getBeginLoc(), \"_Noreturn \") : FixItHint());"}},
[j]="\'_Noreturn\' keyword must precede function declarator",
[o]={
[b]=a,
["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:7:13: error: \'_Noreturn\' keyword must precede function declarator"}
[h]=B,
}
[d]={"99c464c3f377",1415653832,"Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when..."},
[k]={{D,2155,"/// ParseDeclGroup - Having concluded that this is either a function\n/// definition or a group of object declarations, actually parse the\n/// result.\nParser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, DeclaratorContext Context, ParsedAttributes &Attrs, SourceLocation *DeclEnd, ForRangeInit *FRI) {\n  if (D.isFunctionDeclarator()) {\n    // The _Noreturn keyword can\'t appear here, unlike the GNU noreturn\n    // attribute. If we find the keyword here, tell the user to put it\n    // at the start instead.\n    if (Tok.is(tok::kw__Noreturn)) {\n      Diag(Loc, diag::err_c11_noreturn_misplaced) << (Fixit ? FixItHint::CreateRemoval(Loc) : FixItHint()) << (Fixit ? FixItHint::CreateInsertion(D.getBeginLoc(), \"_Noreturn \") : FixItHint());"}}
},
},
["err_c99_array_usage_cxx"]={
["err_c99_array_usage_cxx"]={
[f]="...array size ...is a C99 feature, not permitted in C++",
[h]="...array size ...is a C99 feature, not permitted in C++",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{qualifier in |static |}0array size %select{||\'[*] \'}0is a C99 feature, not permitted in C++",
[i]=m,
[i]=m,
[j]="(?:qualifier in |static |)array size (?:||\'\\[\\*\\] \')is a C99 feature, not permitted in C\\+\\+",
[b]="%select{qualifier in |static |}0array size %select{||\'[*] \'}0is a C99 feature, not permitted in C++",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:qualifier in |static |)array size (?:||\'\\[\\*\\] \')is a C99 feature, not permitted in C\\+\\+",
[d]={"73341c4e6319",1252628338,"Diagnose VLAs as an error in C++."},
[e]=a,
[k]={{r,2680,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // If this is not C99, diagnose array size modifiers on non-VLAs.\n  if (!getLangOpts().C99 && !T->isVariableArrayType() && (ASM != ArrayType::Normal || Quals != 0)) {\n    Diag(Loc, getLangOpts().CPlusPlus ? diag::err_c99_array_usage_cxx : diag::ext_c99_array_usage) << ASM;"}}
[d]=p,
[c]={"73341c4e6319",1252628338,"Diagnose VLAs as an error in C++."},
[k]={{s,2680,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // If this is not C99, diagnose array size modifiers on non-VLAs.\n  if (!getLangOpts().C99 && !T->isVariableArrayType() && (ASM != ArrayType::Normal || Quals != 0)) {\n    Diag(Loc, getLangOpts().CPlusPlus ? diag::err_c99_array_usage_cxx : diag::ext_c99_array_usage) << ASM;"}},
[o]={
["clang/test/SemaCXX/attr-gnu.cpp"]={"clang/test/SemaCXX/attr-gnu.cpp:13:13: error: static array size is a C99 feature, not permitted in C++"}
}
},
},
["err_call_function_incomplete_return"]={
["err_call_function_incomplete_return"]={
[f]="calling A with incomplete return type B",
[h]="calling A with incomplete return type B",
[c]=l,
[j]=n,
[e]=n,
[g]="calling %0 with incomplete return type %1",
[i]=m,
[i]=m,
[j]="calling (.*?) with incomplete return type (.*?)",
[b]="calling %0 with incomplete return type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="calling (.*?) with incomplete return type (.*?)",
[d]={"7f84ed928721",1255132315,"Add CheckCallReturnType and start using it for regular call expressions. This will improve error mes..."},
[e]=a,
[k]={{y,20821,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      S.Diag(Loc, diag::err_call_function_incomplete_return) << CE->getSourceRange() << FD << T;"}}
[d]=p,
[c]={"7f84ed928721",1255132315,"Add CheckCallReturnType and start using it for regular call expressions. This will improve error mes..."},
[k]={{z,20821,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      S.Diag(Loc, diag::err_call_function_incomplete_return) << CE->getSourceRange() << FD << T;"}},
[o]={
["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:10:3: error: calling \'a\' with incomplete return type \'struct foo\'"}
}
},
},
["err_call_incomplete_argument"]={
["err_call_incomplete_argument"]={
[f]="argument type A is incomplete",
[h]="argument type A is incomplete",
[c]=l,
[j]=n,
[e]=n,
[g]="argument type %0 is incomplete",
[i]=m,
[i]=m,
[j]="argument type (.*?) is incomplete",
[b]="argument type %0 is incomplete",
[b]=a,
[g]=l,
[h]=o,
[f]="argument type (.*?) is incomplete",
[d]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete."},
[e]=a,
[k]={{y,1092,"/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but\n/// will create a trap if the resulting type is not a POD type.\nExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, FunctionDecl *FDecl) {\n  if (!getLangOpts().CPlusPlus && RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_call_incomplete_argument))"},{y,6655,"bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, const FunctionProtoType *Proto, unsigned FirstParam, ArrayRef<Expr *> Args, SmallVectorImpl<Expr *> &AllArgs, VariadicCallType CallType, bool AllowExplicit, bool IsListInitialization) {\n  // Continue to check argument types (even if we have too few/many args).\n  for (unsigned i = FirstParam; i < NumParams; i++) {\n    if (ArgIx < Args.size()) {\n      if (RequireCompleteType(Arg->getBeginLoc(), ProtoArgType, diag::err_call_incomplete_argument, Arg))"},{y,7594,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  if (Proto) {\n  } else {\n    // Promote the arguments (C99 6.5.2.2p6).\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      if (RequireCompleteType(Arg->getBeginLoc(), Arg->getType(), diag::err_call_incomplete_argument, Arg))"},{G,1861,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  for (unsigned i = 0; i < NumNamedArgs; i++) {\n    if (RequireCompleteType(argExpr->getSourceRange().getBegin(), paramType, diag::err_call_incomplete_argument, argExpr))"},{E,6837,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  if (IsExtraneousCopy) {\n    // Instantiate the default arguments of any extra parameters in\n    // the selected copy constructor, as if we were going to create a\n    // proper call to the copy constructor.\n    for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) {\n      if (S.RequireCompleteType(Loc, Parm->getType(), diag::err_call_incomplete_argument))"}}
[d]=p,
[c]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete."},
[k]={{z,1092,"/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but\n/// will create a trap if the resulting type is not a POD type.\nExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, FunctionDecl *FDecl) {\n  if (!getLangOpts().CPlusPlus && RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_call_incomplete_argument))"},{z,6655,"bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, const FunctionProtoType *Proto, unsigned FirstParam, ArrayRef<Expr *> Args, SmallVectorImpl<Expr *> &AllArgs, VariadicCallType CallType, bool AllowExplicit, bool IsListInitialization) {\n  // Continue to check argument types (even if we have too few/many args).\n  for (unsigned i = FirstParam; i < NumParams; i++) {\n    if (ArgIx < Args.size()) {\n      if (RequireCompleteType(Arg->getBeginLoc(), ProtoArgType, diag::err_call_incomplete_argument, Arg))"},{z,7594,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  if (Proto) {\n  } else {\n    // Promote the arguments (C99 6.5.2.2p6).\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      if (RequireCompleteType(Arg->getBeginLoc(), Arg->getType(), diag::err_call_incomplete_argument, Arg))"},{F,1861,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  for (unsigned i = 0; i < NumNamedArgs; i++) {\n    if (RequireCompleteType(argExpr->getSourceRange().getBegin(), paramType, diag::err_call_incomplete_argument, argExpr))"},{H,6837,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  if (IsExtraneousCopy) {\n    // Instantiate the default arguments of any extra parameters in\n    // the selected copy constructor, as if we were going to create a\n    // proper call to the copy constructor.\n    for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) {\n      if (S.RequireCompleteType(Loc, Parm->getType(), diag::err_call_incomplete_argument))"}},
[o]={
["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:11:5: error: argument type \'struct foo\' is incomplete","clang/test/Sema/incomplete-call.c:12:5: error: argument type \'struct foo\' is incomplete"}
}
},
},
["err_call_incomplete_return"]={
["err_call_incomplete_return"]={
[f]="calling function with incomplete return type A",
[h]="calling function with incomplete return type A",
[c]=l,
[j]=n,
[e]=n,
[g]="calling function with incomplete return type %0",
[i]=m,
[i]=m,
[j]="calling function with incomplete return type (.*?)",
[b]="calling function with incomplete return type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="calling function with incomplete return type (.*?)",
[d]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete."},
[e]=a,
[k]={{y,20819,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      if (!FD) {\n        S.Diag(Loc, diag::err_call_incomplete_return) << T << CE->getSourceRange();"}}
[d]=p,
[c]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete."},
[k]={{z,20819,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      if (!FD) {\n        S.Diag(Loc, diag::err_call_incomplete_return) << T << CE->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/incomplete-call.cpp"]={"clang/test/SemaCXX/incomplete-call.cpp:23:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:24:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:41:7: error: calling function with incomplete return type \'A\'"}
}
},
},
["err_callback_attribute_argument_unknown"]={
["err_callback_attribute_argument_unknown"]={
[f]="\'callback\' attribute argument A is not a known function parameter",
[h]="\'callback\' attribute argument A is not a known function parameter",
[c]=l,
[j]=n,
[e]=n,
[g]="\'callback\' attribute argument %0 is not a known function parameter",
[i]=m,
[i]=m,
[j]="\'callback\' attribute argument (.*?) is not a known function parameter",
[b]="\'callback\' attribute argument %0 is not a known function parameter",
[b]=a,
[g]=l,
[h]=o,
[f]="\'callback\' attribute argument (.*?) is not a known function parameter",
[d]={nb,1547876214,mb},
[e]=a,
[k]={{p,4084,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (AL.isArgIdent(I)) {\n      if (It == UnknownName) {\n        S.Diag(AL.getLoc(), diag::err_callback_attribute_argument_unknown) << IdLoc->Ident << IdLoc->Loc;"}}
[d]=p,
[c]={qb,1547876214,sb},
[k]={{q,4084,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (AL.isArgIdent(I)) {\n      if (It == UnknownName) {\n        S.Diag(AL.getLoc(), diag::err_callback_attribute_argument_unknown) << IdLoc->Ident << IdLoc->Loc;"}},
[o]={
[xb]={"clang/test/Sema/attr-callback-broken.c:42:16: error: \'callback\' attribute argument \'cb\' is not a known function parameter","clang/test/Sema/attr-callback-broken.c:43:16: error: \'callback\' attribute argument \'ab\' is not a known function parameter"}
}
},
},
["err_callback_attribute_invalid_callee"]={
["err_callback_attribute_invalid_callee"]={
[h]="\'callback\' attribute specifies invalid callback callee",
[j]=n,
[i]=m,
[b]="\'callback\' attribute specifies invalid callback callee",
[g]=l,
[f]="\'callback\' attribute specifies invalid callback callee",
[f]="\'callback\' attribute specifies invalid callback callee",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'callback\' attribute specifies invalid callback callee",
[c]={qb,1547876214,sb},
[i]=m,
[k]={{q,4133,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check if the callee index is proper, thus not \"this\" and not \"unknown\".\n  // This means the \"CalleeIdx\" has to be non-negative if \"HasImplicitThisParam\"\n  // is false and positive if \"HasImplicitThisParam\" is true.\n  if (CalleeIdx < (int)HasImplicitThisParam) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_invalid_callee) << AL.getRange();"}},
[j]="\'callback\' attribute specifies invalid callback callee",
[o]={
[b]=a,
[xb]={"clang/test/Sema/attr-callback-broken.c:13:16: error: \'callback\' attribute specifies invalid callback callee","clang/test/Sema/attr-callback-broken.c:53:16: error: \'callback\' attribute specifies invalid callback callee"}
[h]=o,
}
[d]={nb,1547876214,mb},
[k]={{p,4133,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check if the callee index is proper, thus not \"this\" and not \"unknown\".\n  // This means the \"CalleeIdx\" has to be non-negative if \"HasImplicitThisParam\"\n  // is false and positive if \"HasImplicitThisParam\" is true.\n  if (CalleeIdx < (int)HasImplicitThisParam) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_invalid_callee) << AL.getRange();"}}
},
},
["err_callback_attribute_multiple"]={
["err_callback_attribute_multiple"]={
[h]="multiple \'callback\' attributes specified",
[j]=n,
[i]=m,
[b]="multiple \'callback\' attributes specified",
[g]=l,
[f]="multiple \'callback\' attributes specified",
[f]="multiple \'callback\' attributes specified",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="multiple \'callback\' attributes specified",
[c]={qb,1547876214,sb},
[i]=m,
[k]={{q,4180,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Do not allow multiple callback attributes.\n  if (D->hasAttr<CallbackAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_multiple) << AL.getRange();"}},
[j]="multiple \'callback\' attributes specified",
[o]={
[b]=a,
[xb]={"clang/test/Sema/attr-callback-broken.c:20:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:21:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:55:52: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:56:45: error: multiple \'callback\' attributes specified"}
[h]=o,
}
[d]={nb,1547876214,mb},
[k]={{p,4180,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Do not allow multiple callback attributes.\n  if (D->hasAttr<CallbackAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_multiple) << AL.getRange();"}}
},
},
["err_callback_attribute_no_callee"]={
["err_callback_attribute_no_callee"]={
[h]="\'callback\' attribute specifies no callback callee",
[j]=n,
[i]=m,
[b]="\'callback\' attribute specifies no callback callee",
[g]=l,
[f]="\'callback\' attribute specifies no callback callee",
[f]="\'callback\' attribute specifies no callback callee",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'callback\' attribute specifies no callback callee",
[c]={qb,1547876214,sb},
[i]=m,
[k]={{q,4053,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The index that identifies the callback callee is mandatory.\n  if (AL.getNumArgs() == 0) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_no_callee) << AL.getRange();"}},
[j]="\'callback\' attribute specifies no callback callee",
[o]={
[b]=a,
[xb]={"clang/test/Sema/attr-callback-broken.c:3:16: error: \'callback\' attribute specifies no callback callee"}
[h]=o,
}
[d]={nb,1547876214,mb},
[k]={{p,4053,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The index that identifies the callback callee is mandatory.\n  if (AL.getNumArgs() == 0) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_no_callee) << AL.getRange();"}}
},
},
["err_callback_callee_is_variadic"]={
["err_callback_callee_is_variadic"]={
[h]="\'callback\' attribute callee may not be variadic",
[j]=n,
[i]=m,
[b]="\'callback\' attribute callee may not be variadic",
[g]=l,
[f]="\'callback\' attribute callee may not be variadic",
[f]="\'callback\' attribute callee may not be variadic",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'callback\' attribute callee may not be variadic",
[c]={qb,1547876214,sb},
[i]=m,
[k]={{q,4174,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (CalleeFnProtoType->isVariadic()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_is_variadic) << AL.getRange();"}},
[j]="\'callback\' attribute callee may not be variadic",
[o]={
[b]=a,
[xb]={"clang/test/Sema/attr-callback-broken.c:33:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:34:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:68:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:69:16: error: \'callback\' attribute callee may not be variadic"}
[h]=o,
}
[d]={nb,1547876214,mb},
[k]={{p,4174,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (CalleeFnProtoType->isVariadic()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_is_variadic) << AL.getRange();"}}
},
},
["err_callback_callee_no_function_type"]={
["err_callback_callee_no_function_type"]={
[h]="\'callback\' attribute callee does not have function type",
[j]=n,
[i]=m,
[b]="\'callback\' attribute callee does not have function type",
[g]=l,
[f]="\'callback\' attribute callee does not have function type",
[f]="\'callback\' attribute callee does not have function type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'callback\' attribute callee does not have function type",
[c]={qb,1547876214,sb},
[i]=m,
[k]={{q,4144,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CalleeType || !CalleeType->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"},{q,4156,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CalleeFnProtoType) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"}}
[j]="\'callback\' attribute callee does not have function type",
[b]=a,
[h]=o,
[d]={nb,1547876214,mb},
[k]={{p,4144,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CalleeType || !CalleeType->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"},{p,4156,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CalleeFnProtoType) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"}}
},
},
["err_callback_implicit_this_not_available"]={
["err_callback_implicit_this_not_available"]={
[f]="\'callback\' argument at position A references unavailable implicit \'this\'",
[h]="\'callback\' argument at position A references unavailable implicit \'this\'",
[c]=l,
[j]=n,
[e]=n,
[g]="\'callback\' argument at position %0 references unavailable implicit \'this\'",
[i]=m,
[i]=m,
[j]="\'callback\' argument at position (.*?) references unavailable implicit \'this\'",
[b]="\'callback\' argument at position %0 references unavailable implicit \'this\'",
[b]=a,
[g]=l,
[h]=o,
[f]="\'callback\' argument at position (.*?) references unavailable implicit \'this\'",
[d]={nb,1547876214,mb},
[e]=a,
[k]={{p,4115,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (ArgIdx == 0 && !HasImplicitThisParam) {\n      S.Diag(AL.getLoc(), diag::err_callback_implicit_this_not_available) << (I + 1) << SR;"}}
[d]=p,
[c]={qb,1547876214,sb},
[k]={{q,4115,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    if (ArgIdx == 0 && !HasImplicitThisParam) {\n      S.Diag(AL.getLoc(), diag::err_callback_implicit_this_not_available) << (I + 1) << SR;"}},
[o]={
[xb]={"clang/test/Sema/attr-callback-broken.c:26:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:27:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:28:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:61:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:62:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:63:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'"}
}
},
},
["err_called_once_attribute_wrong_type"]={
["err_called_once_attribute_wrong_type"]={
[f]="\'called_once\' attribute only applies to function-like parameters",
[h]="\'called_once\' attribute only applies to function-like parameters",
[c]=l,
[j]=n,
[e]=n,
[g]="\'called_once\' attribute only applies to function-like parameters",
[i]=m,
[i]=m,
[j]="\'called_once\' attribute only applies to function\\-like parameters",
[b]="\'called_once\' attribute only applies to function-like parameters",
[b]=a,
[g]=l,
[h]=o,
[f]="\'called_once\' attribute only applies to function\\-like parameters",
[d]={fb,1590001902,eb},
[e]=a,
[k]={{p,4201,"/// Handle \'called_once\' attribute.\nstatic void handleCalledOnceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionLike(*T)) {\n    S.Diag(AL.getLoc(), diag::err_called_once_attribute_wrong_type);"}}
[d]=p,
[c]={fb,1590001902,gb},
[k]={{q,4201,"/// Handle \'called_once\' attribute.\nstatic void handleCalledOnceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionLike(*T)) {\n    S.Diag(AL.getLoc(), diag::err_called_once_attribute_wrong_type);"}},
[o]={
["clang/test/SemaObjC/attr-called-once.m"]={"clang/test/SemaObjC/attr-called-once.m:5:18: error: \'called_once\' attribute only applies to function-like parameters","clang/test/SemaObjC/attr-called-once.m:6:21: error: \'called_once\' attribute only applies to function-like parameters"}
}
},
},
["err_cannot_find_suitable_accessor"]={
["err_cannot_find_suitable_accessor"]={
[f]="cannot find suitable ... for property A",
[h]="cannot find suitable ... for property A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot find suitable %select{getter|setter}0 for property %1",
[i]=m,
[i]=m,
[j]="cannot find suitable (?:getter|setter) for property (.*?)",
[b]="cannot find suitable %select{getter|setter}0 for property %1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot find suitable (?:getter|setter) for property (.*?)",
[d]={ub,1480718311,yb},
[e]=a,
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",1487,"ExprResult MSPropertyOpBuilder::buildGet() {\n  if (GetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 0 /* getter */"},{"clang/lib/Sema/SemaPseudoObject.cpp",1516,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  if (SetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 1 /* setter */"}}
[d]=p,
[c]={zb,1480718311,vb},
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",1487,"ExprResult MSPropertyOpBuilder::buildGet() {\n  if (GetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 0 /* getter */"},{"clang/lib/Sema/SemaPseudoObject.cpp",1516,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  if (SetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 1 /* setter */"}},
[o]={
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:276:14: error: cannot find suitable getter for property \'V4\'","clang/test/SemaCXX/MicrosoftExtensions.cpp:277:6: error: cannot find suitable setter for property \'V3\'"}
}
},
},
["err_cannot_form_pointer_to_member_of_reference_type"]={
["err_cannot_form_pointer_to_member_of_reference_type"]={
[f]="cannot form a pointer-to-member to member A of reference type B",
[h]="cannot form a pointer-to-member to member A of reference type B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot form a pointer-to-member to member %0 of reference type %1",
[i]=m,
[i]=m,
[j]="cannot form a pointer\\-to\\-member to member (.*?) of reference type (.*?)",
[b]="cannot form a pointer-to-member to member %0 of reference type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot form a pointer\\-to\\-member to member (.*?) of reference type (.*?)",
[d]={"0b675f5ad5b6",1247089558,"It\'s not allowed to form member pointers to members that have reference type. Add a test for this an..."},
[e]=a,
[k]={{y,15062,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n  } else if (op->getObjectKind() == OK_BitField) { // C99 6.5.3.2p1\n  } else if (op->getObjectKind() == OK_VectorComponent) {\n  } else if (op->getObjectKind() == OK_MatrixComponent) {\n  } else if (dcl) { // C99 6.5.3.2p1\n    // We have an lvalue with a decl. Make sure the decl is not declared\n    // with the register storage-class specifier.\n    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {\n    } else if (isa<MSPropertyDecl>(dcl)) {\n    } else if (isa<FunctionTemplateDecl>(dcl)) {\n    } else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) {\n      // Okay: we can take the address of a field.\n      // Could be a pointer to member, though, if there is an explicit\n      // scope qualifier for the class.\n      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {\n        if (Ctx && Ctx->isRecord()) {\n          if (dcl->getType()->isReferenceType()) {\n            Diag(OpLoc, diag::err_cannot_form_pointer_to_member_of_reference_type) << dcl->getDeclName() << dcl->getType();"}}
[d]=p,
[c]={"0b675f5ad5b6",1247089558,"It\'s not allowed to form member pointers to members that have reference type. Add a test for this an..."},
[k]={{z,15062,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n  } else if (op->getObjectKind() == OK_BitField) { // C99 6.5.3.2p1\n  } else if (op->getObjectKind() == OK_VectorComponent) {\n  } else if (op->getObjectKind() == OK_MatrixComponent) {\n  } else if (dcl) { // C99 6.5.3.2p1\n    // We have an lvalue with a decl. Make sure the decl is not declared\n    // with the register storage-class specifier.\n    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {\n    } else if (isa<MSPropertyDecl>(dcl)) {\n    } else if (isa<FunctionTemplateDecl>(dcl)) {\n    } else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) {\n      // Okay: we can take the address of a field.\n      // Could be a pointer to member, though, if there is an explicit\n      // scope qualifier for the class.\n      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {\n        if (Ctx && Ctx->isRecord()) {\n          if (dcl->getType()->isReferenceType()) {\n            Diag(OpLoc, diag::err_cannot_form_pointer_to_member_of_reference_type) << dcl->getDeclName() << dcl->getType();"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:22:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:12:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'"}
}
},
},
["err_cannot_open_file"]={
["err_cannot_open_file"]={
[f]="cannot open file \'A\': B",
[h]="cannot open file \'A\': B",
[c]=Fb,
[j]=Ub,
[e]=Eb,
[i]=Rb,
[g]="cannot open file \'%0\': %1",
[b]="cannot open file \'%0\': %1",
[i]=Bb,
[g]=Tb,
[j]="cannot open file \'(.*?)\'\\: (.*?)",
[f]="cannot open file \'(.*?)\'\\: (.*?)",
[b]=a,
[e]=a,
[h]=a,
[d]=a,
[d]={"802b77601e50",1268693692,"Introduce a new BufferResult class to act as the return type of"},
[c]={"802b77601e50",1268693692,"Introduce a new BufferResult class to act as the return type of"},
[k]={{"clang/lib/Basic/SourceManager.cpp",127,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n      Diag.SetDelayedDiagnostic(diag::err_cannot_open_file, ContentsEntry->getName(), BufferOrError.getError().message());"},{"clang/lib/Basic/SourceManager.cpp",131,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n    else\n      Diag.Report(Loc, diag::err_cannot_open_file) << ContentsEntry->getName() << BufferOrError.getError().message();"},{"clang/lib/CodeGen/CGCUDANV.cpp",735,"/// Creates a global constructor function for the module:\n///\n/// For CUDA:\n/// \\code\n/// void __cuda_module_ctor() {\n///    Handle = __cudaRegisterFatBinary(GpuBinaryBlob);\n///    __cuda_register_globals(Handle);\n/// }\n/// \\endcode\n///\n/// For HIP:\n/// \\code\n/// void __hip_module_ctor() {\n///    if (__hip_gpubin_handle == 0) {\n///        __hip_gpubin_handle  = __hipRegisterFatBinary(GpuBinaryBlob);\n///        __hip_register_globals(__hip_gpubin_handle);\n///    }\n/// }\n/// \\endcode\nllvm::Function *CGNVCUDARuntime::makeModuleCtorFunction() {\n  if (!CudaGpuBinaryFileName.empty()) {\n    if (std::error_code EC = CudaGpuBinaryOrErr.getError()) {\n      CGM.getDiags().Report(diag::err_cannot_open_file) << CudaGpuBinaryFileName << EC.message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",95,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"},{"clang/lib/CodeGen/CodeGenAction.cpp",1005,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    if (!BCBuf) {\n      CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << BCBuf.getError().message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",1015,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    if (!ModuleOrErr) {\n      handleAllErrors(ModuleOrErr.takeError(), [&](ErrorInfoBase &EIB) { CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << EIB.message(); });"},{"clang/lib/CodeGen/CodeGenModule.cpp",7440,"void CodeGenModule::printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const {\n  // If the CUID is not specified we try to generate a unique postfix.\n  if (getLangOpts().CUID.empty()) {\n    if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) {\n      if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID))\n        SM.getDiagnostics().Report(diag::err_cannot_open_file) << PLoc.getFilename() << EC.message();"},{"clang/lib/Lex/HeaderSearch.cpp",432,"OptionalFileEntryRef HeaderSearch::getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc, const DirectoryEntry *Dir, bool IsSystemHeaderDir, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool OpenFile /*=true*/, bool CacheFailures /*=true*/) {\n  if (!File) {\n    if (EC != llvm::errc::no_such_file_or_directory && EC != llvm::errc::invalid_argument && EC != llvm::errc::is_a_directory && EC != llvm::errc::not_a_directory) {\n      Diags.Report(IncludeLoc, diag::err_cannot_open_file) << FileName << EC.message();"},{"clang/unittests/Basic/DiagnosticTest.cpp",45,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",70,"// Check that FatalsAsError works as intended\nTEST(DiagnosticTest, fatalsAsError) {\n  for (unsigned FatalsAsError = 0; FatalsAsError != 2; ++FatalsAsError) {\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",117,"TEST(DiagnosticTest, diagnosticError) {\n  llvm::Expected<std::pair<int, int>> Value = DiagnosticError::create(SourceLocation(), PartialDiagnostic(diag::err_cannot_open_file, Alloc) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",126,"TEST(DiagnosticTest, diagnosticError) {\n  EXPECT_EQ(ErrDiag->second.getDiagID(), diag::err_cannot_open_file);"}}
[k]={{"clang/lib/Basic/SourceManager.cpp",127,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n      Diag.SetDelayedDiagnostic(diag::err_cannot_open_file, ContentsEntry->getName(), BufferOrError.getError().message());"},{"clang/lib/Basic/SourceManager.cpp",131,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n    else\n      Diag.Report(Loc, diag::err_cannot_open_file) << ContentsEntry->getName() << BufferOrError.getError().message();"},{"clang/lib/CodeGen/CGCUDANV.cpp",735,"/// Creates a global constructor function for the module:\n///\n/// For CUDA:\n/// \\code\n/// void __cuda_module_ctor() {\n///    Handle = __cudaRegisterFatBinary(GpuBinaryBlob);\n///    __cuda_register_globals(Handle);\n/// }\n/// \\endcode\n///\n/// For HIP:\n/// \\code\n/// void __hip_module_ctor() {\n///    if (__hip_gpubin_handle == 0) {\n///        __hip_gpubin_handle  = __hipRegisterFatBinary(GpuBinaryBlob);\n///        __hip_register_globals(__hip_gpubin_handle);\n///    }\n/// }\n/// \\endcode\nllvm::Function *CGNVCUDARuntime::makeModuleCtorFunction() {\n  if (!CudaGpuBinaryFileName.empty()) {\n    if (std::error_code EC = CudaGpuBinaryOrErr.getError()) {\n      CGM.getDiags().Report(diag::err_cannot_open_file) << CudaGpuBinaryFileName << EC.message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",95,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"},{"clang/lib/CodeGen/CodeGenAction.cpp",1005,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    if (!BCBuf) {\n      CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << BCBuf.getError().message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",1015,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    if (!ModuleOrErr) {\n      handleAllErrors(ModuleOrErr.takeError(), [&](ErrorInfoBase &EIB) { CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << EIB.message(); });"},{"clang/lib/CodeGen/CodeGenModule.cpp",7440,"void CodeGenModule::printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const {\n  // If the CUID is not specified we try to generate a unique postfix.\n  if (getLangOpts().CUID.empty()) {\n    if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) {\n      if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID))\n        SM.getDiagnostics().Report(diag::err_cannot_open_file) << PLoc.getFilename() << EC.message();"},{"clang/lib/Lex/HeaderSearch.cpp",432,"OptionalFileEntryRef HeaderSearch::getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc, const DirectoryEntry *Dir, bool IsSystemHeaderDir, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool OpenFile /*=true*/, bool CacheFailures /*=true*/) {\n  if (!File) {\n    if (EC != llvm::errc::no_such_file_or_directory && EC != llvm::errc::invalid_argument && EC != llvm::errc::is_a_directory && EC != llvm::errc::not_a_directory) {\n      Diags.Report(IncludeLoc, diag::err_cannot_open_file) << FileName << EC.message();"},{"clang/unittests/Basic/DiagnosticTest.cpp",45,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",70,"// Check that FatalsAsError works as intended\nTEST(DiagnosticTest, fatalsAsError) {\n  for (unsigned FatalsAsError = 0; FatalsAsError != 2; ++FatalsAsError) {\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",117,"TEST(DiagnosticTest, diagnosticError) {\n  llvm::Expected<std::pair<int, int>> Value = DiagnosticError::create(SourceLocation(), PartialDiagnostic(diag::err_cannot_open_file, Alloc) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",126,"TEST(DiagnosticTest, diagnosticError) {\n  EXPECT_EQ(ErrDiag->second.getDiagID(), diag::err_cannot_open_file);"}},
[o]={
["clang/test/CodeGenCUDA/texture.cu"]={"fatal error: cannot open file \'build/tools/clang/test/CodeGenCUDA/Output/texture.cu.tmp\': No such file or directory"}
}
},
},
["err_cannot_pass_non_trivial_c_struct_to_vararg"]={
["err_cannot_pass_non_trivial_c_struct_to_vararg"]={
[f]="cannot pass non-trivial C object of type A by value to variadic ...",
[h]="cannot pass non-trivial C object of type A by value to variadic ...",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass non-trivial C object of type %0 by value to variadic %select{function|block|method|constructor}1",
[i]=m,
[i]=m,
[j]="cannot pass non\\-trivial C object of type (.*?) by value to variadic (?:function|block|method|constructor)",
[b]="cannot pass non-trivial C object of type %0 by value to variadic %select{function|block|method|constructor}1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot pass non\\-trivial C object of type (.*?) by value to variadic (?:function|block|method|constructor)",
[d]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[e]=a,
[k]={{y,1020,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_non_trivial_c_struct_to_vararg) << Ty << CT;"}}
[d]=p,
[c]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[k]={{z,1020,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_non_trivial_c_struct_to_vararg) << Ty << CT;"}},
[o]={
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:11:24: error: cannot pass non-trivial C object of type \'Strong\' by value to variadic function"}
}
},
},
["err_cannot_pass_objc_interface_to_vararg"]={
["err_cannot_pass_objc_interface_to_vararg"]={
[f]="cannot pass object with interface type A by value through variadic ...",
[h]="cannot pass object with interface type A by value through variadic ...",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass object with interface type %0 by value through variadic %select{function|block|method|constructor}1",
[i]=m,
[i]=m,
[j]="cannot pass object with interface type (.*?) by value through variadic (?:function|block|method|constructor)",
[b]="cannot pass object with interface type %0 by value through variadic %select{function|block|method|constructor}1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot pass object with interface type (.*?) by value through variadic (?:function|block|method|constructor)",
[d]={"a8a7d0f37161",1239523880,"implement rdar://6780761, making sema reject some code that otherwise"},
[e]=a,
[k]={{y,1024,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    else if (Ty->isObjCObjectType())\n      DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::err_cannot_pass_objc_interface_to_vararg) << Ty << CT);"}}
[d]=p,
[c]={"a8a7d0f37161",1239523880,"implement rdar://6780761, making sema reject some code that otherwise"},
[k]={{z,1024,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    else if (Ty->isObjCObjectType())\n      DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::err_cannot_pass_objc_interface_to_vararg) << Ty << CT);"}},
[o]={
["clang/test/SemaObjC/method-bad-param.m"]={"clang/test/SemaObjC/method-bad-param.m:35:9: error: cannot pass object with interface type \'foo\' by value through variadic function"}
}
},
},
["err_cannot_pass_objc_interface_to_vararg_format"]={
["err_cannot_pass_objc_interface_to_vararg_format"]={
[f]="cannot pass object with interface type A by value to variadic ...; expected type from format string was B",
[h]="cannot pass object with interface type A by value to variadic ...; expected type from format string was B",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass object with interface type %1 by value to variadic %select{function|block|method|constructor}2; expected type from format string was %3",
[i]=m,
[i]=m,
[j]="cannot pass object with interface type (.*?) by value to variadic (?:function|block|method|constructor); expected type from format string was (.*?)",
[b]="cannot pass object with interface type %1 by value to variadic %select{function|block|method|constructor}2; expected type from format string was %3",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot pass object with interface type (.*?) by value to variadic (?:function|block|method|constructor); expected type from format string was (.*?)",
[d]={"3e0ec58c09eb",1342721423,"For varargs, diagnose passing ObjC objects by value like other non-POD types."},
[e]=a,
[k]={{s,11399,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      else if (ExprTy->isObjCObjectType())\n        EmitFormatDiagnostic(S.PDiag(diag::err_cannot_pass_objc_interface_to_vararg_format) << S.getLangOpts().CPlusPlus11 << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << CSR << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, CSR);"}}
[d]=p,
[c]={"3e0ec58c09eb",1342721423,"For varargs, diagnose passing ObjC objects by value like other non-POD types."},
[k]={{t,11399,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      else if (ExprTy->isObjCObjectType())\n        EmitFormatDiagnostic(S.PDiag(diag::err_cannot_pass_objc_interface_to_vararg_format) << S.getLangOpts().CPlusPlus11 << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << CSR << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, CSR);"}},
[o]={
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:262:26: error: cannot pass object with interface type \'Foo\' by value to variadic function; expected type from format string was \'int\'","clang/test/SemaObjC/format-strings-objc.m:266:20: error: cannot pass object with interface type \'Foo\' by value to variadic method; expected type from format string was \'int\'"}
}
},
},
["err_cannot_pass_to_vararg"]={
["err_cannot_pass_to_vararg"]={
[f]="cannot pass ... to variadic ...",
[h]="cannot pass ... to variadic ...",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2",
[i]=m,
[i]=m,
[j]="cannot pass (?:expression of type (.*?)|initializer list) to variadic (?:function|block|method|constructor)",
[b]="cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot pass (?:expression of type (.*?)|initializer list) to variadic (?:function|block|method|constructor)",
[d]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg"},
[e]=a,
[k]={{y,1027,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    else if (Ty->isObjCObjectType())\n    else\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg) << isa<InitListExpr>(E) << Ty << CT;"}}
[d]=p,
[c]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg"},
[k]={{z,1027,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    else if (Ty->isObjCObjectType())\n    else\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg) << isa<InitListExpr>(E) << Ty << CT;"}},
[o]={
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:34:13: error: cannot pass initializer list to variadic function"}
}
},
},
["err_cannot_pass_to_vararg_format"]={
["err_cannot_pass_to_vararg_format"]={
[f]="cannot pass ... to variadic ...; expected type from format string was A",
[h]="cannot pass ... to variadic ...; expected type from format string was A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2; expected type from format string was %3",
[i]=m,
[i]=m,
[j]="cannot pass (?:expression of type (.*?)|initializer list) to variadic (?:function|block|method|constructor); expected type from format string was (.*?)",
[b]="cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2; expected type from format string was %3",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot pass (?:expression of type (.*?)|initializer list) to variadic (?:function|block|method|constructor); expected type from format string was (.*?)",
[d]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg"},
[e]=a,
[k]={{s,11407,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      else if (ExprTy->isObjCObjectType())\n      else\n        S.Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg_format) << isa<InitListExpr>(E) << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << E->getSourceRange();"}}
[d]=p,
[c]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg"},
[k]={{t,11407,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      else if (ExprTy->isObjCObjectType())\n      else\n        S.Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg_format) << isa<InitListExpr>(E) << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << E->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:32:27: error: cannot pass initializer list to variadic function; expected type from format string was \'int\'","clang/test/SemaCXX/format-strings-0x.cpp:33:22: error: cannot pass expression of type \'void\' to variadic function; expected type from format string was \'int\'"}
}
},
},
["err_capture_bad_target"]={
["err_capture_bad_target"]={
[f]="capture host variable A by reference in device or host device lambda function",
[h]="capture host variable A by reference in device or host device lambda function",
[c]=l,
[j]=n,
[e]=n,
[g]="capture host variable %0 by reference in device or host device lambda function",
[i]=m,
[i]=m,
[j]="capture host variable (.*?) by reference in device or host device lambda function",
[b]="capture host variable %0 by reference in device or host device lambda function",
[b]=a,
[g]=l,
[h]=o,
[f]="capture host variable (.*?) by reference in device or host device lambda function",
[d]={T,1582847864,U},
[e]=a,
[k]={{"clang/lib/Sema/SemaCUDA.cpp",883,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  if (Capture.isVariableCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::err_capture_bad_target, Callee, *this) << Capture.getVariable();"}}
[d]=p,
[c]={U,1582847864,W},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",883,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  if (Capture.isVariableCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::err_capture_bad_target, Callee, *this) << Capture.getVariable();"}},
[o]={
["clang/test/SemaCUDA/device-use-host-var.cu"]={"clang/test/SemaCUDA/device-use-host-var.cu:207:4: error: capture host variable \'out\' by reference in device or host device lambda function","clang/test/SemaCUDA/device-use-host-var.cu:215:10: error: capture host variable \'ref_host_var\' by reference in device or host device lambda function"}
}
},
},
["err_capture_binding_openmp"]={
["err_capture_binding_openmp"]={
[h]="capturing a structured binding is not yet supported in OpenMP",
[j]=n,
[i]=m,
[b]="capturing a structured binding is not yet supported in OpenMP",
[g]=l,
[f]="capturing a structured binding is not yet supported in OpenMP",
[f]="capturing a structured binding is not yet supported in OpenMP",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="capturing a structured binding is not yet supported in OpenMP",
[c]={N,1625925174,O},
[i]=m,
[k]={{z,19347,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_capture_binding_openmp) << Var;"}},
[j]="capturing a structured binding is not yet supported in OpenMP",
[o]={
[b]=a,
["clang/test/SemaCXX/decomposition-openmp.cpp"]={"clang/test/SemaCXX/decomposition-openmp.cpp:8:15: error: capturing a structured binding is not yet supported in OpenMP","clang/test/SemaCXX/decomposition-openmp.cpp:10:16: error: capturing a structured binding is not yet supported in OpenMP"}
[h]=o,
}
[d]={N,1625925174,M},
[k]={{y,19347,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_capture_binding_openmp) << Var;"}}
},
},
["err_capture_block_variable"]={
["err_capture_block_variable"]={
[f]="__block variable A cannot be captured in a ...",
[h]="__block variable A cannot be captured in a ...",
[c]=l,
[j]=n,
[e]=n,
[g]="__block variable %0 cannot be captured in a %select{lambda expression|captured statement}1",
[i]=m,
[i]=m,
[j]="__block variable (.*?) cannot be captured in a (?:lambda expression|captured statement)",
[b]="__block variable %0 cannot be captured in a %select{lambda expression|captured statement}1",
[b]=a,
[g]=l,
[h]=o,
[f]="__block variable (.*?) cannot be captured in a (?:lambda expression|captured statement)",
[d]={"3b4c30b7e77e",1368127031,"CodeGen for CapturedStmts"},
[e]=a,
[k]={{y,19189,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // Lambdas and captured statements are not allowed to capture __block\n  // variables; they don\'t support the expected semantics.\n  if (HasBlocksAttr && (IsLambda || isa<CapturedRegionScopeInfo>(CSI))) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_capture_block_variable) << Var << !IsLambda;"}}
[d]=p,
[c]={"3b4c30b7e77e",1368127031,"CodeGen for CapturedStmts"},
[k]={{z,19189,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // Lambdas and captured statements are not allowed to capture __block\n  // variables; they don\'t support the expected semantics.\n  if (HasBlocksAttr && (IsLambda || isa<CapturedRegionScopeInfo>(CSI))) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_capture_block_variable) << Var << !IsLambda;"}},
[o]={
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:58:7: error: __block variable \'x\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:70:7: error: __block variable \'a\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:80:11: error: __block variable \'a\' cannot be captured in a captured statement"}
}
},
},
["err_capture_default_first"]={
["err_capture_default_first"]={
[h]="capture default must be first",
[j]=n,
[i]=m,
[b]="capture default must be first",
[g]=l,
[f]="capture default must be first",
[f]="capture default must be first",
[c]=l,
[e]=a,
[e]=n,
[d]=A,
[g]="capture default must be first",
[c]={"ee05167cc42b",1594102083,"[OpenMP] Allow traits for the OpenMP context selector `isa`"},
[i]=m,
[k]={{"clang/lib/Parse/ParseExprCXX.cpp",945,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  while (Tok.isNot(tok::r_square)) {\n    if (Tok.is(tok::star)) {\n    } else if (Tok.is(tok::kw_this)) {\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n      return Invalid([&] { Diag(Tok.getLocation(), diag::err_capture_default_first); });"}},
[j]="capture default must be first",
[o]={
[b]=a,
["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:11:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:12:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:22:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:23:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:30:13: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:35:20: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:36:20: error: capture default must be first"}
[h]=B,
}
[d]={"ee05167cc42b",1594102083,"[OpenMP] Allow traits for the OpenMP context selector `isa`"},
[k]={{"clang/lib/Parse/ParseExprCXX.cpp",945,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  while (Tok.isNot(tok::r_square)) {\n    if (Tok.is(tok::star)) {\n    } else if (Tok.is(tok::kw_this)) {\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n      return Invalid([&] { Diag(Tok.getLocation(), diag::err_capture_default_first); });"}}
},
},
["err_capture_default_non_local"]={
["err_capture_default_non_local"]={
[f]="non-local lambda expression cannot have a capture-default",
[h]="non-local lambda expression cannot have a capture-default",
[c]=l,
[j]=n,
[e]=n,
[g]="non-local lambda expression cannot have a capture-default",
[i]=m,
[i]=m,
[j]="non\\-local lambda expression cannot have a capture\\-default",
[b]="non-local lambda expression cannot have a capture-default",
[b]=a,
[g]=l,
[h]=o,
[f]="non\\-local lambda expression cannot have a capture\\-default",
[d]={"3d584b0ced40",1391723348,"PR18128: a lambda capture-default is not permitted for a non-local lambda"},
[e]=a,
[k]={{lb,1247,"void Sema::ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro, SourceLocation MutableLoc) {\n  // C++11 [expr.prim.lambda]p9:\n  //  A lambda-expression whose smallest enclosing scope is a block scope is a\n  //  local lambda expression; any other lambda expression shall not have a\n  //  capture-default or simple-capture in its lambda-introducer.\n  //\n  // For simple-captures, this is covered by the check below that any named\n  // entity is a variable that can be captured.\n  //\n  // For DR1632, we also allow a capture-default in any context where we can\n  // odr-use \'this\' (in particular, in a default initializer for a non-static\n  // data member).\n  if (Intro.Default != LCD_None && !LSI->Lambda->getParent()->isFunctionOrMethod() &&\n    Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);"}}
[d]=p,
[c]={"3d584b0ced40",1391723348,"PR18128: a lambda capture-default is not permitted for a non-local lambda"},
[k]={{lb,1247,"void Sema::ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro, SourceLocation MutableLoc) {\n  // C++11 [expr.prim.lambda]p9:\n  //  A lambda-expression whose smallest enclosing scope is a block scope is a\n  //  local lambda expression; any other lambda expression shall not have a\n  //  capture-default or simple-capture in its lambda-introducer.\n  //\n  // For simple-captures, this is covered by the check below that any named\n  // entity is a variable that can be captured.\n  //\n  // For DR1632, we also allow a capture-default in any context where we can\n  // odr-use \'this\' (in particular, in a default initializer for a non-static\n  // data member).\n  if (Intro.Default != LCD_None && !LSI->Lambda->getParent()->isFunctionOrMethod() &&\n    Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);"}},
[o]={
["clang/test/SemaCXX/lambda-expressions.cpp"]={"clang/test/SemaCXX/lambda-expressions.cpp:330:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:365:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:369:29: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:373:21: error: non-local lambda expression cannot have a capture-default"}
}
},
},
["err_capture_does_not_name_variable"]={
["err_capture_does_not_name_variable"]={
[f]="A in capture list does not name a variable",
[h]="A in capture list does not name a variable",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 in capture list does not name a variable",
[i]=m,
[i]=m,
[j]="(.*?) in capture list does not name a variable",
[b]="%0 in capture list does not name a variable",
[b]=a,
[g]=l,
[h]="Lambda Issue",
[f]="(.*?) in capture list does not name a variable",
[d]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[e]=a,
[k]={{lb,1157,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // C++11 [expr.prim.lambda]p10:\n    //  [...] each such lookup shall find a variable with automatic storage\n    //  duration declared in the reaching scope of the local lambda expression.\n    // Note that the \'reaching scope\' check happens in tryCaptureVariable().\n    if (!Var) {\n      Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;"}}
[d]="Lambda Issue",
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[k]={{lb,1157,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // C++11 [expr.prim.lambda]p10:\n    //  [...] each such lookup shall find a variable with automatic storage\n    //  duration declared in the reaching scope of the local lambda expression.\n    // Note that the \'reaching scope\' check happens in tryCaptureVariable().\n    if (!Var) {\n      Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:20:13: error: \'Overload\' in capture list does not name a variable"}
}
},
},
["err_capture_more_than_once"]={
["err_capture_more_than_once"]={
[f]="A can appear only once in a capture list",
[h]="A can appear only once in a capture list",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 can appear only once in a capture list",
[i]=m,
[i]=m,
[j]="(.*?) can appear only once in a capture list",
[b]="%0 can appear only once in a capture list",
[b]=a,
[g]=l,
[h]="Lambda Issue",
[f]="(.*?) can appear only once in a capture list",
[d]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[e]=a,
[k]={{lb,1029,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // C++11 [expr.prim.lambda]p8:\n      //  An identifier or this shall not appear more than once in a\n      //  lambda-capture.\n      if (LSI->isCXXThisCaptured()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << \"\'this\'\" << SourceRange(LSI->getCXXThisCapture().getLocation()) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{lb,1168,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id << It->second->getBeginLoc() << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{lb,1175,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n      } else\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;"}}
[d]="Lambda Issue",
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[k]={{lb,1029,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // C++11 [expr.prim.lambda]p8:\n      //  An identifier or this shall not appear more than once in a\n      //  lambda-capture.\n      if (LSI->isCXXThisCaptured()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << \"\'this\'\" << SourceRange(LSI->getCXXThisCapture().getLocation()) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{lb,1168,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id << It->second->getBeginLoc() << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{lb,1175,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n      } else\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:7:17: error: \'foo\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:8:18: error: \'this\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:28:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:29:16: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:30:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:31:16: error: \'i\' can appear only once in a capture list"}
}
},
},
["err_capture_non_automatic_variable"]={
["err_capture_non_automatic_variable"]={
[f]="A cannot be captured because it does not have automatic storage duration",
[h]="A cannot be captured because it does not have automatic storage duration",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 cannot be captured because it does not have automatic storage duration",
[i]=m,
[i]=m,
[j]="(.*?) cannot be captured because it does not have automatic storage duration",
[b]="%0 cannot be captured because it does not have automatic storage duration",
[b]=a,
[g]=l,
[h]="Lambda Issue",
[f]="(.*?) cannot be captured because it does not have automatic storage duration",
[d]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[e]=a,
[k]={{lb,1186,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (!Underlying->hasLocalStorage()) {\n      Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;"}}
[d]="Lambda Issue",
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[k]={{lb,1186,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (!Underlying->hasLocalStorage()) {\n      Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:21:13: error: \'GlobalVar\' cannot be captured because it does not have automatic storage duration","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:34:16: error: \'local_static\' cannot be captured because it does not have automatic storage duration"}
}
},
},
["err_capture_of_abstract_type"]={
["err_capture_of_abstract_type"]={
[f]="by-copy capture of value of abstract type A",
[h]="by-copy capture of value of abstract type A",
[c]=l,
[j]=n,
[e]=n,
[g]="by-copy capture of value of abstract type %0",
[i]=m,
[i]=m,
[j]="by\\-copy capture of value of abstract type (.*?)",
[b]="by-copy capture of value of abstract type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="by\\-copy capture of value of abstract type (.*?)",
[d]={"71fe0e8a832b",1381465521,"Diagnose by-copy captures of abstract classes."},
[e]=a,
[k]={{y,19480,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  } else {\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      else if (S.RequireNonAbstractType(Loc, CaptureType, diag::err_capture_of_abstract_type))"}}
[d]=p,
[c]={"71fe0e8a832b",1381465521,"Diagnose by-copy captures of abstract classes."},
[k]={{z,19480,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  } else {\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      else if (S.RequireNonAbstractType(Loc, CaptureType, diag::err_capture_of_abstract_type))"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:100:6: error: by-copy capture of value of abstract type \'X\'"}
}
},
},
["err_capture_of_incomplete_or_sizeless_type"]={
["err_capture_of_incomplete_or_sizeless_type"]={
[f]="by-copy capture of variable A with ... type B",
[h]="by-copy capture of variable A with ... type B",
[c]=l,
[j]=n,
[e]=n,
[g]="by-copy capture of variable %0 with %select{incomplete|sizeless}1 type %2",
[i]=m,
[i]=m,
[j]="by\\-copy capture of variable (.*?) with (?:incomplete|sizeless) type (.*?)",
[b]="by-copy capture of variable %0 with %select{incomplete|sizeless}1 type %2",
[b]=a,
[g]=l,
[h]=o,
[f]="by\\-copy capture of variable (.*?) with (?:incomplete|sizeless) type (.*?)",
[d]={W,1576908663,V},
[e]=a,
[k]={{y,19411,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  } else {\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      if (!CaptureType->isDependentType() && S.RequireCompleteSizedType(Loc, CaptureType, diag::err_capture_of_incomplete_or_sizeless_type, Var->getDeclName()))"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{z,19411,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  } else {\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      if (!CaptureType->isDependentType() && S.RequireCompleteSizedType(Loc, CaptureType, diag::err_capture_of_incomplete_or_sizeless_type, Var->getDeclName()))"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:108:19: error: by-copy capture of variable \'param\' with incomplete type \'const X\'"}
}
},
},
["err_carries_dependency_missing_on_first_decl"]={
["err_carries_dependency_missing_on_first_decl"]={
[f]="... declared \'[[carries_dependency]]\' after its first declaration",
[h]="... declared \'[[carries_dependency]]\' after its first declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{function|parameter}0 declared \'[[carries_dependency]]\' after its first declaration",
[i]=m,
[i]=m,
[j]="(?:function|parameter) declared \'\\[\\[carries_dependency\\]\\]\' after its first declaration",
[b]="%select{function|parameter}0 declared \'[[carries_dependency]]\' after its first declaration",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:function|parameter) declared \'\\[\\[carries_dependency\\]\\]\' after its first declaration",
[d]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[e]=a,
[k]={{q,3341,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 1 /*Param*/;"},{q,4055,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 0 /*Function*/;"}}
[d]=p,
[c]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[k]={{r,3341,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 1 /*Param*/;"},{r,4055,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 0 /*Function*/;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:4:3: error: function declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:5:15: error: parameter declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:9:3: error: function declared \'[[carries_dependency]]\' after its first declaration"}
}
},
},
["err_carries_dependency_param_not_function_decl"]={
["err_carries_dependency_param_not_function_decl"]={
[f]="\'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda",
[h]="\'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda",
[c]=l,
[j]=n,
[e]=n,
[g]="\'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda",
[i]=m,
[i]=m,
[j]="\'\\[\\[carries_dependency\\]\\]\' attribute only allowed on parameter in a function declaration or lambda",
[b]="\'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda",
[b]=a,
[g]=l,
[h]=o,
[f]="\'\\[\\[carries_dependency\\]\\]\' attribute only allowed on parameter in a function declaration or lambda",
[d]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[e]=a,
[k]={{p,2322,"static void handleDependencyAttr(Sema &S, Scope *Scope, Decl *D, const ParsedAttr &AL) {\n  if (isa<ParmVarDecl>(D)) {\n    // [[carries_dependency]] can only be applied to a parameter if it is a\n    // parameter of a function declaration or lambda.\n    if (!(Scope->getFlags() & clang::Scope::FunctionDeclarationScope)) {\n      S.Diag(AL.getLoc(), diag::err_carries_dependency_param_not_function_decl);"}}
[d]=p,
[c]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[k]={{q,2322,"static void handleDependencyAttr(Sema &S, Scope *Scope, Decl *D, const ParsedAttr &AL) {\n  if (isa<ParmVarDecl>(D)) {\n    // [[carries_dependency]] can only be applied to a parameter if it is a\n    // parameter of a function declaration or lambda.\n    if (!(Scope->getFlags() & clang::Scope::FunctionDeclarationScope)) {\n      S.Diag(AL.getLoc(), diag::err_carries_dependency_param_not_function_decl);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:13:19: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:15:26: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:16:25: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:17:23: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:20:20: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:25:24: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda"}
}
},
},
["err_case_not_in_switch"]={
["err_case_not_in_switch"]={
[h]="\'case\' statement not in switch statement",
[j]=n,
[i]=m,
[b]="\'case\' statement not in switch statement",
[g]=l,
[f]="\'case\' statement not in switch statement",
[f]="\'case\' statement not in switch statement",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'case\' statement not in switch statement",
[c]={v,1237025389,u},
[i]=m,
[k]={{S,521,"StmtResult Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHSVal, SourceLocation DotDotDotLoc, ExprResult RHSVal, SourceLocation ColonLoc) {\n  if (getCurFunction()->SwitchStack.empty()) {\n    Diag(CaseLoc, diag::err_case_not_in_switch);"}},
[j]="\'case\' statement not in switch statement",
[o]={
[b]=a,
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:101:6: error: \'case\' statement not in switch statement"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{R,521,"StmtResult Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHSVal, SourceLocation DotDotDotLoc, ExprResult RHSVal, SourceLocation ColonLoc) {\n  if (getCurFunction()->SwitchStack.empty()) {\n    Diag(CaseLoc, diag::err_case_not_in_switch);"}}
},
},
["err_cast_from_randomized_struct"]={
["err_cast_from_randomized_struct"]={
[f]="casting from randomized structure pointer type A to B",
[h]="casting from randomized structure pointer type A to B",
[c]=l,
[j]=n,
[e]=n,
[g]="casting from randomized structure pointer type %0 to %1",
[i]=m,
[i]=m,
[j]="casting from randomized structure pointer type (.*?) to (.*?)",
[b]="casting from randomized structure pointer type %0 to %1",
[b]=a,
[g]=l,
[h]=a,
[f]="casting from randomized structure pointer type (.*?) to (.*?)",
[d]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[e]=a,
[k]={{w,3235,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (isa<PointerType>(SrcType) && isa<PointerType>(DestType)) {\n    if (SrcRD && DestRD && SrcRD->hasAttr<RandomizeLayoutAttr>() && SrcRD != DestRD) {\n      Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct) << SrcType << DestType;"}}
[d]=a,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{x,3235,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (isa<PointerType>(SrcType) && isa<PointerType>(DestType)) {\n    if (SrcRD && DestRD && SrcRD->hasAttr<RandomizeLayoutAttr>() && SrcRD != DestRD) {\n      Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct) << SrcType << DestType;"}}
},
},
["err_cast_pointer_from_non_pointer_int"]={
["err_cast_pointer_from_non_pointer_int"]={
[f]="operand of type A cannot be cast to a pointer type",
[h]="operand of type A cannot be cast to a pointer type",
[c]=l,
[j]=n,
[e]=n,
[g]="operand of type %0 cannot be cast to a pointer type",
[i]=m,
[i]=m,
[j]="operand of type (.*?) cannot be cast to a pointer type",
[b]="operand of type %0 cannot be cast to a pointer type",
[b]=a,
[g]=l,
[h]=o,
[f]="operand of type (.*?) cannot be cast to a pointer type",
[d]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers "},
[e]=a,
[k]={{w,3144,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n    if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_pointer_from_non_pointer_int) << SrcType << SrcExpr.get()->getSourceRange();"}}
[d]=p,
[c]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers "},
[k]={{x,3144,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n    if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_pointer_from_non_pointer_int) << SrcType << SrcExpr.get()->getSourceRange();"}},
[o]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:16:14: error: operand of type \'double\' cannot be cast to a pointer type"}
}
},
},
["err_cast_pointer_to_non_pointer_int"]={
["err_cast_pointer_to_non_pointer_int"]={
[f]="pointer cannot be cast to type A",
[h]="pointer cannot be cast to type A",
[c]=l,
[j]=n,
[e]=n,
[g]="pointer cannot be cast to type %0",
[i]=m,
[i]=m,
[j]="pointer cannot be cast to type (.*?)",
[b]="pointer cannot be cast to type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="pointer cannot be cast to type (.*?)",
[d]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers "},
[e]=a,
[k]={{w,3155,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  } else if (!SrcType->isArithmeticType()) {\n    if (!DestType->isIntegralType(Self.Context) && DestType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_cast_pointer_to_non_pointer_int) << DestType << SrcExpr.get()->getSourceRange();"}}
[d]=p,
[c]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers "},
[k]={{x,3155,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  } else if (!SrcType->isArithmeticType()) {\n    if (!DestType->isIntegralType(Self.Context) && DestType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_cast_pointer_to_non_pointer_int) << DestType << SrcExpr.get()->getSourceRange();"}},
[o]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:15:15: error: pointer cannot be cast to type \'double\'"}
}
},
},
["err_cast_selector_expr"]={
["err_cast_selector_expr"]={
[h]="cannot type cast @selector expression",
[j]=n,
[i]=m,
[b]="cannot type cast @selector expression",
[g]=l,
[f]="cannot type cast @selector expression",
[f]="cannot type cast @selector expression",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot type cast @selector expression",
[c]={"88fead8c4821",1243028572,"Cannot type cast @selector expressions."},
[i]=m,
[k]={{x,3134,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (isa<ObjCSelectorExpr>(SrcExpr.get())) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);"}},
[j]="cannot type cast @selector expression",
[o]={
[b]=a,
["clang/test/SemaObjC/selector-error.m"]={"clang/test/SemaObjC/selector-error.m:16:14: error: cannot type cast @selector expression","clang/test/SemaObjC/selector-error.m:17:17: error: cannot type cast @selector expression"}
[h]=o,
}
[d]={"88fead8c4821",1243028572,"Cannot type cast @selector expressions."},
[k]={{w,3134,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (isa<ObjCSelectorExpr>(SrcExpr.get())) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);"}}
},
},
["err_catch_incomplete"]={
["err_catch_incomplete"]={
[f]="cannot catch incomplete type A",
[h]="cannot catch incomplete type A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot catch incomplete type %0",
[i]=m,
[i]=m,
[j]="cannot catch incomplete type (.*?)",
[b]="cannot catch incomplete type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot catch incomplete type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{v,16634,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  unsigned DK = diag::err_catch_incomplete;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{w,16634,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  unsigned DK = diag::err_catch_incomplete;"}},
[o]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:15:16: error: cannot catch incomplete type \'void\'","clang/test/SemaCXX/exceptions.cpp:16:13: error: cannot catch incomplete type \'A\'"}
}
},
},
["err_catch_incomplete_ptr"]={
["err_catch_incomplete_ptr"]={
[f]="cannot catch pointer to incomplete type A",
[h]="cannot catch pointer to incomplete type A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot catch pointer to incomplete type %0",
[i]=m,
[i]=m,
[j]="cannot catch pointer to incomplete type (.*?)",
[b]="cannot catch pointer to incomplete type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot catch pointer to incomplete type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{v,16638,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    DK = diag::err_catch_incomplete_ptr;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{w,16638,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    DK = diag::err_catch_incomplete_ptr;"}},
[o]={
["clang/test/SemaTemplate/instantiate-function-1.cpp"]={"clang/test/SemaTemplate/instantiate-function-1.cpp:197:16: error: cannot catch pointer to incomplete type \'Incomplete\'"}
}
},
},
["err_catch_incomplete_ref"]={
["err_catch_incomplete_ref"]={
[f]="cannot catch reference to incomplete type A",
[h]="cannot catch reference to incomplete type A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot catch reference to incomplete type %0",
[i]=m,
[i]=m,
[j]="cannot catch reference to incomplete type (.*?)",
[b]="cannot catch reference to incomplete type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot catch reference to incomplete type (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{v,16643,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {\n    DK = diag::err_catch_incomplete_ref;"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{w,16643,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {\n    DK = diag::err_catch_incomplete_ref;"}},
[o]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:18:14: error: cannot catch reference to incomplete type \'A\'"}
}
},
},
["err_catch_param_not_objc_type"]={
["err_catch_param_not_objc_type"]={
[h]="@catch parameter is not a pointer to an interface type",
[j]=n,
[i]=m,
[b]="@catch parameter is not a pointer to an interface type",
[g]=l,
[f]="@catch parameter is not a pointer to an interface type",
[f]="@catch parameter is not a pointer to an interface type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="@catch parameter is not a pointer to an interface type",
[c]={v,1237025389,u},
[i]=m,
[k]={{K,5168,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  } else if (T->isDependentType()) {\n  } else if (T->isObjCQualifiedIdType()) {\n  } else if (T->isObjCIdType()) {\n  } else if (!T->isObjCObjectPointerType()) {\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"},{K,5171,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  } else if (T->isDependentType()) {\n  } else if (T->isObjCQualifiedIdType()) {\n  } else if (T->isObjCIdType()) {\n  } else if (!T->isObjCObjectPointerType()) {\n  } else if (!T->castAs<ObjCObjectPointerType>()->getInterfaceType()) {\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"}},
[j]="@catch parameter is not a pointer to an interface type",
[o]={
[b]=a,
["clang/test/SemaObjC/catch-invalid.m"]={"clang/test/SemaObjC/catch-invalid.m:7:19: error: @catch parameter is not a pointer to an interface type"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{I,5168,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  } else if (T->isDependentType()) {\n  } else if (T->isObjCQualifiedIdType()) {\n  } else if (T->isObjCIdType()) {\n  } else if (!T->isObjCObjectPointerType()) {\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"},{I,5171,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  } else if (T->isDependentType()) {\n  } else if (T->isObjCQualifiedIdType()) {\n  } else if (T->isObjCIdType()) {\n  } else if (!T->isObjCObjectPointerType()) {\n  } else if (!T->castAs<ObjCObjectPointerType>()->getInterfaceType()) {\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"}}
},
},
["err_catch_rvalue_ref"]={
["err_catch_rvalue_ref"]={
[h]="cannot catch exceptions by rvalue reference",
[j]=n,
[i]=m,
[b]="cannot catch exceptions by rvalue reference",
[g]=l,
[f]="cannot catch exceptions by rvalue reference",
[f]="cannot catch exceptions by rvalue reference",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot catch exceptions by rvalue reference",
[c]={"b28b40712121",1237765767,"Disallow catching exceptions by rvalue reference."},
[i]=m,
[k]={{w,16623,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.\n  // The exception-declaration shall not denote a pointer or reference to an\n  // incomplete type, other than [cv] void*.\n  // N2844 forbids rvalue references.\n  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {\n    Diag(Loc, diag::err_catch_rvalue_ref);"}},
[j]="cannot catch exceptions by rvalue reference",
[o]={
[b]=a,
["clang/test/SemaTemplate/instantiate-try-catch.cpp"]={"clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference","clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference"}
[h]=o,
}
[d]={"b28b40712121",1237765767,"Disallow catching exceptions by rvalue reference."},
[k]={{v,16623,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.\n  // The exception-declaration shall not denote a pointer or reference to an\n  // incomplete type, other than [cv] void*.\n  // N2844 forbids rvalue references.\n  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {\n    Diag(Loc, diag::err_catch_rvalue_ref);"}}
},
},
["err_catch_sizeless"]={
["err_catch_sizeless"]={
[f]="cannot catch ...sizeless type A",
[h]="cannot catch ...sizeless type A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot catch %select{|reference to }0sizeless type %1",
[i]=m,
[i]=m,
[j]="cannot catch (?:|reference to )sizeless type (.*?)",
[b]="cannot catch %select{|reference to }0sizeless type %1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot catch (?:|reference to )sizeless type (.*?)",
[d]={W,1576908663,V},
[e]=a,
[k]={{v,16655,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (!Invalid && Mode != 1 && BaseType->isSizelessType()) {\n    Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType;"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{w,16655,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (!Invalid && Mode != 1 && BaseType->isSizelessType()) {\n    Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType;"}},
[o]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:368:20: error: cannot catch sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/SemaCXX/sizeless-1.cpp:374:22: error: cannot catch reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
}
},
},
["err_catch_variably_modified"]={
["err_catch_variably_modified"]={
[f]="cannot catch variably modified type A",
[h]="cannot catch variably modified type A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot catch variably modified type %0",
[i]=m,
[i]=m,
[j]="cannot catch variably modified type (.*?)",
[b]="cannot catch variably modified type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot catch variably modified type (.*?)",
[d]={"e56d1a0d5000",1465401907,"[Sema] Don\'t permit catching variably modified types"},
[e]=a,
[k]={{v,16628,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (ExDeclType->isVariablyModifiedType()) {\n    Diag(Loc, diag::err_catch_variably_modified) << ExDeclType;"}}
[d]=p,
[c]={"e56d1a0d5000",1465401907,"[Sema] Don\'t permit catching variably modified types"},
[k]={{w,16628,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  if (ExDeclType->isVariablyModifiedType()) {\n    Diag(Loc, diag::err_catch_variably_modified) << ExDeclType;"}},
[o]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:281:17: error: cannot catch variably modified type \'int (*)[i]\'","clang/test/SemaCXX/exceptions.cpp:287:17: error: cannot catch variably modified type \'int (*)[i]\'"}
}
},
},
["err_category_forward_interface"]={
["err_category_forward_interface"]={
[f]="cannot define ... for undefined class A",
[h]="cannot define ... for undefined class A",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot define %select{category|class extension}0 for undefined class %1",
[i]=m,
[i]=m,
[j]="cannot define (?:category|class extension) for undefined class (.*?)",
[b]="cannot define %select{category|class extension}0 for undefined class %1",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot define (?:category|class extension) for undefined class (.*?)",
[d]={"4123a86faebb",1321308601,"Use Sema::RequireCompleteType to check for the completeness of"},
[e]=a,
[k]={{I,1833,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {"}}
[d]=p,
[c]={"4123a86faebb",1321308601,"Use Sema::RequireCompleteType to check for the completeness of"},
[k]={{K,1833,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {"}},
[o]={
["clang/test/SemaObjC/category-1.m"]={"clang/test/SemaObjC/category-1.m:37:12: error: cannot define category for undefined class \'MyClass2\'"}
}
},
},
["err_category_property"]={
["err_category_property"]={
[f]="property declared in category A cannot be implemented in class implementation",
[h]="property declared in category A cannot be implemented in class implementation",
[c]=l,
[j]=n,
[e]=n,
[g]="property declared in category %0 cannot be implemented in class implementation",
[i]=m,
[i]=m,
[j]="property declared in category (.*?) cannot be implemented in class implementation",
[b]="property declared in category %0 cannot be implemented in class implementation",
[b]=a,
[g]=l,
[h]=o,
[f]="property declared in category (.*?) cannot be implemented in class implementation",
[d]={ub,1480718311,yb},
[e]=a,
[k]={{P,1134,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(PropertyLoc, diag::err_category_property) << CD->getDeclName();"}}
[d]=p,
[c]={zb,1480718311,vb},
[k]={{R,1134,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(PropertyLoc, diag::err_category_property) << CD->getDeclName();"}},
[o]={
["clang/test/SemaObjC/property-category-4.m"]={"clang/test/SemaObjC/property-category-4.m:15:13: error: property declared in category \'CAT\' cannot be implemented in class implementation","clang/test/SemaObjC/property-category-4.m:16:10: error: property declared in category \'CAT\' cannot be implemented in class implementation"}
}
},
},
["err_cc1_round_trip_fail_then_ok"]={
["err_cc1_round_trip_fail_then_ok"]={
[f]="original arguments parse failed, then succeeded in round-trip",
[h]="original arguments parse failed, then succeeded in round-trip",
[c]=l,
[j]=n,
[e]=n,
[g]="original arguments parse failed, then succeeded in round-trip",
[i]=m,
[i]=m,
[j]="original arguments parse failed, then succeeded in round\\-trip",
[b]="original arguments parse failed, then succeeded in round-trip",
[b]=a,
[g]=l,
[h]=a,
[f]="original arguments parse failed, then succeeded in round\\-trip",
[d]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[e]=a,
[k]={{O,727,"#endif\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    Diags.Report(diag::err_cc1_round_trip_fail_then_ok);"}}
[d]=a,
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{P,727,"#endif\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    Diags.Report(diag::err_cc1_round_trip_fail_then_ok);"}}
},
},
["err_cc1_round_trip_mismatch"]={
["err_cc1_round_trip_mismatch"]={
[f]="generated arguments do not match in round-trip",
[h]="generated arguments do not match in round-trip",
[c]=l,
[j]=n,
[e]=n,
[g]="generated arguments do not match in round-trip",
[i]=m,
[i]=m,
[j]="generated arguments do not match in round\\-trip",
[b]="generated arguments do not match in round-trip",
[b]=a,
[g]=l,
[h]=a,
[f]="generated arguments do not match in round\\-trip",
[d]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[e]=a,
[k]={{O,783,"#endif\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::err_cc1_round_trip_mismatch);"}}
[d]=a,
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{P,783,"#endif\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::err_cc1_round_trip_mismatch);"}}
},
},
["err_cc1_round_trip_ok_then_fail"]={
["err_cc1_round_trip_ok_then_fail"]={
[f]="generated arguments parse failed in round-trip",
[h]="generated arguments parse failed in round-trip",
[c]=l,
[j]=n,
[e]=n,
[g]="generated arguments parse failed in round-trip",
[i]=m,
[i]=m,
[j]="generated arguments parse failed in round\\-trip",
[b]="generated arguments parse failed in round-trip",
[b]=a,
[g]=l,
[h]=a,
[f]="generated arguments parse failed in round\\-trip",
[d]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[e]=a,
[k]={{O,755,"#endif\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::err_cc1_round_trip_ok_then_fail);"}}
[d]=a,
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{P,755,"#endif\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::err_cc1_round_trip_ok_then_fail);"}}
},
},
["err_cc1_unbounded_vscale_min"]={
["err_cc1_unbounded_vscale_min"]={
[h]="minimum vscale must be an unsigned integer greater than 0",
[j]=n,
[i]=m,
[b]="minimum vscale must be an unsigned integer greater than 0",
[g]=l,
[f]="minimum vscale must be an unsigned integer greater than 0",
[f]="minimum vscale must be an unsigned integer greater than 0",
[c]=l,
[e]=a,
[e]=n,
[d]=a,
[g]="minimum vscale must be an unsigned integer greater than 0",
[c]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."},
[i]=m,
[k]={{P,4053,"#include \"clang/Driver/Options.inc\"\n  // Error if -mvscale-min is unbounded.\n  if (Arg *A = Args.getLastArg(options::OPT_mvscale_min_EQ)) {\n    if (StringRef(A->getValue()).getAsInteger(10, VScaleMin) || VScaleMin == 0)\n      Diags.Report(diag::err_cc1_unbounded_vscale_min);"}}
[j]="minimum vscale must be an unsigned integer greater than 0",
[b]=a,
[h]=a,
[d]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."},
[k]={{O,4053,"#include \"clang/Driver/Options.inc\"\n  // Error if -mvscale-min is unbounded.\n  if (Arg *A = Args.getLastArg(options::OPT_mvscale_min_EQ)) {\n    if (StringRef(A->getValue()).getAsInteger(10, VScaleMin) || VScaleMin == 0)\n      Diags.Report(diag::err_cc1_unbounded_vscale_min);"}}
},
},
["err_cconv_change"]={
["err_cconv_change"]={
[f]="function declared \'A\' here was previously declared ...",
[h]="function declared \'A\' here was previously declared ...",
[c]=l,
[j]=n,
[e]=n,
[g]="function declared \'%0\' here was previously declared %select{\'%2\'|without calling convention}1",
[i]=m,
[i]=m,
[j]="function declared \'(.*?)\' here was previously declared (?:\'(.*?)\'|without calling convention)",
[b]="function declared \'%0\' here was previously declared %select{\'%2\'|without calling convention}1",
[b]=a,
[g]=l,
[h]=o,
[f]="function declared \'(.*?)\' here was previously declared (?:\'(.*?)\'|without calling convention)",
[d]={"ab26cfa58de5",1265405516,"Standardize the parsing of function type attributes in a way that"},
[e]=a,
[k]={{q,3809,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    if (!NewCCExplicit) {\n    } else if (Old->getBuiltinID()) {\n    } else {\n      Diag(New->getLocation(), diag::err_cconv_change) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << !FirstCCExplicit << (!FirstCCExplicit ? \"\" : FunctionType::getNameForCallConv(FI.getCC()));"}}
[d]=p,
[c]={"ab26cfa58de5",1265405516,"Standardize the parsing of function type attributes in a way that"},
[k]={{r,3809,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    if (!NewCCExplicit) {\n    } else if (Old->getBuiltinID()) {\n    } else {\n      Diag(New->getLocation(), diag::err_cconv_change) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << !FirstCCExplicit << (!FirstCCExplicit ? \"\" : FunctionType::getNameForCallConv(FI.getCC()));"}},
[o]={
["clang/test/Sema/ms_abi-sysv_abi.c"]={"clang/test/Sema/ms_abi-sysv_abi.c:11:32: error: function declared \'cdecl\' here was previously declared \'ms_abi\'"}
}
},
},
["err_cconv_incomplete_param_type"]={
["err_cconv_incomplete_param_type"]={
[f]="parameter A must have a complete type to use function B with the C calling convention",
[h]="parameter A must have a complete type to use function B with the C calling convention",
[c]=l,
[j]=n,
[e]=n,
[g]="parameter %0 must have a complete type to use function %1 with the %2 calling convention",
[i]=m,
[i]=m,
[j]="parameter (.*?) must have a complete type to use function (.*?) with the (.*?) calling convention",
[b]="parameter %0 must have a complete type to use function %1 with the %2 calling convention",
[b]=a,
[g]=l,
[h]=o,
[f]="parameter (.*?) must have a complete type to use function (.*?) with the (.*?) calling convention",
[d]={"e78333a0105d",1560207192,"Require stdcall etc parameters to be complete on ODR use"},
[e]=a,
[k]={{y,19011,"/// Require that all of the parameter types of function be complete. Normally,\n/// parameter types are only required to be complete when a function is called\n/// or defined, but to mangle functions with certain calling conventions, the\n/// mangler needs to know the size of the parameter list. In this situation,\n/// MSVC doesn\'t emit an error or instantiate templates. Instead, MSVC mangles\n/// the function as _foo@0, i.e. zero bytes of parameters, which will usually\n/// result in a linker error. Clang doesn\'t implement this behavior, and instead\n/// attempts to error at compile time.\nstatic void CheckCompleteParameterTypesForMangler(Sema &S, FunctionDecl *FD, SourceLocation Loc) {\n  class ParamIncompleteTypeDiagnoser : public Sema::TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      S.Diag(Loc, diag::err_cconv_incomplete_param_type) << Param->getDeclName() << FD->getDeclName() << CCName;"}}
[d]=p,
[c]={"e78333a0105d",1560207192,"Require stdcall etc parameters to be complete on ODR use"},
[k]={{z,19011,"/// Require that all of the parameter types of function be complete. Normally,\n/// parameter types are only required to be complete when a function is called\n/// or defined, but to mangle functions with certain calling conventions, the\n/// mangler needs to know the size of the parameter list. In this situation,\n/// MSVC doesn\'t emit an error or instantiate templates. Instead, MSVC mangles\n/// the function as _foo@0, i.e. zero bytes of parameters, which will usually\n/// result in a linker error. Clang doesn\'t implement this behavior, and instead\n/// attempts to error at compile time.\nstatic void CheckCompleteParameterTypesForMangler(Sema &S, FunctionDecl *FD, SourceLocation Loc) {\n  class ParamIncompleteTypeDiagnoser : public Sema::TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      S.Diag(Loc, diag::err_cconv_incomplete_param_type) << Param->getDeclName() << FD->getDeclName() << CCName;"}},
[o]={
["clang/test/Sema/calling-conv-complete-params.c"]={"clang/test/Sema/calling-conv-complete-params.c:23:45: error: parameter \'p\' must have a complete type to use function \'fwd_std\' with the stdcall calling convention","clang/test/Sema/calling-conv-complete-params.c:29:47: error: parameter \'p\' must have a complete type to use function \'fwd_fast\' with the fastcall calling convention","clang/test/Sema/calling-conv-complete-params.c:35:51: error: parameter \'p\' must have a complete type to use function \'fwd_vector\' with the vectorcall calling convention"}
}
},
},
["err_cconv_knr"]={
["err_cconv_knr"]={
[f]="function with no prototype cannot use the A calling convention",
[h]="function with no prototype cannot use the A calling convention",
[c]=l,
[j]=n,
[e]=n,
[g]="function with no prototype cannot use the %0 calling convention",
[i]=m,
[i]=m,
[j]="function with no prototype cannot use the (.*?) calling convention",
[b]="function with no prototype cannot use the %0 calling convention",
[b]=a,
[g]=l,
[h]=o,
[f]="function with no prototype cannot use the (.*?) calling convention",
[d]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with"},
[e]=a,
[k]={{q,10321,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (!getLangOpts().CPlusPlus) {\n    if (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n      if (!supportsVariadicCall(CC)) {\n        int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}}
[d]=p,
[c]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with"},
[k]={{r,10321,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (!getLangOpts().CPlusPlus) {\n    if (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n      if (!supportsVariadicCall(CC)) {\n        int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}},
[o]={
["clang/test/Sema/decl-microsoft-call-conv.c"]={"clang/test/Sema/decl-microsoft-call-conv.c:22:17: error: function with no prototype cannot use the fastcall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:24:17: error: function with no prototype cannot use the thiscall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:25:15: error: function with no prototype cannot use the pascal calling convention","clang/test/Sema/decl-microsoft-call-conv.c:26:19: error: function with no prototype cannot use the vectorcall calling convention"}
}
},
},
["err_cconv_varargs"]={
["err_cconv_varargs"]={
[f]="variadic function cannot use A calling convention",
[h]="variadic function cannot use A calling convention",
[c]=l,
[j]=n,
[e]=n,
[g]="variadic function cannot use %0 calling convention",
[i]=m,
[i]=m,
[j]="variadic function cannot use (.*?) calling convention",
[b]="variadic function cannot use %0 calling convention",
[b]=a,
[g]=l,
[h]=o,
[f]="variadic function cannot use (.*?) calling convention",
[d]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with"},
[e]=a,
[k]={{r,7999,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    if (FnP && FnP->isVariadic()) {\n      return S.Diag(attr.getLoc(), diag::err_cconv_varargs) << FunctionType::getNameForCallConv(CC);"}}
[d]=p,
[c]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with"},
[k]={{s,7999,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    if (FnP && FnP->isVariadic()) {\n      return S.Diag(attr.getLoc(), diag::err_cconv_varargs) << FunctionType::getNameForCallConv(CC);"}},
[o]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:12:27: error: variadic function cannot use swiftcall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:13:33: error: variadic function cannot use swiftasynccall calling convention"}
}
},
},
["err_cfstring_literal_not_string_constant"]={
["err_cfstring_literal_not_string_constant"]={
[h]="CFString literal is not a string constant",
[j]=n,
[i]=m,
[b]="CFString literal is not a string constant",
[g]=l,
[f]="CFString literal is not a string constant",
[f]="CFString literal is not a string constant",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="CFString literal is not a string constant",
[c]={v,1237025389,u},
[i]=m,
[k]={{t,7978,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(Arg->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << Arg->getSourceRange();"},{F,56,"ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs, ArrayRef<Expr *> Strings) {\n  // If we have a multi-part string, merge it all together.\n  if (Strings.size() != 1) {\n    for (Expr *E : Strings) {\n      // ObjC strings can\'t be wide or UTF.\n      if (!S->isOrdinary()) {\n        Diag(S->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << S->getSourceRange();"}},
[j]="CFString literal is not a string constant",
[o]={
[b]=a,
[pb]={"clang/test/Sema/builtins.c:31:13: error: CFString literal is not a string constant"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{s,7978,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(Arg->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << Arg->getSourceRange();"},{G,56,"ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs, ArrayRef<Expr *> Strings) {\n  // If we have a multi-part string, merge it all together.\n  if (Strings.size() != 1) {\n    for (Expr *E : Strings) {\n      // ObjC strings can\'t be wide or UTF.\n      if (!S->isOrdinary()) {\n        Diag(S->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << S->getSourceRange();"}}
},
},
["err_character_not_allowed"]={
["err_character_not_allowed"]={
[f]="unexpected character <U+A>",
[h]="unexpected character <U+A>",
[c]=l,
[j]=n,
[e]=n,
[g]="unexpected character <U+%0>",
[i]=m,
[i]=m,
[j]="unexpected character \\<U\\+(.*?)\\>",
[b]="unexpected character <U+%0>",
[b]=a,
[g]=l,
[h]=gb,
[f]="unexpected character \\<U\\+(.*?)\\>",
[d]={N,1625925174,M},
[e]=a,
[k]={{zb,1691,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  if (!IsFirst || InvalidOnlyAtStart) {\n  } else {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed) << Range << codepointAsHexString(CodePoint) << FixItHint::CreateRemoval(Range);"}}
[d]=ib,
[c]={N,1625925174,O},
[k]={{yb,1691,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  if (!IsFirst || InvalidOnlyAtStart) {\n  } else {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed) << Range << codepointAsHexString(CodePoint) << FixItHint::CreateRemoval(Range);"}},
[o]={
["clang/test/Preprocessor/utf8-allowed-chars.c"]={"clang/test/Preprocessor/utf8-allowed-chars.c:21:13: error: unexpected character <U+0300>"}
}
},
},
["err_character_not_allowed_identifier"]={
["err_character_not_allowed_identifier"]={
[f]="character <U+A> not allowed ... an identifier",
[h]="character <U+A> not allowed ... an identifier",
[c]=l,
[j]=n,
[e]=n,
[g]="character <U+%0> not allowed %select{in|at the start of}1 an identifier",
[i]=m,
[i]=m,
[j]="character \\<U\\+(.*?)\\> not allowed (?:in|at the start of) an identifier",
[b]="character <U+%0> not allowed %select{in|at the start of}1 an identifier",
[b]=a,
[g]=l,
[h]=gb,
[f]="character \\<U\\+(.*?)\\> not allowed (?:in|at the start of) an identifier",
[d]={N,1625925174,M},
[e]=a,
[k]={{zb,1687,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  if (!IsFirst || InvalidOnlyAtStart) {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed_identifier) << Range << codepointAsHexString(CodePoint) << int(InvalidOnlyAtStart) << FixItHint::CreateRemoval(Range);"}}
[d]=ib,
[c]={N,1625925174,O},
[k]={{yb,1687,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  if (!IsFirst || InvalidOnlyAtStart) {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed_identifier) << Range << codepointAsHexString(CodePoint) << int(InvalidOnlyAtStart) << FixItHint::CreateRemoval(Range);"}},
[o]={
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:147:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:148:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:20: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:28: error: character <U+00A2> not allowed in an identifier"}
}
},
},
["err_character_too_large"]={
["err_character_too_large"]={
[h]="character too large for enclosing character literal type",
[j]=n,
[i]=m,
[b]="character too large for enclosing character literal type",
[g]=l,
[f]="character too large for enclosing character literal type",
[f]="character too large for enclosing character literal type",
[c]=l,
[e]=a,
[e]=n,
[d]=ib,
[g]="character too large for enclosing character literal type",
[c]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals"},
[i]=m,
[k]={{"clang/lib/Lex/LiteralSupport.cpp",1761,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      if (res != llvm::conversionOK) {\n      } else {\n        for (; tmp_out_start < buffer_begin; ++tmp_out_start) {\n          if (*tmp_out_start > largest_character_for_kind) {\n            PP.Diag(Loc, diag::err_character_too_large);"},{"clang/lib/Lex/LiteralSupport.cpp",1777,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a Universal Character Name escape?\n    if (begin[1] == \'u\' || begin[1] == \'U\' || begin[1] == \'N\') {\n      if (!ProcessUCNEscape(TokBegin, begin, end, *buffer_begin, UcnLen, FullSourceLoc(Loc, PP.getSourceManager()), &PP.getDiagnostics(), PP.getLangOpts(), true)) {\n      } else if (*buffer_begin > largest_character_for_kind) {\n        PP.Diag(Loc, diag::err_character_too_large);"}},
[j]="character too large for enclosing character literal type",
[o]={
[b]=a,
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:74:10: error: character too large for enclosing character literal type"}
[h]=gb,
}
[d]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals"},
[k]={{"clang/lib/Lex/LiteralSupport.cpp",1761,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      if (res != llvm::conversionOK) {\n      } else {\n        for (; tmp_out_start < buffer_begin; ++tmp_out_start) {\n          if (*tmp_out_start > largest_character_for_kind) {\n            PP.Diag(Loc, diag::err_character_too_large);"},{"clang/lib/Lex/LiteralSupport.cpp",1777,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a Universal Character Name escape?\n    if (begin[1] == \'u\' || begin[1] == \'U\' || begin[1] == \'N\') {\n      if (!ProcessUCNEscape(TokBegin, begin, end, *buffer_begin, UcnLen, FullSourceLoc(Loc, PP.getSourceManager()), &PP.getDiagnostics(), PP.getLangOpts(), true)) {\n      } else if (*buffer_begin > largest_character_for_kind) {\n        PP.Diag(Loc, diag::err_character_too_large);"}}
},
},
["err_circular_inheritance"]={
["err_circular_inheritance"]={
[f]="circular inheritance between A and B",
[h]="circular inheritance between A and B",
[c]=l,
[j]=n,
[e]=n,
[g]="circular inheritance between %0 and %1",
[i]=m,
[i]=m,
[j]="circular inheritance between (.*?) and (.*?)",
[b]="circular inheritance between %0 and %1",
[b]=a,
[g]=l,
[h]=o,
[f]="circular inheritance between (.*?) and (.*?)",
[d]={"620047011211",1352510297,"Diagnostic circular inheritance involving dependent base classes. We"},
[e]=a,
[k]={{v,2685,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  if (BaseType->isDependentType()) {\n    // Make sure that we don\'t have circular inheritance among our dependent\n    // bases. For non-dependent bases, the check for completeness below handles\n    // this.\n    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {\n      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() || ((BaseDecl = BaseDecl->getDefinition()) && findCircularInheritance(Class, BaseDecl))) {\n        Diag(BaseLoc, diag::err_circular_inheritance) << BaseType << Context.getTypeDeclType(Class);"}}
[d]=p,
[c]={"620047011211",1352510297,"Diagnostic circular inheritance involving dependent base classes. We"},
[k]={{w,2685,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  if (BaseType->isDependentType()) {\n    // Make sure that we don\'t have circular inheritance among our dependent\n    // bases. For non-dependent bases, the check for completeness below handles\n    // this.\n    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {\n      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() || ((BaseDecl = BaseDecl->getDefinition()) && findCircularInheritance(Class, BaseDecl))) {\n        Diag(BaseLoc, diag::err_circular_inheritance) << BaseType << Context.getTypeDeclType(Class);"}},
[o]={
["clang/test/SemaTemplate/dependent-names.cpp"]={"clang/test/SemaTemplate/dependent-names.cpp:338:13: error: circular inheritance between \'Y<dim>\' and \'Y<dim>\'","clang/test/SemaTemplate/dependent-names.cpp:347:23: error: circular inheritance between \'C\' and \'rdar12629723::X::C\'","clang/test/SemaTemplate/dependent-names.cpp:360:27: error: circular inheritance between \'A\' and \'rdar12629723::X::B\'"}
}
},
},
["err_class_extension_after_impl"]={
["err_class_extension_after_impl"]={
[f]="cannot declare class extension for A after class implementation",
[h]="cannot declare class extension for A after class implementation",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot declare class extension for %0 after class implementation",
[i]=m,
[i]=m,
[j]="cannot declare class extension for (.*?) after class implementation",
[b]="cannot declare class extension for %0 after class implementation",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot declare class extension for (.*?) after class implementation",
[d]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"},
[e]=a,
[k]={{I,1851,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (!CategoryName && IDecl->getImplementation()) {\n    Diag(ClassLoc, diag::err_class_extension_after_impl) << ClassName;"}}
[d]=p,
[c]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"},
[k]={{K,1851,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (!CategoryName && IDecl->getImplementation()) {\n    Diag(ClassLoc, diag::err_class_extension_after_impl) << ClassName;"}},
[o]={
["clang/test/SemaObjC/class-extension-after-implementation.m"]={"clang/test/SemaObjC/class-extension-after-implementation.m:8:12: error: cannot declare class extension for \'A\' after class implementation"}
}
},
},
["err_class_marked_final_used_as_base"]={
["err_class_marked_final_used_as_base"]={
[f]="base A is marked \'...\'",
[h]="base A is marked \'...\'",
[c]=l,
[j]=n,
[e]=n,
[g]="base %0 is marked \'%select{final|sealed}1\'",
[i]=m,
[i]=m,
[j]="base (.*?) is marked \'(?:final|sealed)\'",
[b]="base %0 is marked \'%select{final|sealed}1\'",
[b]=a,
[g]=l,
[h]=o,
[f]="base (.*?) is marked \'(?:final|sealed)\'",
[d]={"fc1eef48980e",1295718713,"Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base."},
[e]=a,
[k]={{v,2780,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // C++ [class]p3:\n  //  If a class is marked final and it appears as a base-type-specifier in\n  //  base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(BaseLoc, diag::err_class_marked_final_used_as_base) << CXXBaseDecl->getDeclName() << FA->isSpelledAsSealed();"}}
[d]=p,
[c]={"fc1eef48980e",1295718713,"Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base."},
[k]={{w,2780,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // C++ [class]p3:\n  //  If a class is marked final and it appears as a base-type-specifier in\n  //  base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(BaseLoc, diag::err_class_marked_final_used_as_base) << CXXBaseDecl->getDeclName() << FA->isSpelledAsSealed();"}},
[o]={
["clang/test/CXX/class/p2-0x.cpp"]={"clang/test/CXX/class/p2-0x.cpp:5:11: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:12:12: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:14:33: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:25:12: error: base \'A\' is marked \'final\'"}
}
},
},
["err_class_on_template_template_param"]={
["err_class_on_template_template_param"]={
[f]="template template parameter requires \'class\'... after the parameter list",
[h]="template template parameter requires \'class\'... after the parameter list",
[c]=l,
[j]=n,
[e]=n,
[g]="template template parameter requires \'class\'%select{| or \'typename\'}0 after the parameter list",
[i]=m,
[i]=m,
[j]="template template parameter requires \'class\'(?:| or \'typename\') after the parameter list",
[b]="template template parameter requires \'class\'%select{| or \'typename\'}0 after the parameter list",
[b]=a,
[g]=l,
[h]=B,
[f]="template template parameter requires \'class\'(?:| or \'typename\') after the parameter list",
[d]={"cbd8125a6ad2",1333690003,"Restrict fixit for missing \'class\' in template template parameters."},
[e]=a,
[k]={{Hb,941,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    if (Tok.is(tok::kw_typename)) {\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17 << (Replace ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint::CreateInsertion(Tok.getLocation(), \"class \"));"},{Hb,947,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    if (Tok.is(tok::kw_typename)) {\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n    } else\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17;"}}
[d]=A,
[c]={"cbd8125a6ad2",1333690003,"Restrict fixit for missing \'class\' in template template parameters."},
[k]={{Pb,941,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    if (Tok.is(tok::kw_typename)) {\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17 << (Replace ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint::CreateInsertion(Tok.getLocation(), \"class \"));"},{Pb,947,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    if (Tok.is(tok::kw_typename)) {\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n    } else\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17;"}},
[o]={
[wb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:12:29: error: template template parameter requires \'class\' or \'typename\' after the parameter list"}
}
},
},
["err_class_property_found"]={
["err_class_property_found"]={
[f]="property A is a class property; did you mean to access it with class \'B\'?",
[h]="property A is a class property; did you mean to access it with class \'B\'?",
[c]=l,
[j]=n,
[e]=n,
[g]="property %0 is a class property; did you mean to access it with class \'%1\'?",
[i]=m,
[i]=m,
[j]="property (.*?) is a class property; did you mean to access it with class \'(.*?)\'\\?",
[b]="property %0 is a class property; did you mean to access it with class \'%1\'?",
[b]=a,
[g]=l,
[h]=o,
[f]="property (.*?) is a class property; did you mean to access it with class \'(.*?)\'\\?",
[d]={"2b2b1a920087",1467154909,"ObjC Class Property: diagnostics when accessing a class property using instance."},
[e]=a,
[k]={{G,2117,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n      if (ChosenDecl && isa<ObjCPropertyDecl>(ChosenDecl))\n        if (cast<ObjCPropertyDecl>(ChosenDecl)->isClassProperty()) {\n          Diag(MemberLoc, diag::err_class_property_found) << MemberName << OPT->getInterfaceDecl()->getName() << FixItHint::CreateReplacement(BaseExpr->getSourceRange(), OPT->getInterfaceDecl()->getName());"}}
[d]=p,
[c]={"2b2b1a920087",1467154909,"ObjC Class Property: diagnostics when accessing a class property using instance."},
[k]={{F,2117,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n      if (ChosenDecl && isa<ObjCPropertyDecl>(ChosenDecl))\n        if (cast<ObjCPropertyDecl>(ChosenDecl)->isClassProperty()) {\n          Diag(MemberLoc, diag::err_class_property_found) << MemberName << OPT->getInterfaceDecl()->getName() << FixItHint::CreateReplacement(BaseExpr->getSourceRange(), OPT->getInterfaceDecl()->getName());"}},
[o]={
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:40:5: error: property \'c\' is a class property; did you mean to access it with class \'A\'?"}
}
},
},
["err_class_redeclared_with_different_access"]={
["err_class_redeclared_with_different_access"]={
[f]="A redeclared with \'B\' access",
[h]="A redeclared with \'B\' access",
[c]=l,
[j]=n,
[e]=n,
[g]="%0 redeclared with \'%1\' access",
[i]=m,
[i]=m,
[j]="(.*?) redeclared with \'(.*?)\' access",
[b]="%0 redeclared with \'%1\' access",
[b]=a,
[g]=l,
[h]=o,
[f]="(.*?) redeclared with \'(.*?)\' access",
[d]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration."},
[e]=a,
[k]={{S,53,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(MemberDecl->getLocation(), diag::err_class_redeclared_with_different_access) << MemberDecl << LexicalAS;"}}
[d]=p,
[c]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration."},
[k]={{V,53,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(MemberDecl->getLocation(), diag::err_class_redeclared_with_different_access) << MemberDecl << LexicalAS;"}},
[o]={
["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:7:12: error: \'S\' redeclared with \'public\' access","clang/test/SemaCXX/access.cpp:14:11: error: \'C\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:22:33: error: \'A\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:32:11: error: \'X\' redeclared with \'public\' access"}
}
},
},
["err_class_stub_subclassing_mismatch"]={
["err_class_stub_subclassing_mismatch"]={
[h]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
[j]=n,
[i]=m,
[b]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
[g]=l,
[f]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
[f]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
[c]={"2c91c3b7af7c",1559189341,"Add the `objc_class_stub` attribute."},
[i]=m,
[k]={{K,4204,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (IntfDecl->hasAttr<ObjCClassStubAttr>() && !IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>())\n      Diag(IntfDecl->getLocation(), diag::err_class_stub_subclassing_mismatch);"}},
[j]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
[o]={
[b]=a,
["clang/test/SemaObjC/class-stub-attr.m"]={"clang/test/SemaObjC/class-stub-attr.m:8:12: error: \'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute"}
[h]=o,
}
[d]={"2c91c3b7af7c",1559189341,"Add the `objc_class_stub` attribute."},
[k]={{I,4204,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (IntfDecl->hasAttr<ObjCClassStubAttr>() && !IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>())\n      Diag(IntfDecl->getLocation(), diag::err_class_stub_subclassing_mismatch);"}}
},
},
["err_cmse_pi_are_incompatible"]={
["err_cmse_pi_are_incompatible"]={
[f]="cmse is not compatible with ...",
[h]="cmse is not compatible with ...",
[c]=l,
[j]=n,
[e]=n,
[g]="cmse is not compatible with %select{RWPI|ROPI}0",
[i]=m,
[i]=m,
[j]="cmse is not compatible with (?:RWPI|ROPI)",
[b]="cmse is not compatible with %select{RWPI|ROPI}0",
[b]=a,
[g]=l,
[h]=a,
[f]="cmse is not compatible with (?:RWPI|ROPI)",
[d]={tb,1534346725,rb},
[e]=a,
[d]=a,
[c]={Hb,1534346725,Fb},
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",5263,"#endif\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsROPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << IsROPI;"},{"clang/lib/Driver/ToolChains/Clang.cpp",5265,"#endif\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsRWPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << !IsRWPI;"}}
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",5263,"#endif\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsROPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << IsROPI;"},{"clang/lib/Driver/ToolChains/Clang.cpp",5265,"#endif\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsRWPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << !IsRWPI;"}}
},
},
["err_cocoa_naming_owned_rule"]={
["err_cocoa_naming_owned_rule"]={
[h]="property follows Cocoa naming convention for returning \'owned\' objects",
[j]=n,
[i]=m,
[b]="property follows Cocoa naming convention for returning \'owned\' objects",
[g]=l,
[f]="property follows Cocoa naming convention for returning \'owned\' objects",
[f]="property follows Cocoa naming convention for returning \'owned\' objects",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="property follows Cocoa naming convention for returning \'owned\' objects",
[c]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "},
[i]=m,
[k]={{R,2275,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  for (const auto *PID : D->property_impls()) {\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        if (getLangOpts().ObjCAutoRefCount)\n          Diag(PD->getLocation(), diag::err_cocoa_naming_owned_rule);"}},
[j]="property follows Cocoa naming convention for returning \'owned\' objects",
[o]={
[b]=a,
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:70:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:71:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:72:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:74:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:75:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:76:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:103:33: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:93:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:98:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:100:23: error: property follows Cocoa naming convention for returning \'owned\' objects"}
[h]=o,
}
[d]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "},
[k]={{P,2275,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  for (const auto *PID : D->property_impls()) {\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        if (getLangOpts().ObjCAutoRefCount)\n          Diag(PD->getLocation(), diag::err_cocoa_naming_owned_rule);"}}
},
},
["err_collection_expr_type"]={
["err_collection_expr_type"]={
[f]="the type A is not a pointer to a fast-enumerable object",
[h]="the type A is not a pointer to a fast-enumerable object",
[c]=l,
[j]=n,
[e]=n,
[g]="the type %0 is not a pointer to a fast-enumerable object",
[i]=m,
[i]=m,
[j]="the type (.*?) is not a pointer to a fast\\-enumerable object",
[b]="the type %0 is not a pointer to a fast-enumerable object",
[b]=a,
[g]=l,
[h]=o,
[f]="the type (.*?) is not a pointer to a fast\\-enumerable object",
[d]={u,1237025389,t},
[e]=a,
[k]={{R,2231,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  if (!pointerType)\n    return Diag(forLoc, diag::err_collection_expr_type) << collection->getType() << collection->getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{S,2231,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  if (!pointerType)\n    return Diag(forLoc, diag::err_collection_expr_type) << collection->getType() << collection->getSourceRange();"}},
[o]={
["clang/test/SemaObjCXX/instantiate-stmt.mm"]={"clang/test/SemaObjCXX/instantiate-stmt.mm:40:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:46:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:50:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:54:3: error: the type \'vector\' is not a pointer to a fast-enumerable object"}
}
},
},
["err_complex_mode_vector_type"]={
["err_complex_mode_vector_type"]={
[h]="type of machine mode does not support base vector types",
[j]=n,
[i]=m,
[b]="type of machine mode does not support base vector types",
[g]=l,
[f]="type of machine mode does not support base vector types",
[f]="type of machine mode does not support base vector types",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="type of machine mode does not support base vector types",
[c]={"326057d0da96",1434699981,"[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov"},
[i]=m,
[k]={{q,4853,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  if (VectorSize.getBoolValue()) {\n  } else if (const auto *OldVT = OldTy->getAs<VectorType>()) {\n    // Complex machine mode does not support base vector types.\n    if (ComplexMode) {\n      Diag(AttrLoc, diag::err_complex_mode_vector_type);"}},
[j]="type of machine mode does not support base vector types",
[o]={
[b]=a,
["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:26:28: error: type of machine mode does not support base vector types","clang/test/Sema/attr-mode-vector-types.c:29:30: error: type of machine mode does not support base vector types"}
[h]=o,
}
[d]={"326057d0da96",1434699981,"[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov"},
[k]={{p,4853,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  if (VectorSize.getBoolValue()) {\n  } else if (const auto *OldVT = OldTy->getAs<VectorType>()) {\n    // Complex machine mode does not support base vector types.\n    if (ComplexMode) {\n      Diag(AttrLoc, diag::err_complex_mode_vector_type);"}}
},
},
["err_compound_literal_with_address_space"]={
["err_compound_literal_with_address_space"]={
[h]="compound literal in function scope may not be qualified with an address space",
[j]=n,
[i]=m,
[b]="compound literal in function scope may not be qualified with an address space",
[g]=l,
[f]="compound literal in function scope may not be qualified with an address space",
[f]="compound literal in function scope may not be qualified with an address space",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="compound literal in function scope may not be qualified with an address space",
[c]={"7fa8af0abee8",1536175360,"Forbid address spaces on compound literals in local scope."},
[i]=m,
[k]={{z,7793,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  if (isFileScope) {\n  } else if (literalType.getAddressSpace() != LangAS::opencl_private && literalType.getAddressSpace() != LangAS::Default) {\n    Diag(LParenLoc, diag::err_compound_literal_with_address_space) << SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd());"}},
[j]="compound literal in function scope may not be qualified with an address space",
[o]={
[b]=a,
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:90:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:91:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:92:3: error: compound literal in function scope may not be qualified with an address space"}
[h]=o,
}
[d]={"7fa8af0abee8",1536175360,"Forbid address spaces on compound literals in local scope."},
[k]={{y,7793,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  if (isFileScope) {\n  } else if (literalType.getAddressSpace() != LangAS::opencl_private && literalType.getAddressSpace() != LangAS::Default) {\n    Diag(LParenLoc, diag::err_compound_literal_with_address_space) << SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd());"}}
},
},
["err_compound_qualified_function_type"]={
["err_compound_qualified_function_type"]={
[f]="... to function type ...cannot have \'A\' qualifier",
[h]="... to function type ...cannot have \'A\' qualifier",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{block pointer|pointer|reference}0 to function type %select{%2 |}1cannot have \'%3\' qualifier",
[i]=m,
[i]=m,
[j]="(?:block pointer|pointer|reference) to function type (?:(.*?) |)cannot have \'(.*?)\' qualifier",
[b]="%select{block pointer|pointer|reference}0 to function type %select{%2 |}1cannot have \'%3\' qualifier",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:block pointer|pointer|reference) to function type (?:(.*?) |)cannot have \'(.*?)\' qualifier",
[d]={"63168c75333b",1328871911,"PR11684, core issue 1417:"},
[e]=a,
[k]={{r,2133,"/// Check whether the type T is a qualified function type, and if it is,\n/// diagnose that it cannot be contained within the given kind of declarator.\nstatic bool checkQualifiedFunction(Sema &S, QualType T, SourceLocation Loc, QualifiedFunctionKind QFK) {\n  S.Diag(Loc, diag::err_compound_qualified_function_type) << QFK << isa<FunctionType>(T.IgnoreParens()) << T << getFunctionQualifiersAsString(FPT);"}}
[d]=p,
[c]={"63168c75333b",1328871911,"PR11684, core issue 1417:"},
[k]={{s,2133,"/// Check whether the type T is a qualified function type, and if it is,\n/// diagnose that it cannot be contained within the given kind of declarator.\nstatic bool checkQualifiedFunction(Sema &S, QualType T, SourceLocation Loc, QualifiedFunctionKind QFK) {\n  S.Diag(Loc, diag::err_compound_qualified_function_type) << QFK << isa<FunctionType>(T.IgnoreParens()) << T << getFunctionQualifiersAsString(FPT);"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:24:13: error: pointer to function type \'void () const\' cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:25:13: error: reference to function type \'void () const\' cannot have \'const\' qualifier"}
}
},
},
["err_concept_decls_may_only_appear_in_global_namespace_scope"]={
["err_concept_decls_may_only_appear_in_global_namespace_scope"]={
[h]="concept declarations may only appear in global or namespace scope",
[j]=n,
[i]=m,
[b]="concept declarations may only appear in global or namespace scope",
[g]=l,
[f]="concept declarations may only appear in global or namespace scope",
[f]="concept declarations may only appear in global or namespace scope",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="concept declarations may only appear in global or namespace scope",
[c]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)"},
[i]=m,
[k]={{Ob,8990,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (!DC->getRedeclContext()->isFileContext()) {\n    Diag(NameLoc, diag::err_concept_decls_may_only_appear_in_global_namespace_scope);"}},
[j]="concept declarations may only appear in global or namespace scope",
[o]={
[b]=a,
[wb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:18:32: error: concept declarations may only appear in global or namespace scope"}
[h]=o,
}
[d]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)"},
[k]={{Cb,8990,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (!DC->getRedeclContext()->isFileContext()) {\n    Diag(NameLoc, diag::err_concept_decls_may_only_appear_in_global_namespace_scope);"}}
},
},
["err_concept_definition_not_identifier"]={
["err_concept_definition_not_identifier"]={
[h]="name defined in concept definition must be an identifier",
[j]=n,
[i]=m,
[b]="name defined in concept definition must be an identifier",
[g]=l,
[f]="name defined in concept definition must be an identifier",
[f]="name defined in concept definition must be an identifier",
[c]=l,
[e]=a,
[e]=n,
[d]="Concepts Issue",
[g]="name defined in concept definition must be an identifier",
[c]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)"},
[i]=m,
[k]={{Pb,417,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  if (SS.isNotEmpty())\n    Diag(SS.getBeginLoc(), diag::err_concept_definition_not_identifier);"},{Pb,431,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  if (Result.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(Result.getBeginLoc(), diag::err_concept_definition_not_identifier);"}},
[j]="name defined in concept definition must be an identifier",
[o]={
[b]=a,
[wb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:58:20: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:61:30: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:70:30: error: name defined in concept definition must be an identifier"}
[h]="Concepts Issue",
}
[d]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)"},
[k]={{Hb,417,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  if (SS.isNotEmpty())\n    Diag(SS.getBeginLoc(), diag::err_concept_definition_not_identifier);"},{Hb,431,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  if (Result.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(Result.getBeginLoc(), diag::err_concept_definition_not_identifier);"}}
},
},
["err_concept_extra_headers"]={
["err_concept_extra_headers"]={
[h]="extraneous template parameter list in concept definition",
[j]=n,
[i]=m,
[b]="extraneous template parameter list in concept definition",
[g]=l,
[f]="extraneous template parameter list in concept definition",
[f]="extraneous template parameter list in concept definition",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="extraneous template parameter list in concept definition",
[c]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations"},
[i]=m,
[k]={{Ob,8995,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (TemplateParameterLists.size() > 1) {\n    Diag(NameLoc, diag::err_concept_extra_headers);"}},
[j]="extraneous template parameter list in concept definition",
[o]={
[b]=a,
[wb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:27:9: error: extraneous template parameter list in concept definition"}
[h]=o,
}
[d]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations"},
[k]={{Cb,8995,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (TemplateParameterLists.size() > 1) {\n    Diag(NameLoc, diag::err_concept_extra_headers);"}}
},
},
["err_concept_legacy_bool_keyword"]={
["err_concept_legacy_bool_keyword"]={
[f]="ISO C++ does not permit the \'bool\' keyword after \'concept\'",
[h]="ISO C++ does not permit the \'bool\' keyword after \'concept\'",
[c]=l,
[j]=n,
[e]=n,
[g]="ISO C++ does not permit the \'bool\' keyword after \'concept\'",
[i]=m,
[i]=m,
[j]="ISO C\\+\\+ does not permit the \'bool\' keyword after \'concept\'",
[b]="ISO C++ does not permit the \'bool\' keyword after \'concept\'",
[b]=a,
[g]=l,
[h]="Concepts Issue",
[f]="ISO C\\+\\+ does not permit the \'bool\' keyword after \'concept\'",
[d]={"9061928ebbb1",1669659698,"Stop accepting \'bool\' in a concept declaration as an extension."},
[e]=a,
[k]={{Hb,399,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  if (TryConsumeToken(tok::kw_bool, BoolKWLoc))\n    Diag(Tok.getLocation(), diag::err_concept_legacy_bool_keyword) << FixItHint::CreateRemoval(SourceLocation(BoolKWLoc));"}}
[d]="Concepts Issue",
[c]={"9061928ebbb1",1669659698,"Stop accepting \'bool\' in a concept declaration as an extension."},
[k]={{Pb,399,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  if (TryConsumeToken(tok::kw_bool, BoolKWLoc))\n    Diag(Tok.getLocation(), diag::err_concept_legacy_bool_keyword) << FixItHint::CreateRemoval(SourceLocation(BoolKWLoc));"}},
[o]={
[wb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:52:35: error: ISO C++ does not permit the \'bool\' keyword after \'concept\'"}
}
},
},
["err_concept_no_associated_constraints"]={
["err_concept_no_associated_constraints"]={
[h]="concept cannot have associated constraints",
[j]=n,
[i]=m,
[b]="concept cannot have associated constraints",
[g]=l,
[f]="concept cannot have associated constraints",
[f]="concept cannot have associated constraints",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="concept cannot have associated constraints",
[c]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations"},
[i]=m,
[k]={{Ob,9030,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (NewDecl->hasAssociatedConstraints()) {\n    Diag(NameLoc, diag::err_concept_no_associated_constraints);"}},
[j]="concept cannot have associated constraints",
[o]={
[b]=a,
["clang/test/CXX/temp/concept/p4.cpp"]={"clang/test/CXX/temp/concept/p4.cpp:4:9: error: concept cannot have associated constraints"}
[h]=o,
}
[d]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations"},
[k]={{Cb,9030,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (NewDecl->hasAssociatedConstraints()) {\n    Diag(NameLoc, diag::err_concept_no_associated_constraints);"}}
},
},
["err_concept_no_parameters"]={
["err_concept_no_parameters"]={
[h]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
[j]=n,
[i]=m,
[b]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
[g]=l,
[f]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
[f]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
[c]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)"},
[i]=m,
[k]={{Ob,9002,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (Params->size() == 0) {\n    Diag(NameLoc, diag::err_concept_no_parameters);"}},
[j]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
[o]={
[b]=a,
[wb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:8:29: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:12:48: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:55:20: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed"}
[h]=o,
}
[d]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)"},
[k]={{Cb,9002,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  if (Params->size() == 0) {\n    Diag(NameLoc, diag::err_concept_no_parameters);"}}
},
},
["err_cond_voidptr_arc"]={
["err_cond_voidptr_arc"]={
[f]="operands to conditional of types A and B are incompatible in ARC mode",
[h]="operands to conditional of types A and B are incompatible in ARC mode",
[c]=l,
[j]=n,
[e]=n,
[g]="operands to conditional of types%diff{ $ and $|}0,1 are incompatible in ARC mode",
[i]=m,
[i]=m,
[j]="operands to conditional of types(?: (.*?) and (.*?)|) are incompatible in ARC mode",
[b]="operands to conditional of types%diff{ $ and $|}0,1 are incompatible in ARC mode",
[b]=a,
[g]=l,
[h]=o,
[f]="operands to conditional of types(?: (.*?) and (.*?)|) are incompatible in ARC mode",
[d]={"8a78a58188b7",1330129424,"Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <..."},
[e]=a,
[k]={{y,9372,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // Check Objective-C object pointer types and \'void *\'\n  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{y,9507,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[d]=p,
[c]={"8a78a58188b7",1330129424,"Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <..."},
[k]={{z,9372,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // Check Objective-C object pointer types and \'void *\'\n  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{z,9507,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:96:12: error: operands to conditional of types \'id\' and \'void *\' are incompatible in ARC mode","clang/test/SemaObjC/arc-type-conversion.m:97:12: error: operands to conditional of types \'void *\' and \'id\' are incompatible in ARC mode"}
}
},
},
["err_conditional_ambiguous"]={
["err_conditional_ambiguous"]={
[f]="conditional expression is ambiguous; A can be converted to B and vice versa",
[h]="conditional expression is ambiguous; A can be converted to B and vice versa",
[c]=l,
[j]=n,
[e]=n,
[g]="conditional expression is ambiguous; %diff{$ can be converted to $ and vice versa|types can be convert to each other}0,1",
[i]=m,
[i]=m,
[j]="conditional expression is ambiguous; (?:(.*?) can be converted to (.*?) and vice versa|types can be convert to each other)",
[b]="conditional expression is ambiguous; %diff{$ can be converted to $ and vice versa|types can be convert to each other}0,1",
[b]=a,
[g]=l,
[h]=o,
[f]="conditional expression is ambiguous; (?:(.*?) can be converted to (.*?) and vice versa|types can be convert to each other)",
[d]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors..."},
[e]=a,
[k]={{x,6625,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // C++11 [expr.cond]p3\n  //  Otherwise, if the second and third operand have different types, and\n  //  either has (cv) class type [...] an attempt is made to convert each of\n  //  those operands to the type of the other.\n  if (!Context.hasSameType(LTy, RTy) && (LTy->isRecordType() || RTy->isRecordType())) {\n    //  If both can be converted, [...] the program is ill-formed.\n    if (HaveL2R && HaveR2L) {\n      Diag(QuestionLoc, diag::err_conditional_ambiguous) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[d]=p,
[c]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors..."},
[k]={{y,6625,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // C++11 [expr.cond]p3\n  //  Otherwise, if the second and third operand have different types, and\n  //  either has (cv) class type [...] an attempt is made to convert each of\n  //  those operands to the type of the other.\n  if (!Context.hasSameType(LTy, RTy) && (LTy->isRecordType() || RTy->isRecordType())) {\n    //  If both can be converted, [...] the program is ill-formed.\n    if (HaveL2R && HaveR2L) {\n      Diag(QuestionLoc, diag::err_conditional_ambiguous) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:113:13: error: conditional expression is ambiguous; \'BadBase\' can be converted to \'BadDerived\' and vice versa","clang/test/SemaCXX/conditional-expr.cpp:114:13: error: conditional expression is ambiguous; \'BadDerived\' can be converted to \'BadBase\' and vice versa"}
}
},
},
["err_conditional_ambiguous_ovl"]={
["err_conditional_ambiguous_ovl"]={
[f]="conditional expression is ambiguous; A and B can be converted to several common types",
[h]="conditional expression is ambiguous; A and B can be converted to several common types",
[c]=l,
[j]=n,
[e]=n,
[g]="conditional expression is ambiguous; %diff{$ and $|types}0,1 can be converted to several common types",
[i]=m,
[i]=m,
[j]="conditional expression is ambiguous; (?:(.*?) and (.*?)|types) can be converted to several common types",
[b]="conditional expression is ambiguous; %diff{$ and $|types}0,1 can be converted to several common types",
[b]=a,
[g]=l,
[h]=o,
[f]="conditional expression is ambiguous; (?:(.*?) and (.*?)|types) can be converted to several common types",
[d]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors..."},
[e]=a,
[k]={{x,6267,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  case OR_Ambiguous:\n    Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[d]=p,
[c]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors..."},
[k]={{y,6267,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  case OR_Ambiguous:\n    Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_conditional_vector_cond_result_mismatch"]={
["err_conditional_vector_cond_result_mismatch"]={
[h]="cannot mix vectors and extended vectors in a vector conditional",
[j]=n,
[i]=m,
[b]="cannot mix vectors and extended vectors in a vector conditional",
[g]=l,
[f]="cannot mix vectors and extended vectors in a vector conditional",
[f]="cannot mix vectors and extended vectors in a vector conditional",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot mix vectors and extended vectors in a vector conditional",
[c]={fb,1590001902,gb},
[i]=m,
[k]={{y,6338,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSVT && RHSVT) {\n    if (isa<ExtVectorType>(CondVT) != isa<ExtVectorType>(LHSVT)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_cond_result_mismatch) << /*isExtVector*/ isa<ExtVectorType>(CondVT);"}},
[j]="cannot mix vectors and extended vectors in a vector conditional",
[o]={
[b]=a,
["clang/test/SemaCXX/ext-vector-type-conditional.cpp"]={"clang/test/SemaCXX/ext-vector-type-conditional.cpp:177:12: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:180:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:186:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:192:12: error: cannot mix vectors and extended vectors in a vector conditional"}
[h]=o,
}
[d]={fb,1590001902,eb},
[k]={{x,6338,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSVT && RHSVT) {\n    if (isa<ExtVectorType>(CondVT) != isa<ExtVectorType>(LHSVT)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_cond_result_mismatch) << /*isExtVector*/ isa<ExtVectorType>(CondVT);"}}
},
},
["err_conditional_vector_element_size"]={
["err_conditional_vector_element_size"]={
[f]="vector condition type A and result type B do not have elements of the same size",
[h]="vector condition type A and result type B do not have elements of the same size",
[c]=l,
[j]=n,
[e]=n,
[g]="vector condition type %0 and result type %1 do not have elements of the same size",
[i]=m,
[i]=m,
[j]="vector condition type (.*?) and result type (.*?) do not have elements of the same size",
[b]="vector condition type %0 and result type %1 do not have elements of the same size",
[b]=a,
[g]=l,
[h]=o,
[f]="vector condition type (.*?) and result type (.*?) do not have elements of the same size",
[d]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[e]=a,
[k]={{y,8963,"/// Convert scalar operands to a vector that matches the\n///        condition in length.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// We first compute the \"result type\" for the scalar operands\n/// according to OpenCL v1.1 s6.3.i. Both operands are then converted\n/// into a vector of that type where the length matches the condition\n/// vector type. s6.11.6 requires that the element types of the result\n/// and the condition must have the same number of bits.\nstatic QualType OpenCLConvertScalarsToVectors(Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy, SourceLocation QuestionLoc) {\n  // Ensure that all types have the same number of bits\n  if (S.Context.getTypeSize(CV->getElementType()) != S.Context.getTypeSize(ResTy)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << OS.str();"},{y,9044,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  if (S.Context.getTypeSize(CVE) != S.Context.getTypeSize(RVE)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << VecResTy;"},{x,6399,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"},{x,6482,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"}}
[d]=p,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[k]={{z,8963,"/// Convert scalar operands to a vector that matches the\n///        condition in length.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// We first compute the \"result type\" for the scalar operands\n/// according to OpenCL v1.1 s6.3.i. Both operands are then converted\n/// into a vector of that type where the length matches the condition\n/// vector type. s6.11.6 requires that the element types of the result\n/// and the condition must have the same number of bits.\nstatic QualType OpenCLConvertScalarsToVectors(Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy, SourceLocation QuestionLoc) {\n  // Ensure that all types have the same number of bits\n  if (S.Context.getTypeSize(CV->getElementType()) != S.Context.getTypeSize(ResTy)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << OS.str();"},{z,9044,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  if (S.Context.getTypeSize(CVE) != S.Context.getTypeSize(RVE)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << VecResTy;"},{y,6399,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"},{y,6482,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"}},
[o]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:72:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:77:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'int2\' (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:82:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type (vector of 2 \'unsigned char\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:97:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type \'char2\' (vector of 2 \'char\' values) do not have elements of the same size"}
}
},
},
["err_conditional_vector_has_void"]={
["err_conditional_vector_has_void"]={
[f]="GNU vector conditional operand cannot be ...",
[h]="GNU vector conditional operand cannot be ...",
[c]=l,
[j]=n,
[e]=n,
[g]="GNU vector conditional operand cannot be %select{void|a throw expression}0",
[i]=m,
[i]=m,
[j]="GNU vector conditional operand cannot be (?:void|a throw expression)",
[b]="GNU vector conditional operand cannot be %select{void|a throw expression}0",
[b]=a,
[g]=l,
[h]=o,
[f]="GNU vector conditional operand cannot be (?:void|a throw expression)",
[d]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[e]=a,
[k]={{x,6569,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  if (LVoid || RVoid) {\n    // Void expressions aren\'t legal in the vector-conditional expressions.\n    if (IsVectorConditional) {\n      Diag(DiagLoc.getBegin(), diag::err_conditional_vector_has_void) << DiagLoc << IsThrow;"}}
[d]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{y,6569,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  if (LVoid || RVoid) {\n    // Void expressions aren\'t legal in the vector-conditional expressions.\n    if (IsVectorConditional) {\n      Diag(DiagLoc.getBegin(), diag::err_conditional_vector_has_void) << DiagLoc << IsThrow;"}},
[o]={
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:46:34: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:47:22: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:48:23: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:49:22: error: GNU vector conditional operand cannot be void","clang/test/SemaCXX/vector-size-conditional.cpp:50:23: error: GNU vector conditional operand cannot be void"}
}
},
},
["err_conditional_vector_mismatched"]={
["err_conditional_vector_mismatched"]={
[f]="vector operands to the vector conditional must be the same type (A and B)}",
[h]="vector operands to the vector conditional must be the same type (A and B)}",
[c]=l,
[j]=n,
[e]=n,
[g]="vector operands to the vector conditional must be the same type %diff{($ and $)|}0,1}",
[i]=m,
[i]=m,
[j]="vector operands to the vector conditional must be the same type (?:\\((.*?) and (.*?)\\)|)\\}",
[b]="vector operands to the vector conditional must be the same type %diff{($ and $)|}0,1}",
[b]=a,
[g]=l,
[h]=o,
[f]="vector operands to the vector conditional must be the same type (?:\\((.*?) and (.*?)\\)|)\\}",
[d]={fb,1590001902,eb},
[e]=a,
[k]={{x,6345,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSVT && RHSVT) {\n    // If both are vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"},{x,6432,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSBT && RHSBT) {\n    // If both are sizeless vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"}}
[d]=p,
[c]={fb,1590001902,gb},
[k]={{y,6345,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSVT && RHSVT) {\n    // If both are vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"},{y,6432,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSBT && RHSBT) {\n    // If both are sizeless vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"}},
[o]={
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:57:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'TwoInts\' (vector of 2 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:58:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourDoubles\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:93:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourFloats\' (vector of 4 \'float\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:94:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourInts\' (vector of 4 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:95:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourUInts\' (vector of 4 \'unsigned int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(4 * sizeof(double)))) double\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int\' (vector of 2 \'unsigned int\' values))}"}
}
},
},
["err_conditional_vector_operand_type"]={
["err_conditional_vector_operand_type"]={
[f]="enumeration type A is not allowed in a vector conditional",
[h]="enumeration type A is not allowed in a vector conditional",
[c]=l,
[j]=n,
[e]=n,
[g]="enumeration type %0 is not allowed in a vector conditional",
[i]=m,
[i]=m,
[j]="enumeration type (.*?) is not allowed in a vector conditional",
[b]="enumeration type %0 is not allowed in a vector conditional",
[b]=a,
[g]=l,
[h]=o,
[f]="enumeration type (.*?) is not allowed in a vector conditional",
[d]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[e]=a,
[k]={{x,6369,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSVT && RHSVT) {\n  } else if (LHSVT || RHSVT) {\n  } else {\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"},{x,6455,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSBT && RHSBT) {\n  } else if (LHSBT || RHSBT) {\n  } else {\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"}}
[d]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{y,6369,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSVT && RHSVT) {\n  } else if (LHSVT || RHSVT) {\n  } else {\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"},{y,6455,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (LHSBT && RHSBT) {\n  } else if (LHSBT || RHSBT) {\n  } else {\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"}},
[o]={
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:70:20: error: enumeration type \'E\' is not allowed in a vector conditional","clang/test/SemaCXX/vector-size-conditional.cpp:71:20: error: enumeration type \'SE\' is not allowed in a vector conditional"}
}
},
},
["err_conditional_vector_size"]={
["err_conditional_vector_size"]={
[f]="vector condition type A and result type B do not have the same number of elements",
[h]="vector condition type A and result type B do not have the same number of elements",
[c]=l,
[j]=n,
[e]=n,
[g]="vector condition type %0 and result type %1 do not have the same number of elements",
[i]=m,
[i]=m,
[j]="vector condition type (.*?) and result type (.*?) do not have the same number of elements",
[b]="vector condition type %0 and result type %1 do not have the same number of elements",
[b]=a,
[g]=l,
[h]=o,
[f]="vector condition type (.*?) and result type (.*?) do not have the same number of elements",
[d]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[e]=a,
[k]={{y,8990,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  if (CV->getNumElements() != RV->getNumElements()) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_size) << CondTy << VecResTy;"},{x,6392,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"},{x,6475,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"}}
[d]=p,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[k]={{z,8990,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  if (CV->getNumElements() != RV->getNumElements()) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_size) << CondTy << VecResTy;"},{y,6392,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"},{y,6475,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"}},
[o]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:123:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'char3\' (vector of 3 \'char\' values) do not have the same number of elements"}
}
},
},
["err_conditional_void_nonvoid"]={
["err_conditional_void_nonvoid"]={
[f]="... operand to ? is void, but ... operand is of type A",
[h]="... operand to ? is void, but ... operand is of type A",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{left|right}1 operand to ? is void, but %select{right|left}1 operand is of type %0",
[i]=m,
[i]=m,
[j]="(?:left|right) operand to \\? is void, but (?:right|left) operand is of type (.*?)",
[b]="%select{left|right}1 operand to ? is void, but %select{right|left}1 operand is of type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:left|right) operand to \\? is void, but (?:right|left) operand is of type (.*?)",
[d]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors..."},
[e]=a,
[k]={{x,6589,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  if (LVoid || RVoid) {\n    Diag(QuestionLoc, diag::err_conditional_void_nonvoid) << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[d]=p,
[c]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors..."},
[k]={{y,6589,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  if (LVoid || RVoid) {\n    Diag(QuestionLoc, diag::err_conditional_void_nonvoid) << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:88:6: error: right operand to ? is void, but left operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:89:6: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:94:7: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:95:7: error: right operand to ? is void, but left operand is of type \'int\'"}
}
},
},
["err_config_scalar_return"]={
["err_config_scalar_return"]={
[f]="CUDA special function \'A\' must have scalar return type",
[h]="CUDA special function \'A\' must have scalar return type",
[c]=l,
[j]=n,
[e]=n,
[g]="CUDA special function \'%0\' must have scalar return type",
[i]=m,
[i]=m,
[j]="CUDA special function \'(.*?)\' must have scalar return type",
[b]="CUDA special function \'%0\' must have scalar return type",
[b]=a,
[g]=l,
[h]=o,
[f]="CUDA special function \'(.*?)\' must have scalar return type",
[d]={"9e2c81f00a0a",1297285472,"AST, Sema, Serialization: keep track of cudaConfigureCall"},
[e]=a,
[k]={{q,10667,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CUDA) {\n    if (II && II->isStr(getCudaConfigureFuncName()) && !NewFD->isInvalidDecl() && NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {\n      if (!R->castAs<FunctionType>()->getReturnType()->isScalarType())\n        Diag(NewFD->getLocation(), diag::err_config_scalar_return) << getCudaConfigureFuncName();"}}
[d]=p,
[c]={"9e2c81f00a0a",1297285472,"AST, Sema, Serialization: keep track of cudaConfigureCall"},
[k]={{r,10667,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CUDA) {\n    if (II && II->isStr(getCudaConfigureFuncName()) && !NewFD->isInvalidDecl() && NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {\n      if (!R->castAs<FunctionType>()->getReturnType()->isScalarType())\n        Diag(NewFD->getLocation(), diag::err_config_scalar_return) << getCudaConfigureFuncName();"}},
[o]={
["clang/test/SemaCUDA/config-type.cu"]={"clang/test/SemaCUDA/config-type.cu:7:6: error: CUDA special function \'__cudaPushCallConfiguration\' must have scalar return type"}
}
},
},
["err_conflict_marker"]={
["err_conflict_marker"]={
[h]="version control conflict marker in file",
[j]=n,
[i]=m,
[b]="version control conflict marker in file",
[g]=l,
[f]="version control conflict marker in file",
[f]="version control conflict marker in file",
[c]=l,
[e]=a,
[e]=n,
[d]=ib,
[g]="version control conflict marker in file",
[c]={"7c027ee4c272",1260771417,"teach clang to recover gracefully from conflict markers left in source"},
[i]=m,
[k]={{yb,3162,"/// IsStartOfConflictMarker - If the specified pointer is the start of a version\n/// control conflict marker like \'<<<<<<<\', recognize it as such, emit an error\n/// and recover nicely.  This returns true if it is a conflict marker and false\n/// if not.\nbool Lexer::IsStartOfConflictMarker(const char *CurPtr) {\n  // Check to see if there is an ending marker somewhere in the buffer at the\n  // start of a line to terminate this conflict marker.\n  if (FindConflictEnd(CurPtr, BufferEnd, Kind)) {\n    Diag(CurPtr, diag::err_conflict_marker);"}},
[j]="version control conflict marker in file",
[o]={
[b]=a,
["clang/test/Lexer/conflict-marker.c"]={"clang/test/Lexer/conflict-marker.c:7:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:16:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:23:1: error: version control conflict marker in file"}
[h]=gb,
}
[d]={"7c027ee4c272",1260771417,"teach clang to recover gracefully from conflict markers left in source"},
[k]={{zb,3162,"/// IsStartOfConflictMarker - If the specified pointer is the start of a version\n/// control conflict marker like \'<<<<<<<\', recognize it as such, emit an error\n/// and recover nicely.  This returns true if it is a conflict marker and false\n/// if not.\nbool Lexer::IsStartOfConflictMarker(const char *CurPtr) {\n  // Check to see if there is an ending marker somewhere in the buffer at the\n  // start of a line to terminate this conflict marker.\n  if (FindConflictEnd(CurPtr, BufferEnd, Kind)) {\n    Diag(CurPtr, diag::err_conflict_marker);"}}
},
},
["err_conflicting_aliasing_type"]={
["err_conflicting_aliasing_type"]={
[f]="conflicting types for alias A",
[h]="conflicting types for alias A",
[c]=l,
[j]=n,
[e]=n,
[g]="conflicting types for alias %0",
[i]=m,
[i]=m,
[j]="conflicting types for alias (.*?)",
[b]="conflicting types for alias %0",
[b]=a,
[g]=l,
[h]=o,
[f]="conflicting types for alias (.*?)",
[d]={A,1236199783,z},
[e]=a,
[k]={{I,1156,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n  if (ADecl) {\n    Diag(AliasLocation, diag::err_conflicting_aliasing_type) << AliasName;"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{K,1156,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n  if (ADecl) {\n    Diag(AliasLocation, diag::err_conflicting_aliasing_type) << AliasName;"}},
[o]={
["clang/test/SemaObjC/alias-test-1.m"]={"clang/test/SemaObjC/alias-test-1.m:13:22: error: conflicting types for alias \'alias\'","clang/test/SemaObjC/alias-test-1.m:17:22: error: conflicting types for alias \'alias2\'"}
}
},
},
["err_conflicting_aligned_options"]={
["err_conflicting_aligned_options"]={
[f]="conflicting option \'-fcoro-aligned-allocation\' and \'-fno-aligned-allocation\'",
[h]="conflicting option \'-fcoro-aligned-allocation\' and \'-fno-aligned-allocation\'",
[c]=l,
[j]=n,
[e]=n,
[g]="conflicting option \'-fcoro-aligned-allocation\' and \'-fno-aligned-allocation\'",
[i]=m,
[i]=m,
[j]="conflicting option \'\\-fcoro\\-aligned\\-allocation\' and \'\\-fno\\-aligned\\-allocation\'",
[b]="conflicting option \'-fcoro-aligned-allocation\' and \'-fno-aligned-allocation\'",
[b]=a,
[g]=l,
[h]="Coroutines Issue",
[f]="conflicting option \'\\-fcoro\\-aligned\\-allocation\' and \'\\-fno\\-aligned\\-allocation\'",
[d]={N,1625925174,M}
[e]=a,
[d]="Coroutines Issue",
[c]={N,1625925174,O}
},
},
["err_conflicting_codeseg_attribute"]={
["err_conflicting_codeseg_attribute"]={
[h]="conflicting code segment specifiers",
[j]=n,
[i]=m,
[b]="conflicting code segment specifiers",
[g]=l,
[f]="conflicting code segment specifiers",
[f]="conflicting code segment specifiers",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conflicting code segment specifiers",
[c]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))"},
[i]=m,
[k]={{q,3401,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}},
[j]="conflicting code segment specifiers",
[o]={
[b]=a,
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:83:44: error: conflicting code segment specifiers","clang/test/SemaCXX/code-seg.cpp:91:47: error: conflicting code segment specifiers","clang/test/SemaCXX/code-seg.cpp:100:46: error: conflicting code segment specifiers"}
[h]=o,
}
[d]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))"},
[k]={{p,3401,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}}
},
},
["err_conflicting_ivar_bitwidth"]={
["err_conflicting_ivar_bitwidth"]={
[f]="instance variable A has conflicting bit-field width",
[h]="instance variable A has conflicting bit-field width",
[c]=l,
[j]=n,
[e]=n,
[g]="instance variable %0 has conflicting bit-field width",
[i]=m,
[i]=m,
[j]="instance variable (.*?) has conflicting bit\\-field width",
[b]="instance variable %0 has conflicting bit-field width",
[b]=a,
[g]=l,
[h]=o,
[f]="instance variable (.*?) has conflicting bit\\-field width",
[d]={A,1236199783,z},
[e]=a,
[k]={{I,2215,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n    } else if (ImplIvar->isBitField() && ClsIvar->isBitField() && ImplIvar->getBitWidthValue(Context) != ClsIvar->getBitWidthValue(Context)) {\n      Diag(ImplIvar->getBitWidth()->getBeginLoc(), diag::err_conflicting_ivar_bitwidth) << ImplIvar->getIdentifier();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{K,2215,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n    } else if (ImplIvar->isBitField() && ClsIvar->isBitField() && ImplIvar->getBitWidthValue(Context) != ClsIvar->getBitWidthValue(Context)) {\n      Diag(ImplIvar->getBitWidth()->getBeginLoc(), diag::err_conflicting_ivar_bitwidth) << ImplIvar->getIdentifier();"}},
[o]={
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:35:10: error: instance variable \'c\' has conflicting bit-field width"}
}
},
},
["err_conflicting_ivar_name"]={
["err_conflicting_ivar_name"]={
[f]="conflicting instance variable names: A vs B",
[h]="conflicting instance variable names: A vs B",
[c]=l,
[j]=n,
[e]=n,
[g]="conflicting instance variable names: %0 vs %1",
[i]=m,
[i]=m,
[j]="conflicting instance variable names\\: (.*?) vs (.*?)",
[b]="conflicting instance variable names: %0 vs %1",
[b]=a,
[g]=l,
[h]=o,
[f]="conflicting instance variable names\\: (.*?) vs (.*?)",
[d]={A,1236199783,z},
[e]=a,
[k]={{I,2222,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // Make sure the names are identical.\n    if (ImplIvar->getIdentifier() != ClsIvar->getIdentifier()) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_name) << ImplIvar->getIdentifier() << ClsIvar->getIdentifier();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{K,2222,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // Make sure the names are identical.\n    if (ImplIvar->getIdentifier() != ClsIvar->getIdentifier()) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_name) << ImplIvar->getIdentifier() << ClsIvar->getIdentifier();"}},
[o]={
["clang/test/SemaObjC/conflicting-ivar-test-1.m"]={"clang/test/SemaObjC/conflicting-ivar-test-1.m:14:13: error: conflicting instance variable names: \'XIVAR\' vs \'IVAR\'"}
}
},
},
["err_conflicting_ivar_type"]={
["err_conflicting_ivar_type"]={
[f]="instance variable A has conflicting type: B vs C",
[h]="instance variable A has conflicting type: B vs C",
[c]=l,
[j]=n,
[e]=n,
[g]="instance variable %0 has conflicting type%diff{: $ vs $|}1,2",
[i]=m,
[i]=m,
[j]="instance variable (.*?) has conflicting type(?:\\: (.*?) vs (.*?)|)",
[b]="instance variable %0 has conflicting type%diff{: $ vs $|}1,2",
[b]=a,
[g]=l,
[h]=o,
[f]="instance variable (.*?) has conflicting type(?:\\: (.*?) vs (.*?)|)",
[d]={A,1236199783,z},
[e]=a,
[k]={{I,2207,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_type) << ImplIvar->getIdentifier() << ImplIvar->getType() << ClsIvar->getType();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{K,2207,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_type) << ImplIvar->getIdentifier() << ImplIvar->getType() << ClsIvar->getType();"}},
[o]={
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:32:9: error: instance variable \'isa\' has conflicting type: \'char *\' vs \'void *\'"}
}
},
},
["err_conflicting_overriding_cc_attributes"]={
["err_conflicting_overriding_cc_attributes"]={
[f]="virtual function A has different calling convention attributes (B) than the function it overrides (which has calling convention C)",
[h]="virtual function A has different calling convention attributes (B) than the function it overrides (which has calling convention C)",
[c]=l,
[j]=n,
[e]=n,
[g]="virtual function %0 has different calling convention attributes %diff{($) than the function it overrides (which has calling convention $)|than the function it overrides}1,2",
[i]=m,
[i]=m,
[j]="virtual function (.*?) has different calling convention attributes (?:\\((.*?)\\) than the function it overrides \\(which has calling convention (.*?)\\)|than the function it overrides)",
[b]="virtual function %0 has different calling convention attributes %diff{($) than the function it overrides (which has calling convention $)|than the function it overrides}1,2",
[b]=a,
[g]=l,
[h]=o,
[f]="virtual function (.*?) has different calling convention attributes (?:\\((.*?)\\) than the function it overrides \\(which has calling convention (.*?)\\)|than the function it overrides)",
[d]={"02df2e08720f",1355075141,"Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339."},
[e]=a,
[k]={{v,18013,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(New->getLocation(), diag::err_conflicting_overriding_cc_attributes) << New->getDeclName() << New->getType() << Old->getType();"}}
[d]=p,
[c]={"02df2e08720f",1355075141,"Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339."},
[k]={{w,18013,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(New->getLocation(), diag::err_conflicting_overriding_cc_attributes) << New->getDeclName() << New->getType() << Old->getType();"}},
[o]={
["clang/test/SemaCXX/virtual-override-x86.cpp"]={"clang/test/SemaCXX/virtual-override-x86.cpp:11:33: error: virtual function \'f\' has different calling convention attributes (\'void () __attribute__((cdecl))\') than the function it overrides (which has calling convention \'void () __attribute__((thiscall))\')","clang/test/SemaCXX/virtual-override-x86.cpp:31:10: error: virtual function \'g\' has different calling convention attributes (\'void () __attribute__((thiscall))\') than the function it overrides (which has calling convention \'void () __attribute__((stdcall))\')"}
}
},
},
["err_conflicting_super_class"]={
["err_conflicting_super_class"]={
[f]="conflicting super class name A",
[h]="conflicting super class name A",
[c]=l,
[j]=n,
[e]=n,
[g]="conflicting super class name %0",
[i]=m,
[i]=m,
[j]="conflicting super class name (.*?)",
[b]="conflicting super class name %0",
[b]=a,
[g]=l,
[h]=o,
[f]="conflicting super class name (.*?)",
[d]={A,1236199783,z},
[e]=a,
[k]={{I,2039,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (SuperClassname) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    } else {\n      if (!SDecl)\n      else if (IDecl && !declaresSameEntity(IDecl->getSuperClass(), SDecl)) {\n        Diag(SuperClassLoc, diag::err_conflicting_super_class) << SDecl->getDeclName();"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{K,2039,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (SuperClassname) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    } else {\n      if (!SDecl)\n      else if (IDecl && !declaresSameEntity(IDecl->getSuperClass(), SDecl)) {\n        Diag(SuperClassLoc, diag::err_conflicting_super_class) << SDecl->getDeclName();"}},
[o]={
["clang/test/SemaObjC/alias-test-2.m"]={"clang/test/SemaObjC/alias-test-2.m:12:27: error: conflicting super class name \'Super\'"}
}
},
},
["err_conflicting_types"]={
["err_conflicting_types"]={
[f]="conflicting types for A",
[h]="conflicting types for A",
[c]=l,
[j]=n,
[e]=n,
[g]="conflicting types for %0",
[i]=m,
[i]=m,
[j]="conflicting types for (.*?)",
[b]="conflicting types for %0",
[b]=a,
[g]=l,
[h]=o,
[f]="conflicting types for (.*?)",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,4130,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // C99 6.7.5.3p15: ...If one type has a parameter type list and the other\n    // type is specified by a function definition that contains a (possibly\n    // empty) identifier list, both shall agree in the number of parameters\n    // and the type of each parameter shall be compatible with the type that\n    // results from the application of default argument promotions to the\n    // type of the corresponding identifier. ...\n    // This cannot be handled by ASTContext::typesAreCompatible() because that\n    // doesn\'t know whether the function type is for a definition or not when\n    // eventually calling ASTContext::mergeFunctionTypes(). The only situation\n    // we need to cover here is that the number of arguments agree as the\n    // default argument promotion rules were already checked by\n    // ASTContext::typesAreCompatible().\n    if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) {\n      Diag(New->getLocation(), diag::err_conflicting_types) << New;"},{q,4305,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,4130,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // C99 6.7.5.3p15: ...If one type has a parameter type list and the other\n    // type is specified by a function definition that contains a (possibly\n    // empty) identifier list, both shall agree in the number of parameters\n    // and the type of each parameter shall be compatible with the type that\n    // results from the application of default argument promotions to the\n    // type of the corresponding identifier. ...\n    // This cannot be handled by ASTContext::typesAreCompatible() because that\n    // doesn\'t know whether the function type is for a definition or not when\n    // eventually calling ASTContext::mergeFunctionTypes(). The only situation\n    // we need to cover here is that the number of arguments agree as the\n    // default argument promotion rules were already checked by\n    // ASTContext::typesAreCompatible().\n    if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) {\n      Diag(New->getLocation(), diag::err_conflicting_types) << New;"},{r,4305,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();"}},
[o]={
["clang/test/SemaCXX/ms-overload-entry-point.cpp"]={"clang/test/SemaCXX/ms-overload-entry-point.cpp:14:6: error: conflicting types for \'wWinMain\'"}
}
},
},
["err_constant_integer_arg_type"]={
["err_constant_integer_arg_type"]={
[f]="argument to A must be a constant integer",
[h]="argument to A must be a constant integer",
[c]=l,
[j]=n,
[e]=n,
[g]="argument to %0 must be a constant integer",
[i]=m,
[i]=m,
[j]="argument to (.*?) must be a constant integer",
[b]="argument to %0 must be a constant integer",
[b]=a,
[g]=l,
[h]=o,
[f]="argument to (.*?) must be a constant integer",
[d]={"8d0c621ca600",1271471183,"Consolidate most of the integer constant expression builtin requirement"},
[e]=a,
[k]={{s,8784,"/// SemaBuiltinConstantArg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression.\nbool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result) {\n  if (!(R = Arg->getIntegerConstantExpr(Context)))\n    return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) << FDecl->getDeclName() << Arg->getSourceRange();"}}
[d]=p,
[c]={"8d0c621ca600",1271471183,"Consolidate most of the integer constant expression builtin requirement"},
[k]={{t,8784,"/// SemaBuiltinConstantArg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression.\nbool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result) {\n  if (!(R = Arg->getIntegerConstantExpr(Context)))\n    return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) << FDecl->getDeclName() << Arg->getSourceRange();"}},
[o]={
["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:8:8: error: argument to \'__builtin_return_address\' must be a constant integer","clang/test/Sema/builtin-stackaddress.c:27:8: error: argument to \'__builtin_frame_address\' must be a constant integer"}
}
},
},
["err_consteval_override"]={
["err_consteval_override"]={
[f]="consteval function A cannot override a non-consteval function",
[h]="consteval function A cannot override a non-consteval function",
[c]=l,
[j]=n,
[e]=n,
[g]="consteval function %0 cannot override a non-consteval function",
[i]=m,
[i]=m,
[j]="consteval function (.*?) cannot override a non\\-consteval function",
[b]="consteval function %0 cannot override a non-consteval function",
[b]=a,
[g]=l,
[h]=o,
[f]="consteval function (.*?) cannot override a non\\-consteval function",
[d]={W,1576908663,V},
[e]=a,
[k]={{v,7040,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // 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    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}}
[d]=p,
[c]={Y,1576908663,X},
[k]={{w,7040,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // 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    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:461:20: error: consteval function \'g\' cannot override a non-consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:485:38: error: consteval function \'operator==\' cannot override a non-consteval function"}
}
},
},
["err_constexpr_body_invalid_stmt"]={
["err_constexpr_body_invalid_stmt"]={
[f]="statement not allowed in ... ...",
[h]="statement not allowed in ... ...",
[c]=l,
[j]=n,
[e]=n,
[g]="statement not allowed in %select{constexpr|consteval}1 %select{function|constructor}0",
[i]=m,
[i]=m,
[j]="statement not allowed in (?:constexpr|consteval) (?:function|constructor)",
[b]="statement not allowed in %select{constexpr|consteval}1 %select{function|constructor}0",
[b]=a,
[g]=l,
[h]=o,
[f]="statement not allowed in (?:constexpr|consteval) (?:function|constructor)",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,1990,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    default:\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"},{v,2220,"/// Check the provided statement is allowed in a constexpr function\n/// definition.\nstatic bool CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl<SourceLocation> &ReturnStmts, SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, SourceLocation &Cxx2bLoc, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::Diagnose) {\n    SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,1990,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    default:\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"},{w,2220,"/// Check the provided statement is allowed in a constexpr function\n/// definition.\nstatic bool CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl<SourceLocation> &ReturnStmts, SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, SourceLocation &Cxx2bLoc, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::Diagnose) {\n    SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:93:5: error: statement not allowed in constexpr constructor"}
}
},
},
["err_constexpr_body_no_return"]={
["err_constexpr_body_no_return"]={
[f]="no return statement in ... function",
[h]="no return statement in ... function",
[c]=l,
[j]=n,
[e]=n,
[g]="no return statement in %select{constexpr|consteval}0 function",
[i]=m,
[i]=m,
[j]="no return statement in (?:constexpr|consteval) function",
[b]="no return statement in %select{constexpr|consteval}0 function",
[b]=a,
[g]=l,
[h]=o,
[f]="no return statement in (?:constexpr|consteval) function",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,2379,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,2379,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:48:15: error: no return statement in consteval function"}
}
},
},
["err_constexpr_dtor"]={
["err_constexpr_dtor"]={
[f]="destructor cannot be declared ...",
[h]="destructor cannot be declared ...",
[c]=l,
[j]=n,
[e]=n,
[g]="destructor cannot be declared %select{<ERROR>|constexpr|consteval|constinit}0",
[i]=m,
[i]=m,
[j]="destructor cannot be declared (?:constexpr|consteval|constinit)",
[b]="destructor cannot be declared %select{<ERROR>|constexpr|consteval|constinit}0",
[b]=a,
[g]=l,
[h]=o,
[f]="destructor cannot be declared (?:constexpr|consteval|constinit)",
[d]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr."},
[e]=a,
[k]={{q,9963,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (ConstexprKind != ConstexprSpecKind::Unspecified) {\n      // C++11 [dcl.constexpr]p3: functions declared constexpr are required to\n      // be either constructors or to return a literal type. Therefore,\n      // destructors cannot be declared constexpr.\n      if (isa<CXXDestructorDecl>(NewFD) && (!getLangOpts().CPlusPlus20 || ConstexprKind == ConstexprSpecKind::Consteval)) {\n        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor) << static_cast<int>(ConstexprKind);"}}
[d]=p,
[c]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr."},
[k]={{r,9963,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (ConstexprKind != ConstexprSpecKind::Unspecified) {\n      // C++11 [dcl.constexpr]p3: functions declared constexpr are required to\n      // be either constructors or to return a literal type. Therefore,\n      // destructors cannot be declared constexpr.\n      if (isa<CXXDestructorDecl>(NewFD) && (!getLangOpts().CPlusPlus20 || ConstexprKind == ConstexprSpecKind::Consteval)) {\n        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor) << static_cast<int>(ConstexprKind);"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:11:3: error: destructor cannot be declared constexpr"}
}
},
},
["err_constexpr_dtor_subobject"]={
["err_constexpr_dtor_subobject"]={
[f]="destructor cannot be declared ... because ... does not have a constexpr destructor",
[h]="destructor cannot be declared ... because ... does not have a constexpr destructor",
[c]=l,
[j]=n,
[e]=n,
[g]="destructor cannot be declared %select{<ERROR>|constexpr|consteval|constinit}0 because %select{data member %2|base class %3}1 does not have a constexpr destructor",
[i]=m,
[i]=m,
[j]="destructor cannot be declared (?:constexpr|consteval|constinit) because (?:data member (.*?)|base class (.*?)) does not have a constexpr destructor",
[b]="destructor cannot be declared %select{<ERROR>|constexpr|consteval|constinit}0 because %select{data member %2|base class %3}1 does not have a constexpr destructor",
[b]=a,
[g]=l,
[h]=o,
[f]="destructor cannot be declared (?:constexpr|consteval|constinit) because (?:data member (.*?)|base class (.*?)) does not have a constexpr destructor",
[d]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[e]=a,
[k]={{v,1697,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject) << static_cast<int>(DD->getConstexprKind()) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}}
[d]=p,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{w,1697,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject) << static_cast<int>(DD->getConstexprKind()) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:62:15: error: destructor cannot be declared constexpr because base class \'A\' does not have a constexpr destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:66:15: error: destructor cannot be declared constexpr because data member \'a\' does not have a constexpr destructor"}
}
},
},
["err_constexpr_if_condition_expression_is_not_constant"]={
["err_constexpr_if_condition_expression_is_not_constant"]={
[h]="constexpr if condition is not a constant expression",
[j]=n,
[i]=m,
[b]="constexpr if condition is not a constant expression",
[g]=l,
[f]="constexpr if condition is not a constant expression",
[f]="constexpr if condition is not a constant expression",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="constexpr if condition is not a constant expression",
[c]={Kb,1615397021,Mb},
[i]=m,
[k]={{y,4058,"/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.\nExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr) {\n  E = VerifyIntegerConstantExpression(E.get(), &Cond, diag::err_constexpr_if_condition_expression_is_not_constant);"}},
[j]="constexpr if condition is not a constant expression",
[o]={
[b]=a,
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:63:19: error: constexpr if condition is not a constant expression","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:65:19: error: constexpr if condition is not a constant expression"}
[h]=o,
}
[d]={Lb,1615397021,Kb},
[k]={{x,4058,"/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.\nExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr) {\n  E = VerifyIntegerConstantExpression(E.get(), &Cond, diag::err_constexpr_if_condition_expression_is_not_constant);"}}
},
},
["err_constexpr_invalid_template_arg"]={
["err_constexpr_invalid_template_arg"]={
[f]="... to ...... is not allowed in a template argument",
[h]="... to ...... is not allowed in a template argument",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{pointer|reference}0 to %select{|subobject of }1%select{type_info object|string literal|temporary object|predefined \'%3\' variable}2 is not allowed in a template argument",
[i]=m,
[i]=m,
[j]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument",
[b]="%select{pointer|reference}0 to %select{|subobject of }1%select{type_info object|string literal|temporary object|predefined \'%3\' variable}2 is not allowed in a template argument",
[b]=a,
[g]=l,
[h]=a,
[f]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument",
[d]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer"},
[e]=a,
[k]={{Q,5990,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  // It\'s not a constant expression. Produce an appropriate diagnostic.\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {\n    Notes[0].second.setDiagID(diag::err_constexpr_invalid_template_arg);"}}
[d]=a,
[c]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer"},
[k]={{T,5990,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  // It\'s not a constant expression. Produce an appropriate diagnostic.\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {\n    Notes[0].second.setDiagID(diag::err_constexpr_invalid_template_arg);"}},
[o]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:233:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:234:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:239:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:240:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:244:5: error: reference to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:247:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:248:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:249:5: error: pointer to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:253:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:258:5: error: pointer to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:259:5: error: reference to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:260:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:261:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:265:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:266:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:271:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:272:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:276:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:277:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:287:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:288:7: error: pointer to subobject of predefined \'__PRETTY_FUNCTION__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:289:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:290:7: error: pointer to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:291:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:292:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:293:7: error: reference to subobject of predefined \'__func__\' variable is not allowed in a template argument"}
}
},
},
["err_constexpr_local_var_non_literal_type"]={
["err_constexpr_local_var_non_literal_type"]={
[f]="variable of non-literal type A cannot be defined in a constexpr ... before C++23",
[h]="variable of non-literal type A cannot be defined in a constexpr ... before C++23",
[c]=l,
[j]=n,
[e]=n,
[g]="variable of non-literal type %1 cannot be defined in a constexpr %select{function|constructor}0 before C++23",
[i]=m,
[i]=m,
[j]="variable of non\\-literal type (.*?) cannot be defined in a constexpr (?:function|constructor) before C\\+\\+23",
[b]="variable of non-literal type %1 cannot be defined in a constexpr %select{function|constructor}0 before C++23",
[b]=a,
[g]=l,
[h]=o,
[f]="variable of non\\-literal type (.*?) cannot be defined in a constexpr (?:function|constructor) before C\\+\\+23",
[d]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"},
[e]=a,
[k]={{v,1949,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        } else if (CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::err_constexpr_local_var_non_literal_type, isa<CXXConstructorDecl>(Dcl))) {"}}
[d]=p,
[c]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"},
[k]={{w,1949,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        } else if (CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::err_constexpr_local_var_non_literal_type, isa<CXXConstructorDecl>(Dcl))) {"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:32:14: error: variable of non-literal type \'Nonlit\' cannot be defined in a constexpr function before C++23"}
}
},
},
["err_constexpr_main"]={
["err_constexpr_main"]={
[f]="\'main\' is not allowed to be declared ...",
[h]="\'main\' is not allowed to be declared ...",
[c]=l,
[j]=n,
[e]=n,
[g]="\'main\' is not allowed to be declared %select{constexpr|consteval}0",
[i]=m,
[i]=m,
[j]="\'main\' is not allowed to be declared (?:constexpr|consteval)",
[b]="\'main\' is not allowed to be declared %select{constexpr|consteval}0",
[b]=a,
[g]=l,
[h]=o,
[f]="\'main\' is not allowed to be declared (?:constexpr|consteval)",
[d]={"3f333f2edf49",1328335817,"Disallow constexpr main."},
[e]=a,
[k]={{q,12090,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (FD->isConstexpr()) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main) << FD->isConsteval() << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());"}}
[d]=p,
[c]={"3f333f2edf49",1328335817,"Disallow constexpr main."},
[k]={{r,12090,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (FD->isConstexpr()) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main) << FD->isConsteval() << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:66:1: error: \'main\' is not allowed to be declared consteval"}
}
},
},
["err_constexpr_non_literal_param"]={
["err_constexpr_non_literal_param"]={
[f]="... ...\'s A parameter type B is not a literal type",
[h]="... ...\'s A parameter type B is not a literal type",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{constexpr|consteval}2 %select{function|constructor}1\'s %ordinal0 parameter type %3 is not a literal type",
[i]=m,
[i]=m,
[j]="(?:constexpr|consteval) (?:function|constructor)\'s (.*?) parameter type (.*?) is not a literal type",
[b]="%select{constexpr|consteval}2 %select{function|constructor}1\'s %ordinal0 parameter type %3 is not a literal type",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:constexpr|consteval) (?:function|constructor)\'s (.*?) parameter type (.*?) is not a literal type",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,1730,"/// Check whether a function\'s parameter types are all literal types. If so,\n/// return true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprParameterTypes(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(), e = FT->param_type_end(); i != e; ++i, ++ArgIndex) {\n    if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i, diag::err_constexpr_non_literal_param, ArgIndex + 1, PD->getSourceRange(), isa<CXXConstructorDecl>(FD), FD->isConsteval()))"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,1730,"/// Check whether a function\'s parameter types are all literal types. If so,\n/// return true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprParameterTypes(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(), e = FT->param_type_end(); i != e; ++i, ++ArgIndex) {\n    if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i, diag::err_constexpr_non_literal_param, ArgIndex + 1, PD->getSourceRange(), isa<CXXConstructorDecl>(FD), FD->isConsteval()))"}},
[o]={
["clang/test/CXX/basic/basic.types/p10.cpp"]={"clang/test/CXX/basic/basic.types/p10.cpp:43:29: error: constexpr function\'s 1st parameter type \'UserProvDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:48:28: error: constexpr function\'s 1st parameter type \'NonTrivDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:56:56: error: constexpr function\'s 1st parameter type \'DerivedFromNonTrivDtor<NonTrivDtorBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:80:29: error: constexpr function\'s 1st parameter type \'CopyCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:84:29: error: constexpr function\'s 1st parameter type \'MoveCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:100:43: error: constexpr function\'s 1st parameter type \'DerivedFromVBase<HasVBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:108:29: error: constexpr function\'s 1st parameter type \'NonLitMember\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:113:27: error: constexpr function\'s 1st parameter type \'NonLitBase\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:123:39: error: constexpr function\'s 1st parameter type \'MemberType<NonLiteral>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:137:23: error: constexpr function\'s 1st parameter type \'ArrBad\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:158:20: error: constexpr function\'s 1st parameter type \'D\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:177:20: error: constexpr function\'s 1st parameter type \'H\' is not a literal type"}
}
},
},
["err_constexpr_non_literal_return"]={
["err_constexpr_non_literal_return"]={
[f]="... function\'s return type A is not a literal type",
[h]="... function\'s return type A is not a literal type",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{constexpr|consteval}0 function\'s return type %1 is not a literal type",
[i]=m,
[i]=m,
[j]="(?:constexpr|consteval) function\'s return type (.*?) is not a literal type",
[b]="%select{constexpr|consteval}0 function\'s return type %1 is not a literal type",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:constexpr|consteval) function\'s return type (.*?) is not a literal type",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,1743,"/// Check whether a function\'s return type is a literal type. If so, return\n/// true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(), diag::err_constexpr_non_literal_return, FD->isConsteval()))"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,1743,"/// Check whether a function\'s return type is a literal type. If so, return\n/// true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(), diag::err_constexpr_non_literal_return, FD->isConsteval()))"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:67:26: error: constexpr function\'s return type \'T3<VirtBase>\' is not a literal type"}
}
},
},
["err_constexpr_redecl_mismatch"]={
["err_constexpr_redecl_mismatch"]={
[f]="... declaration of A follows ... declaration",
[h]="... declaration of A follows ... declaration",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{non-constexpr|constexpr|consteval}1 declaration of %0 follows %select{non-constexpr|constexpr|consteval}2 declaration",
[i]=m,
[i]=m,
[j]="(?:non\\-constexpr|constexpr|consteval) declaration of (.*?) follows (?:non\\-constexpr|constexpr|consteval) declaration",
[b]="%select{non-constexpr|constexpr|consteval}1 declaration of %0 follows %select{non-constexpr|constexpr|consteval}2 declaration",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:non\\-constexpr|constexpr|consteval) declaration of (.*?) follows (?:non\\-constexpr|constexpr|consteval) declaration",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,672,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // C++11 [dcl.constexpr]p1: If any declaration of a function or function\n  // template has a constexpr specifier then all its declarations shall\n  // contain the constexpr specifier.\n  if (New->getConstexprKind() != Old->getConstexprKind()) {\n    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch) << New << static_cast<int>(New->getConstexprKind()) << static_cast<int>(Old->getConstexprKind());"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,672,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // C++11 [dcl.constexpr]p1: If any declaration of a function or function\n  // template has a constexpr specifier then all its declarations shall\n  // contain the constexpr specifier.\n  if (New->getConstexprKind() != Old->getConstexprKind()) {\n    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch) << New << static_cast<int>(New->getConstexprKind()) << static_cast<int>(Old->getConstexprKind());"}},
[o]={
["clang/test/CXX/special/class.copy/p13-0x.cpp"]={"clang/test/CXX/special/class.copy/p13-0x.cpp:100:25: error: constexpr declaration of \'V\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:103:25: error: constexpr declaration of \'W\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:109:28: error: constexpr declaration of \'S\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:112:28: error: constexpr declaration of \'S\' follows non-constexpr declaration"}
}
},
},
["err_constexpr_return_missing_expr"]={
["err_constexpr_return_missing_expr"]={
[f]="non-void ... function A should return a value",
[h]="non-void ... function A should return a value",
[c]=l,
[j]=n,
[e]=n,
[g]="non-void %select{constexpr|consteval}1 function %0 should return a value",
[i]=m,
[i]=m,
[j]="non\\-void (?:constexpr|consteval) function (.*?) should return a value",
[b]="non-void %select{constexpr|consteval}1 function %0 should return a value",
[b]=a,
[g]=l,
[h]=o,
[f]="non\\-void (?:constexpr|consteval) function (.*?) should return a value",
[d]={"2887ad35c58d",1418458376,"Sema: Constexpr functions must have return statements which have an expr"},
[e]=a,
[k]={{R,4134,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (FnRetType->isVoidType()) {\n  } else if (!RetValExp && !HasDependentReturnType) {\n    if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n    } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n      Diag(ReturnLoc, diag::err_constexpr_return_missing_expr) << FD << FD->isConsteval();"}}
[d]=p,
[c]={"2887ad35c58d",1418458376,"Sema: Constexpr functions must have return statements which have an expr"},
[k]={{S,4134,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (FnRetType->isVoidType()) {\n  } else if (!RetValExp && !HasDependentReturnType) {\n    if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n    } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n      Diag(ReturnLoc, diag::err_constexpr_return_missing_expr) << FD << FD->isConsteval();"}},
[o]={
["clang/test/SemaCXX/consteval-return-void.cpp"]={"clang/test/SemaCXX/consteval-return-void.cpp:3:23: error: non-void consteval function \'Fun\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:5:47: error: non-void consteval function \'FunT1\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:8:42: error: non-void consteval function \'FunT2<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:12:30: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:13:30: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:14:52: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:15:52: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:19:47: error: non-void constexpr function \'operator*<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:20:47: error: non-void consteval function \'operator/<int>\' should return a value"}
}
},
},
["err_constexpr_static_mem_var_requires_init"]={
["err_constexpr_static_mem_var_requires_init"]={
[f]="declaration of constexpr static data member A requires an initializer",
[h]="declaration of constexpr static data member A requires an initializer",
[c]=l,
[j]=n,
[e]=n,
[g]="declaration of constexpr static data member %0 requires an initializer",
[i]=m,
[i]=m,
[j]="declaration of constexpr static data member (.*?) requires an initializer",
[b]="declaration of constexpr static data member %0 requires an initializer",
[b]=a,
[g]=l,
[h]=o,
[f]="declaration of constexpr static data member (.*?) requires an initializer",
[d]={"eda3c8469827",1320704177,"constexpr: static data members declared constexpr are required to have an"},
[e]=a,
[k]={{q,13686,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // C++11 [class.static.data]p3: A static data member can be declared with\n    // the constexpr specifier; if so, its declaration shall specify\n    // a brace-or-equal-initializer.\n    // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to\n    // the definition of a variable [...] or the declaration of a static data\n    // member.\n    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && !Var->isThisDeclarationADemotedDefinition()) {\n      if (Var->isStaticDataMember()) {\n        // C++1z removes the relevant rule; the in-class declaration is always\n        // a definition there.\n        if (!getLangOpts().CPlusPlus17 && !Context.getTargetInfo().getCXXABI().isMicrosoft()) {\n          Diag(Var->getLocation(), diag::err_constexpr_static_mem_var_requires_init) << Var;"}}
[d]=p,
[c]={"eda3c8469827",1320704177,"constexpr: static data members declared constexpr are required to have an"},
[k]={{r,13686,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // C++11 [class.static.data]p3: A static data member can be declared with\n    // the constexpr specifier; if so, its declaration shall specify\n    // a brace-or-equal-initializer.\n    // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to\n    // the definition of a variable [...] or the declaration of a static data\n    // member.\n    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && !Var->isThisDeclarationADemotedDefinition()) {\n      if (Var->isStaticDataMember()) {\n        // C++1z removes the relevant rule; the in-class declaration is always\n        // a definition there.\n        if (!getLangOpts().CPlusPlus17 && !Context.getTargetInfo().getCXXABI().isMicrosoft()) {\n          Diag(Var->getLocation(), diag::err_constexpr_static_mem_var_requires_init) << Var;"}},
[o]={
["clang/test/CXX/class/class.static/class.static.data/p3.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p3.cpp:10:24: error: declaration of constexpr static data member \'b\' requires an initializer","clang/test/CXX/class/class.static/class.static.data/p3.cpp:40:24: error: declaration of constexpr static data member \'b\' requires an initializer"}
}
},
},
["err_constexpr_tag"]={
["err_constexpr_tag"]={
[f]="... cannot be marked ...",
[h]="... cannot be marked ...",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{class|struct|interface|union|enum|enum class|enum struct}0 cannot be marked %select{<ERROR>|constexpr|consteval|constinit}1",
[i]=m,
[i]=m,
[j]="(?:class|struct|interface|union|enum|enum class|enum struct) cannot be marked (?:constexpr|consteval|constinit)",
[b]="%select{class|struct|interface|union|enum|enum class|enum struct}0 cannot be marked %select{<ERROR>|constexpr|consteval|constinit}1",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:class|struct|interface|union|enum|enum class|enum struct) cannot be marked (?:constexpr|consteval|constinit)",
[d]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr."},
[e]=a,
[k]={{q,5123,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (DS.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag) << GetDiagnosticTypeSpecifierID(DS) << static_cast<int>(DS.getConstexprSpecifier());"}}
[d]=p,
[c]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr."},
[k]={{r,5123,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (DS.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag) << GetDiagnosticTypeSpecifierID(DS) << static_cast<int>(DS.getConstexprSpecifier());"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:37:1: error: struct cannot be marked consteval"}
}
},
},
["err_constexpr_var_non_literal"]={
["err_constexpr_var_non_literal"]={
[f]="constexpr variable cannot have non-literal type A",
[h]="constexpr variable cannot have non-literal type A",
[c]=l,
[j]=n,
[e]=n,
[g]="constexpr variable cannot have non-literal type %0",
[i]=m,
[i]=m,
[j]="constexpr variable cannot have non\\-literal type (.*?)",
[b]="constexpr variable cannot have non-literal type %0",
[b]=a,
[g]=l,
[h]=o,
[f]="constexpr variable cannot have non\\-literal type (.*?)",
[d]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[e]=a,
[k]={{q,8762,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->isConstexpr() && !T->isDependentType() && RequireLiteralType(NewVD->getLocation(), T, diag::err_constexpr_var_non_literal)) {"}}
[d]=p,
[c]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[k]={{r,8762,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->isConstexpr() && !T->isDependentType() && RequireLiteralType(NewVD->getLocation(), T, diag::err_constexpr_var_non_literal)) {"}},
[o]={
["clang/test/CXX/special/class.ctor/p6-0x.cpp"]={"clang/test/CXX/special/class.ctor/p6-0x.cpp:25:25: error: constexpr variable cannot have non-literal type \'const NonConstexpr3\'"}
}
},
},
["err_constexpr_var_requires_const_destruction"]={
["err_constexpr_var_requires_const_destruction"]={
[f]="constexpr variable A must have constant destruction",
[h]="constexpr variable A must have constant destruction",
[c]=l,
[j]=n,
[e]=n,
[g]="constexpr variable %0 must have constant destruction",
[i]=m,
[i]=m,
[j]="constexpr variable (.*?) must have constant destruction",
[b]="constexpr variable %0 must have constant destruction",
[b]=a,
[g]=l,
[h]=o,
[f]="constexpr variable (.*?) must have constant destruction",
[d]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[e]=a,
[k]={{v,15886,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // If the destructor is constexpr, check whether the variable has constant\n  // destruction now.\n  if (Destructor->isConstexpr()) {\n    if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() && HasConstantInit) {\n      Diag(VD->getLocation(), diag::err_constexpr_var_requires_const_destruction) << VD;"}}
[d]=p,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{w,15886,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // If the destructor is constexpr, check whether the variable has constant\n  // destruction now.\n  if (Destructor->isConstexpr()) {\n    if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() && HasConstantInit) {\n      Diag(VD->getLocation(), diag::err_constexpr_var_requires_const_destruction) << VD;"}},
[o]={
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:17:19: error: constexpr variable \'mut_member\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:23:24: error: constexpr variable \'mut_store\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:35:24: error: constexpr variable \'mc\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:43:21: error: constexpr variable \'t\' must have constant destruction"}
}
},
},
["err_constexpr_var_requires_const_init"]={
["err_constexpr_var_requires_const_init"]={
[f]="constexpr variable A must be initialized by a constant expression",
[h]="constexpr variable A must be initialized by a constant expression",
[c]=l,
[j]=n,
[e]=n,
[g]="constexpr variable %0 must be initialized by a constant expression",
[i]=m,
[i]=m,
[j]="constexpr variable (.*?) must be initialized by a constant expression",
[b]="constexpr variable %0 must be initialized by a constant expression",
[b]=a,
[g]=l,
[h]=o,
[f]="constexpr variable (.*?) must be initialized by a constant expression",
[d]={"2316cd8b798b",1317323497,"constexpr: semantic checking for constexpr variables."},
[e]=a,
[k]={{q,13830,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n      if (Var->isConstexpr())\n        Diag(Var->getLocation(), diag::err_constexpr_var_requires_const_init) << Var;"},{q,14221,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n      Diag(DiagLoc, diag::err_constexpr_var_requires_const_init) << var << Init->getSourceRange();"},{E,8530,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  if (!ZeroInitializationFixit.empty()) {\n    // The initialization would have succeeded with this fixit. Since the fixit\n    // is on the error, we need to build a valid AST in this case, so this isn\'t\n    // handled in the Failed() branch above.\n    if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, ZeroInitializationFixit);"},{E,9966,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_DefaultInitOfConst:\n    if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n    } else if (const auto *VD = dyn_cast_if_present<VarDecl>(Entity.getDecl()); VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD;"}}
[d]=p,
[c]={"2316cd8b798b",1317323497,"constexpr: semantic checking for constexpr variables."},
[k]={{r,13830,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n      if (Var->isConstexpr())\n        Diag(Var->getLocation(), diag::err_constexpr_var_requires_const_init) << Var;"},{r,14221,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n      Diag(DiagLoc, diag::err_constexpr_var_requires_const_init) << var << Init->getSourceRange();"},{H,8530,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  if (!ZeroInitializationFixit.empty()) {\n    // The initialization would have succeeded with this fixit. Since the fixit\n    // is on the error, we need to build a valid AST in this case, so this isn\'t\n    // handled in the Failed() branch above.\n    if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, ZeroInitializationFixit);"},{H,9966,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_DefaultInitOfConst:\n    if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n    } else if (const auto *VD = dyn_cast_if_present<VarDecl>(Entity.getDecl()); VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD;"}},
[o]={
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:47:16: error: constexpr variable \'weak_function_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:49:16: error: constexpr variable \'weak_method_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:56:16: error: constexpr variable \'virtual_weak_method_is_non_null\' must be initialized by a constant expression"}
}
},
},
["err_constexpr_virtual"]={
["err_constexpr_virtual"]={
[h]="virtual function cannot be constexpr",
[j]=n,
[i]=m,
[b]="virtual function cannot be constexpr",
[g]=l,
[f]="virtual function cannot be constexpr",
[f]="virtual function cannot be constexpr",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="virtual function cannot be constexpr",
[c]={eb,1317436288,hb},
[i]=m,
[k]={{w,1814,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      } else {\n        Diag(Method->getLocation(), diag::err_constexpr_virtual);"}},
[j]="virtual function cannot be constexpr",
[o]={
[b]=a,
["clang/test/SemaCXX/cxx17-compat.cpp"]={"clang/test/SemaCXX/cxx17-compat.cpp:68:26: error: virtual function cannot be constexpr"}
[h]=o,
}
[d]={ab,1317436288,bb},
[k]={{v,1814,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      } else {\n        Diag(Method->getLocation(), diag::err_constexpr_virtual);"}}
},
},
["err_constexpr_virtual_base"]={
["err_constexpr_virtual_base"]={
[f]="constexpr ... not allowed in ... with virtual base class",
[h]="constexpr ... not allowed in ... with virtual base class",
[c]=l,
[j]=n,
[e]=n,
[g]="constexpr %select{member function|constructor}0 not allowed in %select{struct|interface|class}1 with virtual base %plural{1:class|:classes}2",
[i]=m,
[i]=m,
[j]="constexpr (?:member function|constructor) not allowed in (?:struct|interface|class) with virtual base (?:class|classes)",
[b]="constexpr %select{member function|constructor}0 not allowed in %select{struct|interface|class}1 with virtual base %plural{1:class|:classes}2",
[b]=a,
[g]=l,
[h]=o,
[f]="constexpr (?:member function|constructor) not allowed in (?:struct|interface|class) with virtual base (?:class|classes)",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,1789,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (MD && MD->isInstance()) {\n    if (RD->getNumVBases()) {\n      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base) << isa<CXXConstructorDecl>(NewFD) << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,1789,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (MD && MD->isInstance()) {\n    if (RD->getNumVBases()) {\n      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base) << isa<CXXConstructorDecl>(NewFD) << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:52:15: error: constexpr constructor not allowed in struct with virtual base class"}
}
},
},
["err_constexpr_vla"]={
["err_constexpr_vla"]={
[f]="variably-modified type A cannot be used in a constexpr ...",
[h]="variably-modified type A cannot be used in a constexpr ...",
[c]=l,
[j]=n,
[e]=n,
[g]="variably-modified type %0 cannot be used in a constexpr %select{function|constructor}1",
[i]=m,
[i]=m,
[j]="variably\\-modified type (.*?) cannot be used in a constexpr (?:function|constructor)",
[b]="variably-modified type %0 cannot be used in a constexpr %select{function|constructor}1",
[b]=a,
[g]=l,
[h]=o,
[f]="variably\\-modified type (.*?) cannot be used in a constexpr (?:function|constructor)",
[d]={ab,1317436288,bb},
[e]=a,
[k]={{v,1890,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::TypeAlias: {\n      if (TN->getUnderlyingType()->isVariablyModifiedType()) {\n        // Don\'t allow variably-modified types in constexpr functions.\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla) << TL.getSourceRange() << TL.getType() << isa<CXXConstructorDecl>(Dcl);"}}
[d]=p,
[c]={eb,1317436288,hb},
[k]={{w,1890,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::TypeAlias: {\n      if (TN->getUnderlyingType()->isVariablyModifiedType()) {\n        // Don\'t allow variably-modified types in constexpr functions.\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla) << TL.getSourceRange() << TL.getType() << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["err_constexpr_wrong_decl_kind"]={
["err_constexpr_wrong_decl_kind"]={
[f]="... can only be used in ... declarations",
[h]="... can only be used in ... declarations",
[c]=l,
[j]=n,
[e]=n,
[g]="%select{<ERROR>|constexpr|consteval|constinit}0 can only be used in %select{|variable and function|function|variable}0 declarations",
[i]=m,
[i]=m,
[j]="(?:constexpr|consteval|constinit) can only be used in (?:|variable and function|function|variable) declarations",
[b]="%select{<ERROR>|constexpr|consteval|constinit}0 can only be used in %select{|variable and function|function|variable}0 declarations",
[b]=a,
[g]=l,
[h]=o,
[f]="(?:constexpr|consteval|constinit) can only be used in (?:|variable and function|function|variable) declarations",
[d]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier"},
[e]=a,
[k]={{q,5127,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (DS.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n    else\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(DS.getConstexprSpecifier());"},{q,7790,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  case ConstexprSpecKind::Consteval:\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{q,9181,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (ConstexprKind == ConstexprSpecKind::Constinit) {\n    SemaRef.Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(ConstexprKind);"}}
[d]=p,
[c]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier"},
[k]={{r,5127,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (DS.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n    else\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(DS.getConstexprSpecifier());"},{r,7790,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  case ConstexprSpecKind::Consteval:\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{r,9181,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (ConstexprKind == ConstexprSpecKind::Constinit) {\n    SemaRef.Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(ConstexprKind);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:44:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:48:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:50:1: error: constinit can only be used in variable declarations"}
}
},
},
["err_constinit_added_too_late"]={
["err_constinit_added_too_late"]={
[h]="\'constinit\' specifier added after initialization of variable",
[j]=n,
[i]=m,
[b]="\'constinit\' specifier added after initialization of variable",
[g]=l,
[f]="\'constinit\' specifier added after initialization of variable",
[f]="\'constinit\' specifier added after initialization of variable",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'constinit\' specifier added after initialization of variable",
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[i]=m,
[k]={{r,3172,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  if (AttrBeforeInit) {\n  } else {\n    S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}},
[j]="\'constinit\' specifier added after initialization of variable",
[o]={
[b]=a,
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:15:10: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:40:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:41:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:42:1: error: \'constinit\' specifier added after initialization of variable"}
[h]=o,
}
[d]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{q,3172,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  if (AttrBeforeInit) {\n  } else {\n    S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}}
},
},
["err_constinit_local_variable"]={
["err_constinit_local_variable"]={
[h]="local variable cannot be declared \'constinit\'",
[j]=n,
[i]=m,
[b]="local variable cannot be declared \'constinit\'",
[g]=l,
[f]="local variable cannot be declared \'constinit\'",
[f]="local variable cannot be declared \'constinit\'",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="local variable cannot be declared \'constinit\'",
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[i]=m,
[k]={{r,7808,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  case ConstexprSpecKind::Constinit:\n    if (!NewVD->hasGlobalStorage())\n      Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constinit_local_variable);"}},
[j]="local variable cannot be declared \'constinit\'",
[o]={
[b]=a,
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:10:3: error: local variable cannot be declared \'constinit\'"}
[h]=o,
}
[d]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{q,7808,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  case ConstexprSpecKind::Constinit:\n    if (!NewVD->hasGlobalStorage())\n      Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constinit_local_variable);"}}
},
},
["err_constrained_non_templated_function"]={
["err_constrained_non_templated_function"]={
[f]="non-templated function cannot have a requires clause",
[h]="non-templated function cannot have a requires clause",
[c]=l,
[j]=n,
[e]=n,
[g]="non-templated function cannot have a requires clause",
[i]=m,
[i]=m,
[j]="non\\-templated function cannot have a requires clause",
[b]="non-templated function cannot have a requires clause",
[b]=a,
[g]=l,
[h]=o,
[f]="non\\-templated function cannot have a requires clause",
[d]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[e]=a,
[k]={{q,11984,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    // C++20: dcl.decl.general p4:\n    // The optional requires-clause ([temp.pre]) in an init-declarator or\n    // member-declarator shall be present only if the declarator declares a\n    // templated function ([dcl.fct]).\n    if (Expr *TRC = NewFD->getTrailingRequiresClause()) {\n      if (!NewFD->getDescribedFunctionTemplate() && // -a template\n        Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"},{lb,1415,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // C++20: dcl.decl.general p4:\n  // The optional requires-clause ([temp.pre]) in an init-declarator or\n  // member-declarator shall be present only if the declarator declares a\n  // templated function ([dcl.fct]).\n  if (Expr *TRC = Method->getTrailingRequiresClause()) {\n    // Note: we only have to check if this is defined in a template entity, OR\n    // if we are a template, since the rest don\'t apply. The requires clause\n    // applies to the call operator, which we already know is a member function,\n    // AND defined.\n    if (!Method->getDescribedFunctionTemplate() && !Method->isTemplated()) {\n      Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"}}
[d]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{r,11984,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    // C++20: dcl.decl.general p4:\n    // The optional requires-clause ([temp.pre]) in an init-declarator or\n    // member-declarator shall be present only if the declarator declares a\n    // templated function ([dcl.fct]).\n    if (Expr *TRC = NewFD->getTrailingRequiresClause()) {\n      if (!NewFD->getDescribedFunctionTemplate() && // -a template\n        Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"},{lb,1415,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // C++20: dcl.decl.general p4:\n  // The optional requires-clause ([temp.pre]) in an init-declarator or\n  // member-declarator shall be present only if the declarator declares a\n  // templated function ([dcl.fct]).\n  if (Expr *TRC = Method->getTrailingRequiresClause()) {\n    // Note: we only have to check if this is defined in a template entity, OR\n    // if we are a template, since the rest don\'t apply. The requires clause\n    // applies to the call operator, which we already know is a member function,\n    // AND defined.\n    if (!Method->getDescribedFunctionTemplate() && !Method->isTemplated()) {\n      Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"}},
[o]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:11:34: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:12:42: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:13:53: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:15:35: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:16:31: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:18:30: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:20:23: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:17: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:35: error: non-templated function cannot have a requires clause"}
}
},
},
["err_constrained_virtual_method"]={
["err_constrained_virtual_method"]={
[h]="virtual function cannot have a requires clause",
[j]=n,
[i]=m,
[b]="virtual function cannot have a requires clause",
[g]=l,
[f]="virtual function cannot have a requires clause",
[f]="virtual function cannot have a requires clause",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="virtual function cannot have a requires clause",
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]=m,
[k]={{r,11948,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    // Find any virtual functions that this function overrides.\n    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {\n      if (Method->isVirtual() && NewFD->getTrailingRequiresClause())\n        Diag(NewFD->getTrailingRequiresClause()->getBeginLoc(), diag::err_constrained_virtual_method);"}},
[j]="virtual function cannot have a requires clause",
[o]={
[b]=a,
["clang/test/CXX/class.derived/class.virtual/p6.cpp"]={"clang/test/CXX/class.derived/class.virtual/p6.cpp:5:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:7:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:13:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:17:54: error: virtual function cannot have a requires clause"}
[h]=o,
}
[d]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{q,11948,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    // Find any virtual functions that this function overrides.\n    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {\n      if (Method->isVirtual() && NewFD->getTrailingRequiresClause())\n        Diag(NewFD->getTrailingRequiresClause()->getBeginLoc(), diag::err_constrained_virtual_method);"}}
},
},
["err_constraint_depends_on_self"]={
["err_constraint_depends_on_self"]={
[f]="satisfaction of constraint \'A\' depends on itself",
[h]="satisfaction of constraint \'A\' depends on itself",
[c]=l,
[j]=n,
[e]=n,
[g]="satisfaction of constraint \'%0\' depends on itself",
[i]=m,
[i]=m,
[j]="satisfaction of constraint \'(.*?)\' depends on itself",
[b]="satisfaction of constraint \'%0\' depends on itself",
[b]=a,
[g]=l,
[h]=o,
[f]="satisfaction of constraint \'(.*?)\' depends on itself",
[d]={N,1625925174,M},
[e]=a,
[k]={{"clang/lib/Sema/SemaConcept.cpp",309,"static bool DiagRecursiveConstraintEval(Sema &S, llvm::FoldingSetNodeID &ID, const NamedDecl *Templ, const Expr *E, const MultiLevelTemplateArgumentList &MLTAL) {\n  // Note that we have to do this with our own collection, because there are\n  // times where a constraint-expression check can cause us to need to evaluate\n  // other constriants that are unrelated, such as when evaluating a recovery\n  // expression, or when trying to determine the constexpr-ness of special\n  // members. Otherwise we could just use the\n  // Sema::InstantiatingTemplate::isAlreadyBeingInstantiated function.\n  if (S.SatisfactionStackContains(Templ, ID)) {\n    S.Diag(E->getExprLoc(), diag::err_constraint_depends_on_self) << const_cast<Expr *>(E) << E->getSourceRange();"}}
[d]=p,
[c]={N,1625925174,O},
[k]={{"clang/lib/Sema/SemaConcept.cpp",309,"static bool DiagRecursiveConstraintEval(Sema &S, llvm::FoldingSetNodeID &ID, const NamedDecl *Templ, const Expr *E, const MultiLevelTemplateArgumentList &MLTAL) {\n  // Note that we have to do this with our own collection, because there are\n  // times where a constraint-expression check can cause us to need to evaluate\n  // other constriants that are unrelated, such as when evaluating a recovery\n  // expression, or when trying to determine the constexpr-ness of special\n  // members. Otherwise we could just use the\n  // Sema::InstantiatingTemplate::isAlreadyBeingInstantiated function.\n  if (S.SatisfactionStackContains(Templ, ID)) {\n    S.Diag(E->getExprLoc(), diag::err_constraint_depends_on_self) << const_cast<Expr *>(E) << E->getSourceRange();"}},
[o]={
["clang/test/SemaTemplate/concepts-recursive-inst.cpp"]={"clang/test/SemaTemplate/concepts-recursive-inst.cpp:63:12: error: satisfaction of constraint \'Inf<Inf auto>\' depends on itself","clang/test/SemaTemplate/concepts-recursive-inst.cpp:91:21: error: satisfaction of constraint \'requires (T a) { foo(a); }\' depends on itself"}
}
},
},
["err_constructor_bad_name"]={
["err_constructor_bad_name"]={
[f]="missing return type for function A; did you mean the constructor name B?",
[h]="missing return type for function A; did you mean the constructor name B?",
[c]=l,
[j]=n,
[e]=n,
[g]="missing return type for function %0; did you mean the constructor name %1?",
[i]=m,
[i]=m,
[j]="missing return type for function (.*?); did you mean the constructor name (.*?)\\?",
[b]="missing return type for function %0; did you mean the constructor name %1?",
[b]=a,
[g]=l,
[h]=B,
[f]="missing return type for function (.*?); did you mean the constructor name (.*?)\\?",
[d]={"fb8b7b9a1c52",1381795226,"PR17567: Improve diagnostic for a mistyped constructor name. If we see something"},
[e]=a,
[k]={{D,2877,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // Determine whether this identifier could plausibly be the name of something\n  // being declared (with a missing type).\n  if (!isTypeSpecifier(DSC) && (!SS || DSC == DeclSpecContext::DSC_top_level || DSC == DeclSpecContext::DSC_class)) {\n    case tok::l_paren: {\n      // If we\'re in a context where we could be declaring a constructor,\n      // check whether this is a constructor declaration with a bogus name.\n      if (DSC == DeclSpecContext::DSC_class || (DSC == DeclSpecContext::DSC_top_level && SS)) {\n        if (Actions.isCurrentClassNameTypo(II, SS)) {\n          Diag(Loc, diag::err_constructor_bad_name) << Tok.getIdentifierInfo() << II << FixItHint::CreateReplacement(Tok.getLocation(), II->getName());"}}
[d]=A,
[c]={"fb8b7b9a1c52",1381795226,"PR17567: Improve diagnostic for a mistyped constructor name. If we see something"},
[k]={{E,2877,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // Determine whether this identifier could plausibly be the name of something\n  // being declared (with a missing type).\n  if (!isTypeSpecifier(DSC) && (!SS || DSC == DeclSpecContext::DSC_top_level || DSC == DeclSpecContext::DSC_class)) {\n    case tok::l_paren: {\n      // If we\'re in a context where we could be declaring a constructor,\n      // check whether this is a constructor declaration with a bogus name.\n      if (DSC == DeclSpecContext::DSC_class || (DSC == DeclSpecContext::DSC_top_level && SS)) {\n        if (Actions.isCurrentClassNameTypo(II, SS)) {\n          Diag(Loc, diag::err_constructor_bad_name) << Tok.getIdentifierInfo() << II << FixItHint::CreateReplacement(Tok.getLocation(), II->getName());"}},
[o]={
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:247:5: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?","clang/test/Parser/cxx-decl.cpp:250:11: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?"}
}
},
},
["err_constructor_byvalue_arg"]={
["err_constructor_byvalue_arg"]={
[h]="copy constructor must pass its first argument by reference",
[j]=n,
[i]=m,
[b]="copy constructor must pass its first argument by reference",
[g]=l,
[f]="copy constructor must pass its first argument by reference",
[f]="copy constructor must pass its first argument by reference",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="copy constructor must pass its first argument by reference",
[c]={C,1236199783,B},
[i]=m,
[k]={{w,10792,"/// CheckConstructor - Checks a fully-formed constructor for\n/// well-formedness, issuing any diagnostics required. Returns true if\n/// the constructor declarator is invalid.\nvoid Sema::CheckConstructor(CXXConstructorDecl *Constructor) {\n  // C++ [class.copy]p3:\n  //  A declaration of a constructor for a class X is ill-formed if\n  //  its first parameter is of type (optionally cv-qualified) X and\n  //  either there are no other parameters or else all other\n  //  parameters have default arguments.\n  if (!Constructor->isInvalidDecl() && Constructor->hasOneParamOrDefaultArgs() && Constructor->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {\n    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {\n      Diag(ParamLoc, diag::err_constructor_byvalue_arg) << FixItHint::CreateInsertion(ParamLoc, ConstRef);"}},
[j]="copy constructor must pass its first argument by reference",
[o]={
[b]=a,
["clang/test/SemaCXX/copy-constructor-error.cpp"]={"clang/test/SemaCXX/copy-constructor-error.cpp:4:8: error: copy constructor must pass its first argument by reference"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{v,10792,"/// CheckConstructor - Checks a fully-formed constructor for\n/// well-formedness, issuing any diagnostics required. Returns true if\n/// the constructor declarator is invalid.\nvoid Sema::CheckConstructor(CXXConstructorDecl *Constructor) {\n  // C++ [class.copy]p3:\n  //  A declaration of a constructor for a class X is ill-formed if\n  //  its first parameter is of type (optionally cv-qualified) X and\n  //  either there are no other parameters or else all other\n  //  parameters have default arguments.\n  if (!Constructor->isInvalidDecl() && Constructor->hasOneParamOrDefaultArgs() && Constructor->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {\n    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {\n      Diag(ParamLoc, diag::err_constructor_byvalue_arg) << FixItHint::CreateInsertion(ParamLoc, ConstRef);"}}
},
},
["err_constructor_cannot_be"]={
["err_constructor_cannot_be"]={
[f]="constructor cannot be declared \'A\'",
[h]="constructor cannot be declared \'A\'",
[c]=l,
[j]=n,
[e]=n,
[g]="constructor cannot be declared \'%0\'",
[i]=m,
[i]=m,
[j]="constructor cannot be declared \'(.*?)\'",
[b]="constructor cannot be declared \'%0\'",
[b]=a,
[g]=l,
[h]=o,
[f]="constructor cannot be declared \'(.*?)\'",
[d]={A,1236199783,z},
[e]=a,
[k]={{v,10718,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // C++ [class.ctor]p3:\n  //  A constructor shall not be virtual (10.3) or static (9.4). A\n  //  constructor can be invoked for a const, volatile or const\n  //  volatile object. A constructor shall not be declared const,\n  //  volatile, or const volatile (9.3.2).\n  if (isVirtual) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"virtual\" << SourceRange(D.getDeclSpec().getVirtualSpecLoc()) << SourceRange(D.getIdentifierLoc());"},{v,10725,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"static\" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << SourceRange(D.getIdentifierLoc());"}}
[d]=p,
[c]={C,1236199783,B},
[k]={{w,10718,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // C++ [class.ctor]p3:\n  //  A constructor shall not be virtual (10.3) or static (9.4). A\n  //  constructor can be invoked for a const, volatile or const\n  //  volatile object. A constructor shall not be declared const,\n  //  volatile, or const volatile (9.3.2).\n  if (isVirtual) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"virtual\" << SourceRange(D.getDeclSpec().getVirtualSpecLoc()) << SourceRange(D.getIdentifierLoc());"},{w,10725,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"static\" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << SourceRange(D.getIdentifierLoc());"}},
[o]={
["clang/test/SemaCXX/constructor.cpp"]={"clang/test/SemaCXX/constructor.cpp:14:10: error: constructor cannot be declared \'static\'","clang/test/SemaCXX/constructor.cpp:15:11: error: constructor cannot be declared \'virtual\'"}
}
},
},
["err_constructor_redeclared"]={
["err_constructor_redeclared"]={
[h]="constructor cannot be redeclared",
[j]=n,
[i]=m,
[b]="constructor cannot be redeclared",
[g]=l,
[f]="constructor cannot be redeclared",
[f]="constructor cannot be redeclared",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="constructor cannot be redeclared",
[c]={C,1236199783,B},
[i]=m,
[k]={{r,3999,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (OldMethod && NewMethod) {\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          if (isa<CXXConstructorDecl>(OldMethod))\n            NewDiag = diag::err_constructor_redeclared;"}},
[j]="constructor cannot be redeclared",
[o]={
[b]=a,
["clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp:46:3: error: constructor cannot be redeclared"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{q,3999,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (OldMethod && NewMethod) {\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          if (isa<CXXConstructorDecl>(OldMethod))\n            NewDiag = diag::err_constructor_redeclared;"}}
},
},
["err_constructor_return_type"]={
["err_constructor_return_type"]={
[h]="constructor cannot have a return type",
[j]=n,
[i]=m,
[b]="constructor cannot have a return type",
[g]=l,
[f]="constructor cannot have a return type",
[f]="constructor cannot have a return type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="constructor cannot have a return type",
[c]={C,1236199783,B},
[i]=m,
[k]={{r,9271,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n  } else if (DC->isRecord()) {\n    // If the name of the function is the same as the name of the record,\n    // then this must be an invalid constructor that has a return type.\n    // (The parser checks for a return type and makes the declarator a\n    // constructor if it has no return type).\n    if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type) << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"},{w,10734,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {\n    diagnoseIgnoredQualifiers(diag::err_constructor_return_type, TypeQuals, SourceLocation(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc());"}},
[j]="constructor cannot have a return type",
[o]={
[b]=a,
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:81:14: error: constructor cannot have a return type"}
[h]=o,
}
[d]={A,1236199783,z},
[k]={{q,9271,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n  } else if (DC->isRecord()) {\n    // If the name of the function is the same as the name of the record,\n    // then this must be an invalid constructor that has a return type.\n    // (The parser checks for a return type and makes the declarator a\n    // constructor if it has no return type).\n    if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type) << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"},{v,10734,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {\n    diagnoseIgnoredQualifiers(diag::err_constructor_return_type, TypeQuals, SourceLocation(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc());"}}
},
},
["err_continuation_class"]={
["err_continuation_class"]={
[h]="class extension has no primary class",
[j]=n,
[i]=m,
[b]="class extension has no primary class",
[g]=l,
[f]="class extension has no primary class",
[f]="class extension has no primary class",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="class extension has no primary class",
[c]={C,1236199783,B},
[i]=m,
[k]={{R,429,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // We need to look in the @interface to see if the @property was\n  // already declared.\n  if (!CCPrimary) {\n    Diag(CDecl->getLocation(), diag::err_continuation_class);"}}
[j]="class extension has no primary class",
[b]=a,
[h]=o,
[d]={A,1236199783,z},
[k]={{P,429,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // We need to look in the @interface to see if the @property was\n  // already declared.\n  if (!CCPrimary) {\n    Diag(CDecl->getLocation(), diag::err_continuation_class);"}}
},
},
["err_continue_from_cond_var_init"]={
["err_continue_from_cond_var_init"]={
[h]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
[j]=n,
[i]=m,
[b]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
[g]=l,
[f]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
[f]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
[c]={fb,1590001902,gb},
[i]=m,
[k]={{S,3337,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  if (S->isConditionVarScope()) {\n    return StmtError(Diag(ContinueLoc, diag::err_continue_from_cond_var_init));"}},
[j]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
[o]={
[b]=a,
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:643:20: error: cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable"}
[h]=o,
}
[d]={fb,1590001902,eb},
[k]={{R,3337,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  if (S->isConditionVarScope()) {\n    return StmtError(Diag(ContinueLoc, diag::err_continue_from_cond_var_init));"}}
},
},
["err_continue_not_in_loop"]={
["err_continue_not_in_loop"]={
[h]="\'continue\' statement not in loop statement",
[j]=n,
[i]=m,
[b]="\'continue\' statement not in loop statement",
[g]=l,
[f]="\'continue\' statement not in loop statement",
[f]="\'continue\' statement not in loop statement",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="\'continue\' statement not in loop statement",
[c]={v,1237025389,u},
[i]=m,
[k]={{S,3331,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  if (!S) {\n    return StmtError(Diag(ContinueLoc, diag::err_continue_not_in_loop));"}},
[j]="\'continue\' statement not in loop statement",
[o]={
[b]=a,
["clang/test/Parser/bad-control.c"]={"clang/test/Parser/bad-control.c:8:3: error: \'continue\' statement not in loop statement","clang/test/Parser/bad-control.c:23:10: error: \'continue\' statement not in loop statement"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{R,3331,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  if (!S) {\n    return StmtError(Diag(ContinueLoc, diag::err_continue_not_in_loop));"}}
},
},
["err_conv_function_not_member"]={
["err_conv_function_not_member"]={
[f]="conversion function must be a non-static member function",
[h]="conversion function must be a non-static member function",
[c]=l,
[j]=n,
[e]=n,
[g]="conversion function must be a non-static member function",
[i]=m,
[i]=m,
[j]="conversion function must be a non\\-static member function",
[b]="conversion function must be a non-static member function",
[b]=a,
[g]=l,
[h]=o,
[f]="conversion function must be a non\\-static member function",
[d]={u,1237025389,t},
[e]=a,
[k]={{q,9239,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n    if (!DC->isRecord()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member);"},{v,10990,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p1:\n  //  Neither parameter types nor return type can be specified. The\n  //  type of a conversion function (8.3.5) is \"function taking no\n  //  parameter returning conversion-type-id.\"\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member) << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << D.getName().getSourceRange();"}}
[d]=p,
[c]={v,1237025389,u},
[k]={{r,9239,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n    if (!DC->isRecord()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member);"},{w,10990,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p1:\n  //  Neither parameter types nor return type can be specified. The\n  //  type of a conversion function (8.3.5) is \"function taking no\n  //  parameter returning conversion-type-id.\"\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member) << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << D.getName().getSourceRange();"}},
[o]={
[Db]={"clang/test/SemaCXX/conversion-function.cpp:19:10: error: conversion function must be a non-static member function","clang/test/SemaCXX/conversion-function.cpp:22:1: error: conversion function must be a non-static member function"}
}
},
},
["err_conv_function_redeclared"]={
["err_conv_function_redeclared"]={
[h]="conversion function cannot be redeclared",
[j]=n,
[i]=m,
[b]="conversion function cannot be redeclared",
[g]=l,
[f]="conversion function cannot be redeclared",
[f]="conversion function cannot be redeclared",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conversion function cannot be redeclared",
[c]={v,1237025389,u},
[i]=m,
[k]={{r,4003,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (OldMethod && NewMethod) {\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          if (isa<CXXConstructorDecl>(OldMethod))\n          else if (isa<CXXDestructorDecl>(NewMethod))\n          else if (isa<CXXConversionDecl>(NewMethod))\n            NewDiag = diag::err_conv_function_redeclared;"}},
[j]="conversion function cannot be redeclared",
[o]={
[b]=a,
[Db]={"clang/test/SemaCXX/conversion-function.cpp:52:3: error: conversion function cannot be redeclared","clang/test/SemaCXX/conversion-function.cpp:53:3: error: conversion function cannot be redeclared"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{q,4003,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (OldMethod && NewMethod) {\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          if (isa<CXXConstructorDecl>(OldMethod))\n          else if (isa<CXXDestructorDecl>(NewMethod))\n          else if (isa<CXXConversionDecl>(NewMethod))\n            NewDiag = diag::err_conv_function_redeclared;"}}
},
},
["err_conv_function_return_type"]={
["err_conv_function_return_type"]={
[h]="conversion function cannot have a return type",
[j]=n,
[i]=m,
[b]="conversion function cannot have a return type",
[g]=l,
[f]="conversion function cannot have a return type",
[f]="conversion function cannot have a return type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conversion function cannot have a return type",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,11011,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type) << SourceRange(DS.getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"}},
[j]="conversion function cannot have a return type",
[o]={
[b]=a,
[Db]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have a return type"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,11011,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type) << SourceRange(DS.getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"}}
},
},
["err_conv_function_to_array"]={
["err_conv_function_to_array"]={
[h]="conversion function cannot convert to an array type",
[j]=n,
[i]=m,
[b]="conversion function cannot convert to an array type",
[g]=l,
[f]="conversion function cannot convert to an array type",
[f]="conversion function cannot convert to an array type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conversion function cannot convert to an array type",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,11120,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);"}},
[j]="conversion function cannot convert to an array type",
[o]={
[b]=a,
[Db]={"clang/test/SemaCXX/conversion-function.cpp:41:3: error: conversion function cannot convert to an array type"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,11120,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);"}}
},
},
["err_conv_function_to_function"]={
["err_conv_function_to_function"]={
[h]="conversion function cannot convert to a function type",
[j]=n,
[i]=m,
[b]="conversion function cannot convert to a function type",
[g]=l,
[f]="conversion function cannot convert to a function type",
[f]="conversion function cannot convert to a function type",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conversion function cannot convert to a function type",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,11124,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n  } else if (ConvType->isFunctionType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);"}},
[j]="conversion function cannot convert to a function type",
[o]={
[b]=a,
["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:29: error: conversion function cannot convert to a function type"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,11124,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n  } else if (ConvType->isFunctionType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);"}}
},
},
["err_conv_function_variadic"]={
["err_conv_function_variadic"]={
[h]="conversion function cannot be variadic",
[j]=n,
[i]=m,
[b]="conversion function cannot be variadic",
[g]=l,
[f]="conversion function cannot be variadic",
[f]="conversion function cannot be variadic",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conversion function cannot be variadic",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,11036,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n  } else if (Proto->isVariadic()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);"}},
[j]="conversion function cannot be variadic",
[o]={
[b]=a,
[Db]={"clang/test/SemaCXX/conversion-function.cpp:37:3: error: conversion function cannot be variadic"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,11036,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n  } else if (Proto->isVariadic()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);"}}
},
},
["err_conv_function_with_complex_decl"]={
["err_conv_function_with_complex_decl"]={
[f]="cannot specify any part of a return type in the declaration of a conversion function...",
[h]="cannot specify any part of a return type in the declaration of a conversion function...",
[c]=l,
[j]=n,
[e]=n,
[g]="cannot specify any part of a return type in the declaration of a conversion function%select{; put the complete type after \'operator\'|; use a typedef to declare a conversion to %1|; use an alias template to declare a conversion to %1|}0",
[i]=m,
[i]=m,
[j]="cannot specify any part of a return type in the declaration of a conversion function(?:; put the complete type after \'operator\'|; use a typedef to declare a conversion to (.*?)|; use an alias template to declare a conversion to (.*?)|)",
[b]="cannot specify any part of a return type in the declaration of a conversion function%select{; put the complete type after \'operator\'|; use a typedef to declare a conversion to %1|; use an alias template to declare a conversion to %1|}0",
[b]=a,
[g]=l,
[h]=o,
[f]="cannot specify any part of a return type in the declaration of a conversion function(?:; put the complete type after \'operator\'|; use a typedef to declare a conversion to (.*?)|; use an alias template to declare a conversion to (.*?)|)",
[d]={"212fa2efb700",1271117071,"Diagnose declarations of conversion functions with declarators other than \'()\'."},
[e]=a,
[k]={{v,11021,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n  } else if (DS.getTypeQualifiers() && !D.isInvalidType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl) << SourceRange(D.getIdentifierLoc()) << 0;"},{v,11084,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // Diagnose \"&operator bool()\" and other such nonsense.  This\n  // is actually a gcc extension which we don\'t support.\n  if (Proto->getReturnType() != ConvType) {\n    auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl);"}}
[d]=p,
[c]={"212fa2efb700",1271117071,"Diagnose declarations of conversion functions with declarators other than \'()\'."},
[k]={{w,11021,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n  } else if (DS.getTypeQualifiers() && !D.isInvalidType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl) << SourceRange(D.getIdentifierLoc()) << 0;"},{w,11084,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // Diagnose \"&operator bool()\" and other such nonsense.  This\n  // is actually a gcc extension which we don\'t support.\n  if (Proto->getReturnType() != ConvType) {\n    auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl);"}},
[o]={
["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:44: error: cannot specify any part of a return type in the declaration of a conversion function; use an alias template to declare a conversion to \'auto (Ts &&...) const\'"}
}
},
},
["err_conv_function_with_params"]={
["err_conv_function_with_params"]={
[h]="conversion function cannot have any parameters",
[j]=n,
[i]=m,
[b]="conversion function cannot have any parameters",
[g]=l,
[f]="conversion function cannot have any parameters",
[f]="conversion function cannot have any parameters",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="conversion function cannot have any parameters",
[c]={v,1237025389,u},
[i]=m,
[k]={{w,11030,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);"}},
[j]="conversion function cannot have any parameters",
[o]={
[b]=a,
[Db]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have any parameters","clang/test/SemaCXX/conversion-function.cpp:34:3: error: conversion function cannot have any parameters"}
[h]=o,
}
[d]={u,1237025389,t},
[k]={{v,11030,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);"}}
},
},
["err_convertvector_incompatible_vector"]={
["err_convertvector_incompatible_vector"]={
[h]="first two arguments to __builtin_convertvector must have the same number of elements",
[j]=n,
[i]=m,
[b]="first two arguments to __builtin_convertvector must have the same number of elements",
[g]=l,
[f]="first two arguments to __builtin_convertvector must have the same number of elements",
[f]="first two arguments to __builtin_convertvector must have the same number of elements",
[c]=l,
[e]=a,
[e]=n,
[d]=p,
[g]="first two arguments to __builtin_convertvector must have the same number of elements",
[c]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector"},
[i]=m,
[k]={{t,8546,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  if (!SrcTy->isDependentType() && !DstTy->isDependentType()) {\n    if (SrcElts != DstElts)\n      return ExprError(Diag(BuiltinLoc, diag::err_convertvector_incompatible_vector) << E->getSourceRange());"}},
[j]="first two arguments to __builtin_convertvector must have the same number of elements",
[o]={
[b]=a,
["clang/test/Sema/convertvector.c"]={"clang/test/Sema/convertvector.c:7:10: error: first two arguments to __builtin_convertvector must have the same number of elements"}
[h]=o,
}
[d]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector"},
[k]={{s,8546,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  if (!SrcTy->isDependentType() && !DstTy->isDependentType()) {\n    if (SrcElts != DstElts)\n      return ExprError(Diag(BuiltinLoc, diag::err_convertvector_incompatible_vector) << E->getSourceRange());"}}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu