Module:ClangDiags/DiagsLongData7: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
local a="regex3";
local a="regex2";
local b="regex1";
local b="prefix";
local c="title";
local c="type";
local d="prefix";
local d="message";
local e="category";
local e="regex1";
local f="type";
local f="title";
local g="regex2";
local g="regex3";
local h="message";
local h="category";
local i="commit";
local i="commit";
local j="source";
local j="source";
local k="Semantic Issue";
local k="tests2";
local l="";
local l="Semantic Issue";
local m="note\\: ";
local m="";
local n="note: ";
local n="note: ";
local o="Note";
local o="Note";
local p="groups";
local p="note\\: ";
local q="maingroup";
local q="maingroup";
local r="Warning";
local r="groups";
local s="warning: ";
local s="Warning";
local t="(?:warning|error|fatal error)\\: ";
local t="warning: ";
local u="clang/lib/Sema/SemaDeclAttr.cpp";
local u="(?:warning|error|fatal error)\\: ";
local v="clang/lib/Sema/SemaDecl.cpp";
local v="clang/lib/Sema/SemaDeclAttr.cpp";
local w="clang/lib/Sema/SemaOpenMP.cpp";
local w="clang/lib/Sema/SemaDecl.cpp";
local x="clang/lib/Sema/SemaTemplate.cpp";
local x="clang/lib/Sema/SemaOpenMP.cpp";
local y="clang/lib/Sema/SemaDeclCXX.cpp";
local y="clang/lib/Sema/SemaTemplate.cpp";
local z="ignored-attributes";
local z="clang/lib/Sema/SemaDeclCXX.cpp";
local A="defaultactive";
local A="ignored-attributes";
local B="clang/lib/Sema/SemaDeclObjC.cpp";
local B="defaultactive";
local C="clang/lib/Sema/SemaExpr.cpp";
local C="clang/lib/Sema/SemaDeclObjC.cpp";
local D="clang/lib/Sema/SemaOverload.cpp";
local D="clang/lib/Sema/SemaExpr.cpp";
local E="clang/lib/Sema/SemaObjCProperty.cpp";
local E="clang/lib/Sema/SemaOverload.cpp";
local F="clang/lib/Sema/SemaChecking.cpp";
local F="clang/lib/Sema/SemaChecking.cpp";
local G="Lexical or Preprocessor Issue";
local G="clang/lib/Sema/SemaObjCProperty.cpp";
local H="OpenMP Issue";
local H="Lexical or Preprocessor Issue";
local I="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local I="OpenMP Issue";
local J=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]";
local J="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local K="attributes";
local K="attributes";
local L="b1c4d5507fad";
local L=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]";
local M="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local M="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local N="clang/lib/Sema/JumpDiagnostics.cpp";
local N="b1c4d5507fad";
local O="clang/lib/Sema/SemaStmt.cpp";
local O="clang/lib/Sema/JumpDiagnostics.cpp";
local P="clang/lib/Parse/ParseOpenMP.cpp";
local P="clang/lib/Sema/SemaStmt.cpp";
local Q="Parse Issue";
local Q="Parse Issue";
local R="swift-name-attribute";
local R="clang/lib/Parse/ParseOpenMP.cpp";
local S="clang/lib/Lex/PPDirectives.cpp";
local S="clang/lib/Lex/PPDirectives.cpp";
local T="CL4";
local T="swift-name-attribute";
local U="clang/lib/Sema/SemaInit.cpp";
local U="CL4";
local V="pre-c2x-compat";
local V="pre-c2x-compat";
local W="Update tablegen diagnostic files to be in sync with the def files.";
local W="clang/lib/Sema/SemaInit.cpp";
local X="5a8987ca5113";
local X="5a8987ca5113";
local Y="Implement P2361 Unevaluated string literals";
local Y="Update tablegen diagnostic files to be in sync with the def files.";
local Z="95f50964fbf5";
local Z="Implement P2361 Unevaluated string literals";
local ab="all";
local ab="95f50964fbf5";
local bb="remark\\: ";
local bb="all";
local cb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local cb="clang/lib/Sema/SemaType.cpp";
local db="Remark";
local db="remark: ";
local eb="14f6bfcb52e7";
local eb="clang/lib/Sema/SemaTemplateInstantiate.cpp";
local fb="remark: ";
local fb="Remark";
local gb="clang/lib/Sema/SemaTemplateInstantiate.cpp";
local gb="remark\\: ";
local hb="clang/lib/Sema/SemaType.cpp";
local hb="14f6bfcb52e7";
local ib="931fcd3ba011";
local ib="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local jb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local jb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local kb="clang/lib/Lex/Lexer.cpp";
local kb="931fcd3ba011";
local lb="most";
local lb="clang/lib/Lex/Lexer.cpp";
local mb="clang/lib/Sema/SemaCast.cpp";
local mb="most";
local nb="clang/lib/Sema/SemaExprObjC.cpp";
local nb="clang/lib/Sema/SemaCast.cpp";
local ob="Let clang atomic builtins fetch add/sub support floating point types";
local ob="clang/test/SemaCXX/uninitialized.cpp:1242:5: note: during field initialization in this constructor";
local pb="61d065e21ff3";
local pb="Let clang atomic builtins fetch add/sub support floating point types";
local qb=" \\[(?:\\-Werror,)?\\-Wswift\\-name\\-attribute[^\\]]*\\]";
local qb=" \\[(?:\\-Werror,)?\\-Wswift\\-name\\-attribute[^\\]]*\\]";
local rb="availability";
local rb="61d065e21ff3";
local sb="clang/lib/Sema/SemaAttr.cpp";
local sb="clang/lib/Sema/SemaExprObjC.cpp";
local tb="error: ";
local tb="availability";
local ub="(?: \\[(?:\\-Werror)?[^\\]]*\\])?";
local ub="(?: \\[(?:\\-Werror)?[^\\]]*\\])?";
local vb="1228d42ddab8";
local vb="error: ";
local wb="pre-c2x-compat-pedantic";
local wb="clang/lib/Sema/SemaAttr.cpp";
local xb=" \\[(?:\\-Werror,)?\\-Wpre\\-c2x\\-compat[^\\]]*\\]";
local xb="[OpenMP][Part 2] Use reusable OpenMP context/traits handling";
local yb="[OpenMP][Part 2] Use reusable OpenMP context/traits handling";
local yb=" \\[(?:\\-Werror,)?\\-Wpre\\-c2x\\-compat[^\\]]*\\]";
local zb="overriding-method-mismatch";
local zb="pre-c2x-compat-pedantic";
local Ab="deprecated";
local Ab="1228d42ddab8";
local Bb="conversion";
local Bb="overriding-method-mismatch";
local Cb="Reland [clang] Check unsupported types in expressions";
local Cb="deprecated";
local Db="clang/lib/Sema/SemaPseudoObject.cpp";
local Db="clang/test/SemaCXX/uninitialized.cpp:928:5: note: during field initialization in this constructor";
local Eb="non-gcc";
local Eb="called-once-parameter";
local Fb="called-once-parameter";
local Fb="clang/test/SemaCXX/uninitialized.cpp:944:10: note: during field initialization in the implicit default constructor";
local Gb="3dbcea8b957a";
local Gb="clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp:4:50: note: in instantiation of exception specification for \'go\' requested here";
local Hb="clang/lib/Lex/Pragma.cpp";
local Hb="clang/test/SemaObjC/attr-swift_name.m";
local Ib="Deprecations";
local Ib="Reland [clang] Check unsupported types in expressions";
local Jb="trigraphs";
local Jb="non-gcc";
local Kb="clang/lib/Sema/SemaAvailability.cpp";
local Kb="conversion";
local Lb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local Lb="clang/lib/Sema/SemaPseudoObject.cpp";
local Mb="7c11da0cfd33";
local Mb="3dbcea8b957a";
local Nb="module-build";
local Nb="trigraphs";
local Ob="Error";
local Ob="7c11da0cfd33";
local Pb="(?:error|fatal error)\\: ";
local Pb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local Qb="clang/lib/Serialization/ASTReader.cpp";
local Qb="clang/test/SemaSYCL/zero-length-arrays.cpp:31:24: note: within field of type \'InnerTemplated<0U>[1]\' declared here";
local Rb="Modules Issue";
local Rb="clang/test/CXX/over/over.built/p16.cpp:3:12: note: second operand was implicitly converted to type \'decltype(nullptr)\' (aka \'std::nullptr_t\')";
local Sb="tautological-compare";
local Sb="module-build";
local Tb="clang/lib/Parse/ParseDecl.cpp";
local Tb="clang/test/Lexer/deprecate-macro.c:29:29: note: macro marked \'deprecated\' here";
local Ub="clang/lib/Sema/SemaExprCXX.cpp";
local Ub="clang/lib/Lex/Pragma.cpp";
local Vb="Value Conversion Issue";
local Vb="clang/lib/Sema/SemaAvailability.cpp";
local Wb="completion-handler";
local Wb="Deprecations";
local Xb="...";
local Xb="clang/test/CXX/over/over.built/p16.cpp:3:12: note: first operand was implicitly converted to type \'decltype(nullptr)\' (aka \'std::nullptr_t\')";
local Yb="arc-unsafe-retained-assign";
local Yb="(?:error|fatal error)\\: ";
local Zb="Backend Issue";
local Zb="clang/lib/Parse/ParseDecl.cpp";
local ac="array-bounds";
local ac="Error";
local bc="c99-compat";
local bc="clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/p6.cpp:52:26: note: candidate template ignored: couldn\'t infer template argument \'T\'";
local cc="gcc-compat";
local cc="Modules Issue";
local dc=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]";
local dc="clang/lib/Sema/SemaExprCXX.cpp";
local ec="thread-safety-analysis";
local ec="clang/lib/Serialization/ASTReader.cpp";
local fc="enum-conversion";
local fc="tautological-compare";
local gc="clang/lib/Frontend/CompilerInstance.cpp";
local gc="clang/lib/Sema/SemaModule.cpp";
local hc="ARC Semantic Issue";
local hc="Value Conversion Issue";
local ic="pass-analysis";
local ic="array-bounds";
local jc="clang/lib/Sema/SemaModule.cpp";
local jc=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]";
local kc="fe17b30a7957";
local kc="clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:46:10: note: \'get\' returns a reference";
local lc="(?:error|warning|fatal error)\\: ";
local lc="thread-safety-analysis";
local mc="[attributes][analyzer] Add annotations for handles.";
local mc="...";
local nc="clang/lib/CodeGen/CodeGenModule.cpp";
local nc="clang/test/SemaObjC/warn-called-once.m";
local oc="Downgradable Error";
local oc="c99-compat";
local pc="arc";
local pc="Backend Issue";
local qc="clang/lib/Parse/ParseExpr.cpp";
local qc="ARC Semantic Issue";
local rc="clang/lib/CodeGen/CodeGenAction.cpp";
local rc="clang/lib/Frontend/CompilerInstance.cpp";
local sc="Automatic Reference Counting.";
local sc="completion-handler";
local tc="(.*?)";
local tc="enum-conversion";
local uc="%0";
local uc="gcc-compat";
local vc="clang/lib/Sema/SemaExceptionSpec.cpp";
local vc="pass-analysis";
local wc="clang/lib/Lex/PPMacroExpansion.cpp";
local wc="arc-unsafe-retained-assign";
local xc="conflicting variadic declaration of method and its implementation";
local xc="clang/test/Sema/div-sizeof-ptr.cpp:10:16: note: pointer \'p\' declared here";
local yc="clang/lib/Sema/Sema.cpp";
local yc="clang/lib/Sema/Sema.cpp";
local zc="clang/lib/Lex/LiteralSupport.cpp";
local zc="fe17b30a7957";
local Ac="extra";
local Ac="[attributes][analyzer] Add annotations for handles.";
local Bc="objective-c: Using existing infrastructure for finding ";
local Bc="clang/lib/Parse/ParseExpr.cpp";
local Cc="3c12dd7675cd";
local Cc="Automatic Reference Counting.";
local Dc=" \\[(?:\\-Werror,)?\\-Woverriding\\-method\\-mismatch[^\\]]*\\]";
local Dc="arc";
local Ec="31168b077c36";
local Ec="clang/test/SemaCXX/warn-consumed-parsing.cpp";
local Fc="clang/lib/CodeGen/CodeGenModule.cpp";
local Gc="Downgradable Error";
local Hc="%0";
local Ic="(.*?)";
local Jc="clang/test/SemaObjC/scope-check.m";
local Kc="clang/lib/CodeGen/CodeGenAction.cpp";
local Lc="(?:error|warning|fatal error)\\: ";
local Mc="extra";
local Nc="31168b077c36";
local Oc="clang/lib/Lex/LiteralSupport.cpp";
local Pc="clang/lib/Sema/SemaExceptionSpec.cpp";
local Qc=" \\[(?:\\-Werror,)?\\-Woverriding\\-method\\-mismatch[^\\]]*\\]";
local Rc="conflicting variadic declaration of method and its implementation";
local Sc="3c12dd7675cd";
local Tc="objective-c: Using existing infrastructure for finding ";
local Uc="clang/test/CXX/expr/expr.arith.conv/p2.cpp";
local Vc="clang/lib/Lex/PPMacroExpansion.cpp";


return {
return {
["note_omp_atomic_capture"]={
["note_omp_atomic_capture"]={
[c]=Xb,
[f]=mc,
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression}0",
[d]="%select{expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression}0",
[b]=m,
[e]=p,
[g]="(?:expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression)",
[a]="(?:expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct."},
[i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct."},
[j]={{w,12793,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (ErrorFound != NoError) {\n        Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"},{w,12956,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"}}
[j]={{x,12793,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (ErrorFound != NoError) {\n        Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"},{x,12956,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"}},
[k]={
["clang/test/OpenMP/atomic_messages.c"]={"clang/test/OpenMP/atomic_messages.c:214:3: note: expected compound statement","clang/test/OpenMP/atomic_messages.c:218:3: note: expected assignment expression","clang/test/OpenMP/atomic_messages.c:226:9: note: expected assignment expression","clang/test/OpenMP/atomic_messages.c:234:16: note: expected assignment expression","clang/test/OpenMP/atomic_messages.c:238:9: note: expected assignment expression","clang/test/OpenMP/atomic_messages.c:242:9: note: expected assignment expression","clang/test/OpenMP/atomic_messages.c:246:3: note: expected exactly two expression statements","clang/test/OpenMP/atomic_messages.c:250:3: note: expected exactly two expression statements","clang/test/OpenMP/atomic_messages.c:254:10: note: expected in right hand side of the first expression","clang/test/OpenMP/atomic_messages.c:258:11: note: expected in right hand side of the first expression","clang/test/OpenMP/atomic_messages.c:411:3: note: expected compound statement","clang/test/OpenMP/atomic_messages.c:497:15: note: expected compound statement","clang/test/OpenMP/atomic_messages.c:546:10: note: expected compound statement","clang/test/OpenMP/atomic_messages.c:584:3: note: expected compound statement","clang/test/OpenMP/atomic_messages.c:608:24: note: expected compound statement","clang/test/OpenMP/atomic_messages.c:630:40: note: expected compound statement"}
}
},
},
["note_omp_atomic_compare"]={
["note_omp_atomic_compare"]={
[c]=Xb,
[f]=mc,
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{expected compound statement|expected exactly one expression statement|expected assignment statement|expected conditional operator|expect result value to be at false expression|expect binary operator in conditional expression|expect \'<\', \'>\' or \'==\' as order operator|expect comparison in a form of \'x == e\', \'e == x\', \'x ordop expr\', or \'expr ordop x\'|expect lvalue for result value|expect scalar value|expect integer value|unexpected \'else\' statement|expect \'==\' operator|expect an assignment statement \'v = x\'|expect a \'if\' statement|expect no more than two statements|expect a compound statement|expect \'else\' statement|expect a form \'r = x == e; if (r) ...\'}0",
[d]="%select{expected compound statement|expected exactly one expression statement|expected assignment statement|expected conditional operator|expect result value to be at false expression|expect binary operator in conditional expression|expect \'<\', \'>\' or \'==\' as order operator|expect comparison in a form of \'x == e\', \'e == x\', \'x ordop expr\', or \'expr ordop x\'|expect lvalue for result value|expect scalar value|expect integer value|unexpected \'else\' statement|expect \'==\' operator|expect an assignment statement \'v = x\'|expect a \'if\' statement|expect no more than two statements|expect a compound statement|expect \'else\' statement|expect a form \'r = x == e; if (r) ...\'}0",
[b]=m,
[e]=p,
[g]="(?:expected compound statement|expected exactly one expression statement|expected assignment statement|expected conditional operator|expect result value to be at false expression|expect binary operator in conditional expression|expect \'\\<\', \'\\>\' or \'\\=\\=\' as order operator|expect comparison in a form of \'x \\=\\= e\', \'e \\=\\= x\', \'x ordop expr\', or \'expr ordop x\'|expect lvalue for result value|expect scalar value|expect integer value|unexpected \'else\' statement|expect \'\\=\\=\' operator|expect an assignment statement \'v \\= x\'|expect a \'if\' statement|expect no more than two statements|expect a compound statement|expect \'else\' statement|expect a form \'r \\= x \\=\\= e; if \\(r\\) \\.\\.\\.\')",
[a]="(?:expected compound statement|expected exactly one expression statement|expected assignment statement|expected conditional operator|expect result value to be at false expression|expect binary operator in conditional expression|expect \'\\<\', \'\\>\' or \'\\=\\=\' as order operator|expect comparison in a form of \'x \\=\\= e\', \'e \\=\\= x\', \'x ordop expr\', or \'expr ordop x\'|expect lvalue for result value|expect scalar value|expect integer value|unexpected \'else\' statement|expect \'\\=\\=\' operator|expect an assignment statement \'v \\= x\'|expect a \'if\' statement|expect no more than two statements|expect a compound statement|expect \'else\' statement|expect a form \'r \\= x \\=\\= e; if \\(r\\) \\.\\.\\.\')",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[j]={{w,12968,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"},{w,12988,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n    } else {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"}}
[j]={{x,12968,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"},{x,12988,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n    } else {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"}},
[k]={
["clang/test/OpenMP/atomic_messages.c"]={"clang/test/OpenMP/atomic_messages.c:415:3: note: expected exactly one expression statement","clang/test/OpenMP/atomic_messages.c:422:7: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:426:5: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:430:9: note: expected conditional operator","clang/test/OpenMP/atomic_messages.c:434:9: note: expect binary operator in conditional expression","clang/test/OpenMP/atomic_messages.c:438:11: note: expect \'<\', \'>\' or \'==\' as order operator","clang/test/OpenMP/atomic_messages.c:442:11: note: expect comparison in a form of \'x == e\', \'e == x\', \'x ordop expr\', or \'expr ordop x\'","clang/test/OpenMP/atomic_messages.c:446:21: note: expect result value to be at false expression","clang/test/OpenMP/atomic_messages.c:451:9: note: expect binary operator in conditional expression","clang/test/OpenMP/atomic_messages.c:458:11: note: expect \'<\', \'>\' or \'==\' as order operator","clang/test/OpenMP/atomic_messages.c:465:11: note: expect comparison in a form of \'x == e\', \'e == x\', \'x ordop expr\', or \'expr ordop x\'","clang/test/OpenMP/atomic_messages.c:471:3: note: expected exactly one expression statement","clang/test/OpenMP/atomic_messages.c:483:7: note: unexpected \'else\' statement","clang/test/OpenMP/atomic_messages.c:501:15: note: expected exactly one expression statement","clang/test/OpenMP/atomic_messages.c:509:5: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:515:7: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:520:7: note: expect binary operator in conditional expression","clang/test/OpenMP/atomic_messages.c:526:9: note: expect \'==\' operator","clang/test/OpenMP/atomic_messages.c:532:9: note: expect comparison in a form of \'x == e\', \'e == x\', \'x ordop expr\', or \'expr ordop x\'","clang/test/OpenMP/atomic_messages.c:538:3: note: expect \'else\' statement","clang/test/OpenMP/atomic_messages.c:553:10: note: expected exactly one expression statement","clang/test/OpenMP/atomic_messages.c:563:5: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:571:7: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:579:9: note: expect an assignment statement \'v = x\'","clang/test/OpenMP/atomic_messages.c:588:3: note: expect a compound statement","clang/test/OpenMP/atomic_messages.c:592:5: note: expect a \'if\' statement","clang/test/OpenMP/atomic_messages.c:596:23: note: expect a form \'r = x == e; if (r) ...\'","clang/test/OpenMP/atomic_messages.c:600:17: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:604:28: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:614:12: note: expected exactly one expression statement","clang/test/OpenMP/atomic_messages.c:622:11: note: expect \'==\' operator","clang/test/OpenMP/atomic_messages.c:626:11: note: expect comparison in a form of \'x == e\', \'e == x\', \'x ordop expr\', or \'expr ordop x\'","clang/test/OpenMP/atomic_messages.c:638:12: note: expected exactly one expression statement","clang/test/OpenMP/atomic_messages.c:646:42: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:650:44: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:654:26: note: expect an assignment statement \'v = x\'","clang/test/OpenMP/atomic_messages.c:658:7: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:662:30: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:666:26: note: expect an assignment statement \'v = x\'","clang/test/OpenMP/atomic_messages.c:670:19: note: expect an assignment statement \'v = x\'","clang/test/OpenMP/atomic_messages.c:674:12: note: expected assignment statement","clang/test/OpenMP/atomic_messages.c:679:5: note: expect integer value"}
}
},
},
["note_omp_atomic_read_write"]={
["note_omp_atomic_read_write"]={
[c]=Xb,
[f]=mc,
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{expected an expression statement|expected built-in assignment operator|expected expression of scalar type|expected lvalue expression}0",
[d]="%select{expected an expression statement|expected built-in assignment operator|expected expression of scalar type|expected lvalue expression}0",
[b]=m,
[e]=p,
[g]="(?:expected an expression statement|expected built\\-in assignment operator|expected expression of scalar type|expected lvalue expression)",
[a]="(?:expected an expression statement|expected built\\-in assignment operator|expected expression of scalar type|expected lvalue expression)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"f33eba65730d",1417159300,"[OPENMP] Additional processing of \'omp atomic write\' directive."},
[i]={"f33eba65730d",1417159300,"[OPENMP] Additional processing of \'omp atomic write\' directive."},
[j]={{w,12656,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"},{w,12718,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"}}
[j]={{x,12656,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"},{x,12718,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"}},
[k]={
["clang/test/OpenMP/atomic_messages.c"]={"clang/test/OpenMP/atomic_messages.c:21:3: note: expected an expression statement","clang/test/OpenMP/atomic_messages.c:29:3: note: expected an expression statement","clang/test/OpenMP/atomic_messages.c:48:3: note: expected an expression statement","clang/test/OpenMP/atomic_messages.c:52:3: note: expected built-in assignment operator","clang/test/OpenMP/atomic_messages.c:56:5: note: expected built-in assignment operator","clang/test/OpenMP/atomic_messages.c:60:7: note: expected lvalue expression","clang/test/OpenMP/atomic_messages.c:76:7: note: expected expression of scalar type","clang/test/OpenMP/atomic_messages.c:87:3: note: expected an expression statement","clang/test/OpenMP/atomic_messages.c:91:3: note: expected built-in assignment operator","clang/test/OpenMP/atomic_messages.c:95:5: note: expected built-in assignment operator","clang/test/OpenMP/atomic_messages.c:113:3: note: expected expression of scalar type","clang/test/OpenMP/atomic_messages.c:124:3: note: expected an expression statement"}
}
},
},
["note_omp_atomic_update"]={
["note_omp_atomic_update"]={
[c]=Xb,
[f]=mc,
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{expected an expression statement|expected built-in binary or unary operator|expected unary decrement/increment operation|expected expression of scalar type|expected assignment expression|expected built-in binary operator|expected one of \'+\', \'*\', \'-\', \'/\', \'&\', \'^\', \'%|\', \'<<\', or \'>>\' built-in operations|expected in right hand side of expression}0",
[d]="%select{expected an expression statement|expected built-in binary or unary operator|expected unary decrement/increment operation|expected expression of scalar type|expected assignment expression|expected built-in binary operator|expected one of \'+\', \'*\', \'-\', \'/\', \'&\', \'^\', \'%|\', \'<<\', or \'>>\' built-in operations|expected in right hand side of expression}0",
[b]=m,
[e]=p,
[g]="(?:expected an expression statement|expected built\\-in binary or unary operator|expected unary decrement\\/increment operation|expected expression of scalar type|expected assignment expression|expected built\\-in binary operator|expected one of \'\\+\', \'\\*\', \'\\-\', \'\\/\', \'&\', \'\\^\', \'\\|\', \'\\<\\<\', or \'\\>\\>\' built\\-in operations|expected in right hand side of expression)",
[a]="(?:expected an expression statement|expected built\\-in binary or unary operator|expected unary decrement\\/increment operation|expected expression of scalar type|expected assignment expression|expected built\\-in binary operator|expected one of \'\\+\', \'\\*\', \'\\-\', \'\\/\', \'&\', \'\\^\', \'\\|\', \'\\<\\<\', or \'\\>\\>\' built\\-in operations|expected in right hand side of expression)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'."},
[i]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'."},
[j]={{w,12739,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n    if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"},{w,12774,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (AtomicBinOp && AtomicBinOp->getOpcode() == BO_Assign) {\n        if (Checker.checkStatement(Body, diag::err_omp_atomic_capture_not_expression_statement, diag::note_omp_atomic_update))"}}
[j]={{x,12739,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n    if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"},{x,12774,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (AtomicBinOp && AtomicBinOp->getOpcode() == BO_Assign) {\n        if (Checker.checkStatement(Body, diag::err_omp_atomic_capture_not_expression_statement, diag::note_omp_atomic_update))"}},
[k]={
["clang/test/OpenMP/atomic_messages.c"]={"clang/test/OpenMP/atomic_messages.c:128:3: note: expected built-in binary or unary operator","clang/test/OpenMP/atomic_messages.c:132:7: note: expected built-in binary operator","clang/test/OpenMP/atomic_messages.c:136:9: note: expected one of \'+\', \'*\', \'-\', \'/\', \'&\', \'^\', \'|\', \'<<\', or \'>>\' built-in operations","clang/test/OpenMP/atomic_messages.c:140:9: note: expected one of \'+\', \'*\', \'-\', \'/\', \'&\', \'^\', \'|\', \'<<\', or \'>>\' built-in operations","clang/test/OpenMP/atomic_messages.c:144:3: note: expected in right hand side of expression","clang/test/OpenMP/atomic_messages.c:148:3: note: expected in right hand side of expression","clang/test/OpenMP/atomic_messages.c:152:3: note: expected in right hand side of expression","clang/test/OpenMP/atomic_messages.c:222:7: note: expected built-in binary or unary operator","clang/test/OpenMP/atomic_messages.c:230:13: note: expected one of \'+\', \'*\', \'-\', \'/\', \'&\', \'^\', \'|\', \'<<\', or \'>>\' built-in operations","clang/test/OpenMP/atomic_messages.c:264:7: note: expected in right hand side of expression","clang/test/OpenMP/atomic_messages.c:268:7: note: expected in right hand side of expression","clang/test/OpenMP/atomic_messages.c:272:7: note: expected in right hand side of expression"}
}
},
},
["note_omp_collapse_ordered_expr"]={
["note_omp_collapse_ordered_expr"]={
[c]="as specified in ... clause...",
[f]="as specified in ... clause...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="as specified in %select{\'collapse\'|\'ordered\'|\'collapse\' and \'ordered\'}0 clause%select{||s}0",
[d]="as specified in %select{\'collapse\'|\'ordered\'|\'collapse\' and \'ordered\'}0 clause%select{||s}0",
[b]=m,
[e]=p,
[g]="as specified in (?:\'collapse\'|\'ordered\'|\'collapse\' and \'ordered\') clause(?:||s)",
[a]="as specified in (?:\'collapse\'|\'ordered\'|\'collapse\' and \'ordered\') clause(?:||s)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"10e775f4a882",1438256176,"[OPENMP 4.1] Initial support for extended \'ordered\' clause."},
[i]={"10e775f4a882",1438256176,"[OPENMP 4.1] Initial support for extended \'ordered\' clause."},
[j]={{w,9212,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n        SemaRef.Diag(DSA.getConstructLoc(), diag::note_omp_collapse_ordered_expr) << 2 << CollapseLoopCountExpr->getSourceRange() << OrderedLoopCountExpr->getSourceRange();"},{w,9217,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n        SemaRef.Diag(CollapseLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 0 << CollapseLoopCountExpr->getSourceRange();"},{w,9221,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n      else\n        SemaRef.Diag(OrderedLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 1 << OrderedLoopCountExpr->getSourceRange();"}}
[j]={{x,9212,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n        SemaRef.Diag(DSA.getConstructLoc(), diag::note_omp_collapse_ordered_expr) << 2 << CollapseLoopCountExpr->getSourceRange() << OrderedLoopCountExpr->getSourceRange();"},{x,9217,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n        SemaRef.Diag(CollapseLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 0 << CollapseLoopCountExpr->getSourceRange();"},{x,9221,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n      else\n        SemaRef.Diag(OrderedLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 1 << OrderedLoopCountExpr->getSourceRange();"}},
[k]={
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:108:28: note: as specified in \'collapse\' clause"}
}
},
},
["note_omp_conversion_here"]={
["note_omp_conversion_here"]={
[c]="conversion to ... type A declared here",
[f]="conversion to ... type A declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[d]="conversion to %select{integral|enumeration}0 type %1 declared here",
[b]=m,
[e]=p,
[g]="conversion to (?:integral|enumeration) type (.*?) declared here",
[a]="conversion to (?:integral|enumeration) type (.*?) declared here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'"},
[i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'"},
[j]={{w,16406,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"},{w,16415,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"}}
[j]={{x,16406,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"},{x,16415,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"}}
},
},
["note_omp_critical_hint_here"]={
["note_omp_critical_hint_here"]={
[c]="...\'hint\' clause with value \'A\'",
[f]="...\'hint\' clause with value \'A\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{|previous }0\'hint\' clause with value \'%1\'",
[d]="%select{|previous }0\'hint\' clause with value \'%1\'",
[b]=m,
[e]=p,
[g]="(?:|previous )\'hint\' clause with value \'(.*?)\'",
[a]="(?:|previous )\'hint\' clause with value \'(.*?)\'",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[j]={{w,10890,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n        Diag(HintLoc, diag::note_omp_critical_hint_here) << 0 << toString(Hint, /*Radix=*/10, /*Signed=*/false);"},{w,10895,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n        Diag(C->getBeginLoc(), diag::note_omp_critical_hint_here) << 1"}}
[j]={{x,10890,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n        Diag(HintLoc, diag::note_omp_critical_hint_here) << 0 << toString(Hint, /*Radix=*/10, /*Signed=*/false);"},{x,10895,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n        Diag(C->getBeginLoc(), diag::note_omp_critical_hint_here) << 1"}},
[k]={
["clang/test/OpenMP/critical_messages.cpp"]={"clang/test/OpenMP/critical_messages.cpp:70:31: note: \'hint\' clause with value \'4\'","clang/test/OpenMP/critical_messages.cpp:137:31: note: previous \'hint\' clause with value \'23\'"}
}
},
},
["note_omp_critical_no_hint"]={
["note_omp_critical_no_hint"]={
[c]="...directive with no \'hint\' clause specified",
[f]="...directive with no \'hint\' clause specified",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{|previous }0directive with no \'hint\' clause specified",
[d]="%select{|previous }0directive with no \'hint\' clause specified",
[b]=m,
[e]=p,
[g]="(?:|previous )directive with no \'hint\' clause specified",
[a]="(?:|previous )directive with no \'hint\' clause specified",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[j]={{w,10893,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n      else\n        Diag(StartLoc, diag::note_omp_critical_no_hint) << 0;"},{w,10900,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n      } else {\n        Diag(Pair.first->getBeginLoc(), diag::note_omp_critical_no_hint) << 1;"}}
[j]={{x,10893,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n      else\n        Diag(StartLoc, diag::note_omp_critical_no_hint) << 0;"},{x,10900,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n      } else {\n        Diag(Pair.first->getBeginLoc(), diag::note_omp_critical_no_hint) << 1;"}}
},
},
["note_omp_ctx_compatible_set_and_selector_for_property"]={
["note_omp_ctx_compatible_set_and_selector_for_property"]={
[c]="the context property \'A\' can be nested in the context selector \'B\' which is nested in the context set \'C\'; try \'match(D={E(F)})\'",
[f]="the context property \'A\' can be nested in the context selector \'B\' which is nested in the context set \'C\'; try \'match(D={E(F)})\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="the context property \'%0\' can be nested in the context selector \'%1\' which is nested in the context set \'%2\'; try \'match(%2={%1(%0)})\'",
[d]="the context property \'%0\' can be nested in the context selector \'%1\' which is nested in the context set \'%2\'; try \'match(%2={%1(%0)})\'",
[b]=m,
[e]=p,
[g]="the context property \'(.*?)\' can be nested in the context selector \'(.*?)\' which is nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)\\((.*?)\\)\\}\\)\'",
[a]="the context property \'(.*?)\' can be nested in the context selector \'(.*?)\' which is nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)\\((.*?)\\)\\}\\)\'",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{P,1032,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(PropertyLoc, diag::note_omp_ctx_compatible_set_and_selector_for_property) << getOpenMPContextTraitPropertyName(TIProperty.Kind, TIProperty.RawString) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(TIProperty.Kind)) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(TIProperty.Kind));"}}
[j]={{R,1032,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(PropertyLoc, diag::note_omp_ctx_compatible_set_and_selector_for_property) << getOpenMPContextTraitPropertyName(TIProperty.Kind, TIProperty.RawString) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(TIProperty.Kind)) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(TIProperty.Kind));"}}
},
},
["note_omp_ctx_compatible_set_for_selector"]={
["note_omp_ctx_compatible_set_for_selector"]={
[c]="the context selector \'A\' can be nested in the context set \'B\'; try \'match(C={D...})\'",
[f]="the context selector \'A\' can be nested in the context set \'B\'; try \'match(C={D...})\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="the context selector \'%0\' can be nested in the context set \'%1\'; try \'match(%1={%0%select{|(property)}2})\'",
[d]="the context selector \'%0\' can be nested in the context set \'%1\'; try \'match(%1={%0%select{|(property)}2})\'",
[b]=m,
[e]=p,
[g]="the context selector \'(.*?)\' can be nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)(?:|\\(property\\))\\}\\)\'",
[a]="the context selector \'(.*?)\' can be nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)(?:|\\(property\\))\\}\\)\'",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{P,1164,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  if (!isValidTraitSelectorForTraitSet(TISelector.Kind, Set, AllowsTraitScore, RequiresProperty)) {\n    Diag(SelectorLoc, diag::note_omp_ctx_compatible_set_for_selector) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(TISelector.Kind)) << RequiresProperty;"}}
[j]={{R,1164,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  if (!isValidTraitSelectorForTraitSet(TISelector.Kind, Set, AllowsTraitScore, RequiresProperty)) {\n    Diag(SelectorLoc, diag::note_omp_ctx_compatible_set_for_selector) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(TISelector.Kind)) << RequiresProperty;"}},
[k]={
["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:49:72: note: the context selector \'vendor\' can be nested in the context set \'implementation\'; try \'match(implementation={vendor(property)})\'","clang/test/OpenMP/declare_variant_messages.c:39:79: note: the context selector \'kind\' can be nested in the context set \'device\'; try \'match(device={kind(property)})\'"}
}
},
},
["note_omp_declare_variant_ctx_continue_here"]={
["note_omp_declare_variant_ctx_continue_here"]={
[c]="the ignored ... spans until here",
[f]="the ignored ... spans until here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="the ignored %select{set|selector|property}0 spans until here",
[d]="the ignored %select{set|selector|property}0 spans until here",
[b]=m,
[e]=p,
[g]="the ignored (?:set|selector|property) spans until here",
[a]="the ignored (?:set|selector|property) spans until here",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{P,1013,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  // If we have an invalid property here we already issued a warning.\n  if (TIProperty.Kind == TraitProperty::invalid) {\n    if (PropertyLoc != Tok.getLocation())\n      Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{P,1039,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{P,1148,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the selector. However, commas are ambiguous so we look for the nesting\n  // of parentheses here as well.\n  auto FinishSelector = [OuterPC, this]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_LVL;"},{P,1318,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the set. However, commas are ambiguous so we look for the nesting\n  // of braces here as well.\n  auto FinishSelectorSet = [this, OuterBC]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_SET_LVL;"}}
[j]={{R,1013,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  // If we have an invalid property here we already issued a warning.\n  if (TIProperty.Kind == TraitProperty::invalid) {\n    if (PropertyLoc != Tok.getLocation())\n      Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{R,1039,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{R,1148,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the selector. However, commas are ambiguous so we look for the nesting\n  // of parentheses here as well.\n  auto FinishSelector = [OuterPC, this]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_LVL;"},{R,1318,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the set. However, commas are ambiguous so we look for the nesting\n  // of braces here as well.\n  auto FinishSelectorSet = [this, OuterBC]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_SET_LVL;"}},
[k]={
["clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c"]={"clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:6:87: note: the ignored property spans until here","clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:9:89: note: the ignored property spans until here","clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:12:101: note: the ignored property spans until here"}
}
},
},
["note_omp_declare_variant_ctx_is_a"]={
["note_omp_declare_variant_ctx_is_a"]={
[c]="\'A\' is a context ... not a context ...",
[f]="\'A\' is a context ... not a context ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' is a context %select{set|selector|property}1 not a context %select{set|selector|property}2",
[d]="\'%0\' is a context %select{set|selector|property}1 not a context %select{set|selector|property}2",
[b]=m,
[e]=p,
[g]="\'(.*?)\' is a context (?:set|selector|property) not a context (?:set|selector|property)",
[a]="\'(.*?)\' is a context (?:set|selector|property) not a context (?:set|selector|property)",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{P,905,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_TRAIT_LVL;"},{P,914,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_TRAIT_LVL;"},{P,1069,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_SELECTOR_LVL;"},{P,1083,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_LVL;"},{P,1255,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_SELECTOR_SET_LVL;"},{P,1275,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_SET_LVL;"}}
[j]={{R,905,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_TRAIT_LVL;"},{R,914,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_TRAIT_LVL;"},{R,1069,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_SELECTOR_LVL;"},{R,1083,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_LVL;"},{R,1255,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_SELECTOR_SET_LVL;"},{R,1275,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_SET_LVL;"}}
},
},
["note_omp_declare_variant_ctx_options"]={
["note_omp_declare_variant_ctx_options"]={
[c]="context ... options are: A",
[f]="context ... options are: A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="context %select{set|selector|property}0 options are: %1",
[d]="context %select{set|selector|property}0 options are: %1",
[b]=m,
[e]=p,
[g]="context (?:set|selector|property) options are\\: (.*?)",
[a]="context (?:set|selector|property) options are\\: (.*?)",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{P,884,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{P,942,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{P,1051,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{P,1093,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{P,1237,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"},{P,1285,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"}}
[j]={{R,884,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{R,942,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{R,1051,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{R,1093,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{R,1237,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"},{R,1285,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"}},
[k]={
["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:8:32: note: context set options are: \'construct\' \'device\' \'implementation\' \'user\'","clang/test/OpenMP/metadirective_messages.cpp:10:39: note: context selector options are: \'kind\' \'arch\' \'isa\'"}
}
},
},
["note_omp_declare_variant_ctx_try"]={
["note_omp_declare_variant_ctx_try"]={
[c]="try \'match(A={BC})\'",
[f]="try \'match(A={BC})\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="try \'match(%0={%1%2})\'",
[d]="try \'match(%0={%1%2})\'",
[b]=m,
[e]=p,
[g]="try \'match\\((.*?)\\=\\{(.*?)(.*?)\\}\\)\'",
[a]="try \'match\\((.*?)\\=\\{(.*?)(.*?)\\}\\)\'",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{P,907,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{P,921,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{P,934,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{P,1071,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{P,1085,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{P,1262,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{P,1277,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"}}
[j]={{R,907,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{R,921,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{R,934,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{R,1071,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{R,1085,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{R,1262,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{R,1277,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"}},
[k]={
["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:47:66: note: try \'match(implementation={vendor(ibm)})\'"}
}
},
},
["note_omp_declare_variant_ctx_used_here"]={
["note_omp_declare_variant_ctx_used_here"]={
[c]="the previous context ... \'A\' used here",
[f]="the previous context ... \'A\' used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="the previous context %select{set|selector|property}0 \'%1\' used here",
[d]="the previous context %select{set|selector|property}0 \'%1\' used here",
[b]=m,
[e]=p,
[g]="the previous context (?:set|selector|property) \'(.*?)\' used here",
[a]="the previous context (?:set|selector|property) \'(.*?)\' used here",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"70d2e5427ed3",1570556872,"[OPENMP50]Do not allow multiple same context traits in the same context"},
[i]={"70d2e5427ed3",1570556872,"[OPENMP50]Do not allow multiple same context traits in the same context"},
[j]={{P,869,"static bool checkForDuplicates(Parser &P, StringRef Name, SourceLocation NameLoc, llvm::StringMap<SourceLocation> &Seen, OMPContextLvl Lvl) {\n  P.Diag(Res.first->getValue(), diag::note_omp_declare_variant_ctx_used_here) << Lvl << Name;"},{P,985,"static bool checkExtensionProperty(Parser &P, SourceLocation Loc, OMPTraitProperty &TIProperty, OMPTraitSelector &TISelector, llvm::StringMap<SourceLocation> &Seen) {\n  if (IsMatchExtension(TIProperty)) {\n    for (OMPTraitProperty &SeenProp : TISelector.Properties)\n      if (IsMatchExtension(SeenProp)) {\n        P.Diag(SeenLoc, diag::note_omp_declare_variant_ctx_used_here) << CONTEXT_TRAIT_LVL << SeenName;"}}
[j]={{R,869,"static bool checkForDuplicates(Parser &P, StringRef Name, SourceLocation NameLoc, llvm::StringMap<SourceLocation> &Seen, OMPContextLvl Lvl) {\n  P.Diag(Res.first->getValue(), diag::note_omp_declare_variant_ctx_used_here) << Lvl << Name;"},{R,985,"static bool checkExtensionProperty(Parser &P, SourceLocation Loc, OMPTraitProperty &TIProperty, OMPTraitSelector &TISelector, llvm::StringMap<SourceLocation> &Seen) {\n  if (IsMatchExtension(TIProperty)) {\n    for (OMPTraitProperty &SeenProp : TISelector.Properties)\n      if (IsMatchExtension(SeenProp)) {\n        P.Diag(SeenLoc, diag::note_omp_declare_variant_ctx_used_here) << CONTEXT_TRAIT_LVL << SeenName;"}},
[k]={
["clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c"]={"clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:6:68: note: the previous context property \'match_any\' used here","clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:9:68: note: the previous context property \'match_none\' used here","clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:12:81: note: the previous context property \'match_none\' used here"}
}
},
},
["note_omp_default_dsa_none"]={
["note_omp_default_dsa_none"]={
[c]="explicit data sharing attribute requested here",
[f]="explicit data sharing attribute requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="explicit data sharing attribute requested here",
[d]="explicit data sharing attribute requested here",
[b]=m,
[e]=p,
[g]="explicit data sharing attribute requested here",
[a]="explicit data sharing attribute requested here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"cf9e7a282b74",1557164962,"[OPENMP]Fix PR41768: check DSA for globals with `default(none)` clauses."},
[i]={"cf9e7a282b74",1557164962,"[OPENMP]Fix PR41768: check DSA for globals with `default(none)` clauses."},
[j]={{w,6796,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const auto &P : VarsWithInheritedDSA) {\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n      Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_default_dsa_none);"}}
[j]={{x,6796,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const auto &P : VarsWithInheritedDSA) {\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n      Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_default_dsa_none);"}},
[k]={
["clang/test/OpenMP/parallel_messages.cpp"]={"clang/test/OpenMP/parallel_messages.cpp:64:30: note: explicit data sharing attribute requested here","clang/test/OpenMP/parallel_messages.cpp:64:30: note: explicit data sharing attribute requested here"}
}
},
},
["note_omp_defaultmap_attr_none"]={
["note_omp_defaultmap_attr_none"]={
[c]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here",
[f]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here",
[d]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here",
[b]=m,
[e]=p,
[g]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here",
[a]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[j]={{w,6802,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const auto &P : VarsWithInheritedDSA) {\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n    } else if (getLangOpts().OpenMP >= 50) {\n      Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_defaultmap_attr_none);"}}
[j]={{x,6802,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const auto &P : VarsWithInheritedDSA) {\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n    } else if (getLangOpts().OpenMP >= 50) {\n      Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_defaultmap_attr_none);"}},
[k]={
["clang/test/OpenMP/target_defaultmap_messages.cpp"]={"clang/test/OpenMP/target_defaultmap_messages.cpp:120:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:122:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:124:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:126:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:128:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:130:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:133:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:136:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:60:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:62:1: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:64:1: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:66:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:68:1: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:70:1: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:72:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:75:1: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here","clang/test/OpenMP/target_defaultmap_messages.cpp:78:3: note: explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here"}
}
},
},
["note_omp_directive_here"]={
["note_omp_directive_here"]={
[c]="\'A\' directive found here",
[f]="\'A\' directive found here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' directive found here",
[d]="\'%0\' directive found here",
[b]=m,
[e]=p,
[g]="\'(.*?)\' directive found here",
[a]="\'(.*?)\' directive found here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={Gb,1615397021,Cb},
[i]={Mb,1615397021,Ib},
[j]={{w,14994,"StmtResult Sema::ActOnOpenMPUnrollDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (FullClause) {\n    if (!VerifyPositiveIntegerConstantInClause(LoopHelper.NumIterations, OMPC_full, /*StrictlyPositive=*/false,\n      Diag(FullClause->getBeginLoc(), diag::note_omp_directive_here) << \"#pragma omp unroll full\";"}}
[j]={{x,14994,"StmtResult Sema::ActOnOpenMPUnrollDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (FullClause) {\n    if (!VerifyPositiveIntegerConstantInClause(LoopHelper.NumIterations, OMPC_full, /*StrictlyPositive=*/false,\n      Diag(FullClause->getBeginLoc(), diag::note_omp_directive_here) << \"#pragma omp unroll full\";"}},
[k]={
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:83:22: note: \'#pragma omp unroll full\' directive found here","clang/test/OpenMP/unroll_messages.cpp:123:22: note: \'#pragma omp unroll full\' directive found here"}
}
},
},
["note_omp_exits_structured_block"]={
["note_omp_exits_structured_block"]={
[c]="jump exits scope of OpenMP structured block",
[f]="jump exits scope of OpenMP structured block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump exits scope of OpenMP structured block",
[d]="jump exits scope of OpenMP structured block",
[b]=m,
[e]=p,
[g]="jump exits scope of OpenMP structured block",
[a]="jump exits scope of OpenMP structured block",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={eb,1582847864,cb},
[i]={hb,1582847864,ib},
[j]={{N,617,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{N,946,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n        S.Diag(To->getBeginLoc(), diag::note_omp_exits_structured_block);"}}
[j]={{O,617,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{O,946,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n        S.Diag(To->getBeginLoc(), diag::note_omp_exits_structured_block);"}},
[k]={
["clang/test/OpenMP/master_messages.cpp"]={"clang/test/OpenMP/master_messages.cpp:57:3: note: jump exits scope of OpenMP structured block"}
}
},
},
["note_omp_explicit_dsa"]={
["note_omp_explicit_dsa"]={
[c]="defined as A",
[f]="defined as A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="defined as %0",
[d]="defined as %0",
[b]=m,
[e]=p,
[g]="defined as (.*?)",
[a]="defined as (.*?)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[j]={{w,3569,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (DVar.RefExpr) {\n    SemaRef.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(DVar.CKind);"},{w,6909,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.8.1, simd construct, Restrictions]\n          // A list-item cannot appear in more than one aligned clause.\n          if (AlignedArgs.count(CanonPVD) > 0) {\n            Diag(AlignedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,6931,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (isa<CXXThisExpr>(E)) {\n      if (AlignedThis) {\n        Diag(AlignedThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,6980,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.15.3.7, linear Clause, Restrictions]\n          // A list-item cannot appear in more than one linear clause.\n          if (LinearArgs.count(CanonPVD) > 0) {\n            Diag(LinearArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_linear);"},{w,6990,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // Each argument can appear in at most one uniform or linear clause.\n          if (UniformedArgs.count(CanonPVD) > 0) {\n            Diag(UniformedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_uniform);"},{w,7011,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (isa<CXXThisExpr>(E)) {\n      if (UniformedLinearThis) {\n        Diag(UniformedLinearThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform : OMPC_linear);"},{w,20299,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP  [2.8.1, simd construct, Restrictions]\n    // A list-item cannot appear in more than one aligned clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueAligned(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,23732,"OMPClause *Sema::ActOnOpenMPNontemporalClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0, 2.9.3.1 simd Construct, Restrictions.\n    // A list-item cannot appear in more than one nontemporal clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueNontemporal(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_nontemporal);"}}
[j]={{x,3569,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (DVar.RefExpr) {\n    SemaRef.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(DVar.CKind);"},{x,6909,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.8.1, simd construct, Restrictions]\n          // A list-item cannot appear in more than one aligned clause.\n          if (AlignedArgs.count(CanonPVD) > 0) {\n            Diag(AlignedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{x,6931,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (isa<CXXThisExpr>(E)) {\n      if (AlignedThis) {\n        Diag(AlignedThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{x,6980,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.15.3.7, linear Clause, Restrictions]\n          // A list-item cannot appear in more than one linear clause.\n          if (LinearArgs.count(CanonPVD) > 0) {\n            Diag(LinearArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_linear);"},{x,6990,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // Each argument can appear in at most one uniform or linear clause.\n          if (UniformedArgs.count(CanonPVD) > 0) {\n            Diag(UniformedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_uniform);"},{x,7011,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (isa<CXXThisExpr>(E)) {\n      if (UniformedLinearThis) {\n        Diag(UniformedLinearThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform : OMPC_linear);"},{x,20299,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP  [2.8.1, simd construct, Restrictions]\n    // A list-item cannot appear in more than one aligned clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueAligned(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{x,23732,"OMPClause *Sema::ActOnOpenMPNontemporalClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0, 2.9.3.1 simd Construct, Restrictions.\n    // A list-item cannot appear in more than one nontemporal clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueNontemporal(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_nontemporal);"}},
[k]={
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:49:62: note: defined as private"}
}
},
},
["note_omp_flush_order_clause_here"]={
["note_omp_flush_order_clause_here"]={
[c]="memory order clause \'A\' is specified here",
[f]="memory order clause \'A\' is specified here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="memory order clause \'%0\' is specified here",
[d]="memory order clause \'%0\' is specified here",
[b]=m,
[e]=p,
[g]="memory order clause \'(.*?)\' is specified here",
[a]="memory order clause \'(.*?)\' is specified here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{w,11242,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (FC && OrderClause) {\n    Diag(OrderClause->getBeginLoc(), diag::note_omp_flush_order_clause_here) << getOpenMPClauseName(OrderClause->getClauseKind());"}}
[j]={{x,11242,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (FC && OrderClause) {\n    Diag(OrderClause->getBeginLoc(), diag::note_omp_flush_order_clause_here) << getOpenMPClauseName(OrderClause->getClauseKind());"}},
[k]={
["clang/test/OpenMP/flush_messages.cpp"]={"clang/test/OpenMP/flush_messages.cpp:146:25: note: memory order clause \'acq_rel\' is specified here"}
}
},
},
["note_omp_implicit_dsa"]={
["note_omp_implicit_dsa"]={
[c]="implicitly determined as A",
[f]="implicitly determined as A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="implicitly determined as %0",
[d]="implicitly determined as %0",
[b]=m,
[e]=p,
[g]="implicitly determined as (.*?)",
[a]="implicitly determined as (.*?)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"bae9a793fdf7",1403865426,"[OPENMP] Parsing and sema analysis for \'copyprivate\' clause."},
[i]={"bae9a793fdf7",1403865426,"[OPENMP] Parsing and sema analysis for \'copyprivate\' clause."},
[j]={{w,3616,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (Reason != PDSA_Implicit) {\n  } else if (DVar.ImplicitDSALoc.isValid()) {\n    SemaRef.Diag(DVar.ImplicitDSALoc, diag::note_omp_implicit_dsa) << getOpenMPClauseName(DVar.CKind);"}}
[j]={{x,3616,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (Reason != PDSA_Implicit) {\n  } else if (DVar.ImplicitDSALoc.isValid()) {\n    SemaRef.Diag(DVar.ImplicitDSALoc, diag::note_omp_implicit_dsa) << getOpenMPClauseName(DVar.CKind);"}},
[k]={
["clang/test/OpenMP/single_copyprivate_messages.cpp"]={"clang/test/OpenMP/single_copyprivate_messages.cpp:146:1: note: implicitly determined as shared","clang/test/OpenMP/single_copyprivate_messages.cpp:162:30: note: implicitly determined as shared","clang/test/OpenMP/single_copyprivate_messages.cpp:168:1: note: implicitly determined as shared","clang/test/OpenMP/single_copyprivate_messages.cpp:70:1: note: implicitly determined as shared","clang/test/OpenMP/single_copyprivate_messages.cpp:86:30: note: implicitly determined as shared","clang/test/OpenMP/single_copyprivate_messages.cpp:92:1: note: implicitly determined as shared"}
}
},
},
["note_omp_invalid_length_on_this_ptr_mapping"]={
["note_omp_invalid_length_on_this_ptr_mapping"]={
[c]="expected length on mapping of \'this\' array section expression to be \'1\'",
[f]="expected length on mapping of \'this\' array section expression to be \'1\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="expected length on mapping of \'this\' array section expression to be \'1\'",
[d]="expected length on mapping of \'this\' array section expression to be \'1\'",
[b]=m,
[e]=p,
[g]="expected length on mapping of \'this\' array section expression to be \'1\'",
[a]="expected length on mapping of \'this\' array section expression to be \'1\'",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[j]={{w,21319,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n      if (!OASE->getLength()->isValueDependent() && OASE->getLength()->EvaluateAsInt(ResultR, SemaRef.getASTContext()) && !ResultR.Val.getInt().isOne()) {\n        SemaRef.Diag(OASE->getLength()->getExprLoc(), diag::note_omp_invalid_length_on_this_ptr_mapping);"}}
[j]={{x,21319,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n      if (!OASE->getLength()->isValueDependent() && OASE->getLength()->EvaluateAsInt(ResultR, SemaRef.getASTContext()) && !ResultR.Val.getInt().isOne()) {\n        SemaRef.Diag(OASE->getLength()->getExprLoc(), diag::note_omp_invalid_length_on_this_ptr_mapping);"}},
[k]={
["clang/test/OpenMP/target_messages.cpp"]={"clang/test/OpenMP/target_messages.cpp:51:34: note: expected length on mapping of \'this\' array section expression to be \'1\'"}
}
},
},
["note_omp_invalid_lower_bound_on_this_ptr_mapping"]={
["note_omp_invalid_lower_bound_on_this_ptr_mapping"]={
[c]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified",
[f]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified",
[d]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified",
[b]=m,
[e]=p,
[g]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified",
[a]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[j]={{w,21328,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n      if (OASE->getLowerBound() && !OASE->getLowerBound()->isValueDependent() && OASE->getLowerBound()->EvaluateAsInt(ResultL, SemaRef.getASTContext()) && !ResultL.Val.getInt().isZero()) {\n        SemaRef.Diag(OASE->getLowerBound()->getExprLoc(), diag::note_omp_invalid_lower_bound_on_this_ptr_mapping);"}}
[j]={{x,21328,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n      if (OASE->getLowerBound() && !OASE->getLowerBound()->isValueDependent() && OASE->getLowerBound()->EvaluateAsInt(ResultL, SemaRef.getASTContext()) && !ResultL.Val.getInt().isZero()) {\n        SemaRef.Diag(OASE->getLowerBound()->getExprLoc(), diag::note_omp_invalid_lower_bound_on_this_ptr_mapping);"}},
[k]={
["clang/test/OpenMP/target_messages.cpp"]={"clang/test/OpenMP/target_messages.cpp:53:33: note: expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified"}
}
},
},
["note_omp_invalid_subscript_on_this_ptr_map"]={
["note_omp_invalid_subscript_on_this_ptr_map"]={
[c]="expected \'this\' subscript expression on map clause to be \'this[0]\'",
[f]="expected \'this\' subscript expression on map clause to be \'this[0]\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="expected \'this\' subscript expression on map clause to be \'this[0]\'",
[d]="expected \'this\' subscript expression on map clause to be \'this[0]\'",
[b]=m,
[e]=p,
[g]="expected \'this\' subscript expression on map clause to be \'this\\[0\\]\'",
[a]="expected \'this\' subscript expression on map clause to be \'this\\[0\\]\'",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[j]={{w,21240,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E->IgnoreParenCasts())) {\n      if (!AE->getIdx()->isValueDependent() && AE->getIdx()->EvaluateAsInt(Result, SemaRef.getASTContext()) && !Result.Val.getInt().isZero()) {\n        SemaRef.Diag(AE->getIdx()->getExprLoc(), diag::note_omp_invalid_subscript_on_this_ptr_map);"}}
[j]={{x,21240,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E->IgnoreParenCasts())) {\n      if (!AE->getIdx()->isValueDependent() && AE->getIdx()->EvaluateAsInt(Result, SemaRef.getASTContext()) && !Result.Val.getInt().isZero()) {\n        SemaRef.Diag(AE->getIdx()->getExprLoc(), diag::note_omp_invalid_subscript_on_this_ptr_map);"}},
[k]={
["clang/test/OpenMP/target_messages.cpp"]={"clang/test/OpenMP/target_messages.cpp:55:33: note: expected \'this\' subscript expression on map clause to be \'this[0]\'"}
}
},
},
["note_omp_loop_cond_requres_compatible_incr"]={
["note_omp_loop_cond_requres_compatible_incr"]={
[c]="loop step is expected to be ... due to this condition",
[f]="loop step is expected to be ... due to this condition",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="loop step is expected to be %select{negative|positive}0 due to this condition",
[d]="loop step is expected to be %select{negative|positive}0 due to this condition",
[b]=m,
[e]=p,
[g]="loop step is expected to be (?:negative|positive) due to this condition",
[a]="loop step is expected to be (?:negative|positive) due to this condition",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"},
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"},
[j]={{w,8026,"bool OpenMPIterationSpaceChecker::setStep(Expr *NewStep, bool Subtract) {\n  if (!NewStep->isValueDependent()) {\n    if (UB && (IsConstZero || (*TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract)) : (IsConstPos || (IsUnsigned && !Subtract))))) {\n      SemaRef.Diag(ConditionLoc, diag::note_omp_loop_cond_requres_compatible_incr) << *TestIsLessOp << ConditionSrcRange;"}}
[j]={{x,8026,"bool OpenMPIterationSpaceChecker::setStep(Expr *NewStep, bool Subtract) {\n  if (!NewStep->isValueDependent()) {\n    if (UB && (IsConstZero || (*TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract)) : (IsConstPos || (IsUnsigned && !Subtract))))) {\n      SemaRef.Diag(ConditionLoc, diag::note_omp_loop_cond_requres_compatible_incr) << *TestIsLessOp << ConditionSrcRange;"}},
[k]={
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:199:19: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:205:19: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:211:21: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:217:20: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:223:19: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:229:19: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:235:21: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:241:20: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:295:26: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:437:30: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:449:30: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:474:28: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:530:24: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:493:26: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:499:26: note: loop step is expected to be positive due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:517:24: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:523:24: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:517:24: note: loop step is expected to be negative due to this condition","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:523:24: note: loop step is expected to be negative due to this condition"}
}
},
},
["note_omp_marked_declare_variant_here"]={
["note_omp_marked_declare_variant_here"]={
[c]="marked as \'declare variant\' here",
[f]="marked as \'declare variant\' here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="marked as \'declare variant\' here",
[d]="marked as \'declare variant\' here",
[b]=m,
[e]=p,
[g]="marked as \'declare variant\' here",
[a]="marked as \'declare variant\' here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{w,7584,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // Check if variant function is not marked with declare variant directive.\n  if (NewFD->hasAttrs() && NewFD->hasAttr<OMPDeclareVariantAttr>()) {\n    Diag(SR.getBegin(), diag::note_omp_marked_declare_variant_here) << SR;"}}
[j]={{x,7584,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // Check if variant function is not marked with declare variant directive.\n  if (NewFD->hasAttrs() && NewFD->hasAttr<OMPDeclareVariantAttr>()) {\n    Diag(SR.getBegin(), diag::note_omp_marked_declare_variant_here) << SR;"}},
[k]={
["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:173:1: note: marked as \'declare variant\' here"}
}
},
},
["note_omp_marked_device_type_here"]={
["note_omp_marked_device_type_here"]={
[c]="marked as \'device_type(A)\' here",
[f]="marked as \'device_type(A)\' here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="marked as \'device_type(%0)\' here",
[d]="marked as \'device_type(%0)\' here",
[b]=m,
[e]=p,
[g]="marked as \'device_type\\((.*?)\\)\' here",
[a]="marked as \'device_type\\((.*?)\\)\' here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"},
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"},
[j]={{w,2722,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (LangOpts.OpenMPIsTargetDevice && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_Host) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << HostDevTy;"},{w,2751,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (!LangOpts.OpenMPIsTargetDevice && !LangOpts.OpenMPOffloadMandatory && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_NoHost) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << NoHostDevTy;"}}
[j]={{x,2722,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (LangOpts.OpenMPIsTargetDevice && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_Host) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << HostDevTy;"},{x,2751,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (!LangOpts.OpenMPIsTargetDevice && !LangOpts.OpenMPOffloadMandatory && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_NoHost) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << NoHostDevTy;"}},
[k]={
["clang/test/OpenMP/declare_target_nohost_variant_messages.cpp"]={"clang/test/OpenMP/declare_target_nohost_variant_messages.cpp:15:34: note: marked as \'device_type(nohost)\' here","clang/test/OpenMP/declare_target_nohost_variant_messages.cpp:18:27: note: marked as \'device_type(nohost)\' here"}
}
},
},
["note_omp_nested_statement_here"]={
["note_omp_nested_statement_here"]={
[c]="... outside teams construct here",
[f]="... outside teams construct here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{statement|directive}0 outside teams construct here",
[d]="%select{statement|directive}0 outside teams construct here",
[b]=m,
[e]=p,
[g]="(?:statement|directive) outside teams construct here",
[a]="(?:statement|directive) outside teams construct here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[j]={{w,13062,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    if (!OMPTeamsFound) {\n      Diag(S->getBeginLoc(), diag::note_omp_nested_statement_here) << isa<OMPExecutableDirective>(S);"}}
[j]={{x,13062,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    if (!OMPTeamsFound) {\n      Diag(S->getBeginLoc(), diag::note_omp_nested_statement_here) << isa<OMPExecutableDirective>(S);"}},
[k]={
["clang/test/OpenMP/nesting_of_regions.cpp"]={"clang/test/OpenMP/nesting_of_regions.cpp:4882:1: note: directive outside teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:4889:5: note: statement outside teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:4895:5: note: statement outside teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:13739:1: note: directive outside teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:13746:5: note: statement outside teams construct here"}
}
},
},
["note_omp_nested_teams_construct_here"]={
["note_omp_nested_teams_construct_here"]={
[c]="nested teams construct here",
[f]="nested teams construct here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="nested teams construct here",
[d]="nested teams construct here",
[b]=m,
[e]=p,
[g]="nested teams construct here",
[a]="nested teams construct here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[j]={{w,13061,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    if (!OMPTeamsFound) {\n      Diag(DSAStack->getInnerTeamsRegionLoc(), diag::note_omp_nested_teams_construct_here);"}}
[j]={{x,13061,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    if (!OMPTeamsFound) {\n      Diag(DSAStack->getInnerTeamsRegionLoc(), diag::note_omp_nested_teams_construct_here);"}},
[k]={
["clang/test/OpenMP/nesting_of_regions.cpp"]={"clang/test/OpenMP/nesting_of_regions.cpp:4884:1: note: nested teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:4890:1: note: nested teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:4896:1: note: nested teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:13741:1: note: nested teams construct here","clang/test/OpenMP/nesting_of_regions.cpp:13747:1: note: nested teams construct here"}
}
},
},
["note_omp_nowait_clause_here"]={
["note_omp_nowait_clause_here"]={
[c]="\'nowait\' clause is here",
[f]="\'nowait\' clause is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'nowait\' clause is here",
[d]="\'nowait\' clause is here",
[b]=m,
[e]=p,
[g]="\'nowait\' clause is here",
[a]="\'nowait\' clause is here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive."},
[i]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive."},
[j]={{w,10826,"StmtResult Sema::ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *Clause : Clauses) {\n    if (Copyprivate && Nowait) {\n      Diag(Nowait->getBeginLoc(), diag::note_omp_nowait_clause_here);"}}
[j]={{x,10826,"StmtResult Sema::ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *Clause : Clauses) {\n    if (Copyprivate && Nowait) {\n      Diag(Nowait->getBeginLoc(), diag::note_omp_nowait_clause_here);"}},
[k]={
["clang/test/OpenMP/single_copyprivate_messages.cpp"]={"clang/test/OpenMP/single_copyprivate_messages.cpp:179:35: note: \'nowait\' clause is here"}
}
},
},
["note_omp_ordered_param"]={
["note_omp_ordered_param"]={
[c]="\'ordered\' clause...",
[f]="\'ordered\' clause...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'ordered\' clause%select{| with specified parameter}0",
[d]="\'ordered\' clause%select{| with specified parameter}0",
[b]=m,
[e]=p,
[g]="\'ordered\' clause(?:| with specified parameter)",
[a]="\'ordered\' clause(?:| with specified parameter)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'."},
[i]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'."},
[j]={{w,4766,"static bool checkOrderedOrderSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n  if (Ordered && Order) {\n    S.Diag(Ordered->getBeginLoc(), diag::note_omp_ordered_param) << 0 << SourceRange(Ordered->getBeginLoc(), Ordered->getEndLoc());"},{w,11384,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n  } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n  } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) {\n  } else if (TC || Clauses.empty()) {\n    if (const Expr *Param = DSAStack->getParentOrderedRegionParam().first) {\n      Diag(Param->getBeginLoc(), diag::note_omp_ordered_param) << 1;"}}
[j]={{x,4766,"static bool checkOrderedOrderSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n  if (Ordered && Order) {\n    S.Diag(Ordered->getBeginLoc(), diag::note_omp_ordered_param) << 0 << SourceRange(Ordered->getBeginLoc(), Ordered->getEndLoc());"},{x,11384,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n  } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n  } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) {\n  } else if (TC || Clauses.empty()) {\n    if (const Expr *Param = DSAStack->getParentOrderedRegionParam().first) {\n      Diag(Param->getBeginLoc(), diag::note_omp_ordered_param) << 1;"}},
[k]={
["clang/test/OpenMP/for_misc_messages.c"]={"clang/test/OpenMP/for_misc_messages.c:419:17: note: \'ordered\' clause"}
}
},
},
["note_omp_predefined_allocator"]={
["note_omp_predefined_allocator"]={
[c]="predefined trait \'A\' used here",
[f]="predefined trait \'A\' used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="predefined trait \'%0\' used here",
[d]="predefined trait \'%0\' used here",
[b]=m,
[e]=p,
[g]="predefined trait \'(.*?)\' used here",
[a]="predefined trait \'(.*?)\' used here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{w,23913,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n  for (const UsesAllocatorsData &D : Data) {\n    // Check allocator expression.\n    if (D.Allocator->isTypeDependent()) {\n    } else {\n      // OpenMP [2.12.5, target Construct]\n      // Predefined allocators appearing in a uses_allocators clause cannot have\n      // traits specified.\n      if (IsPredefinedAllocator && D.AllocatorTraits) {\n        Diag(D.Allocator->getExprLoc(), diag::note_omp_predefined_allocator) << cast<NamedDecl>(DRE->getDecl())->getName() << D.Allocator->getSourceRange();"}}
[j]={{x,23913,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n  for (const UsesAllocatorsData &D : Data) {\n    // Check allocator expression.\n    if (D.Allocator->isTypeDependent()) {\n    } else {\n      // OpenMP [2.12.5, target Construct]\n      // Predefined allocators appearing in a uses_allocators clause cannot have\n      // traits specified.\n      if (IsPredefinedAllocator && D.AllocatorTraits) {\n        Diag(D.Allocator->getExprLoc(), diag::note_omp_predefined_allocator) << cast<NamedDecl>(DRE->getDecl())->getName() << D.Allocator->getSourceRange();"}},
[k]={
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:37:36: note: predefined trait \'omp_default_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:67: note: predefined trait \'omp_large_cap_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:100: note: predefined trait \'omp_const_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:129: note: predefined trait \'omp_high_bw_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:160: note: predefined trait \'omp_low_lat_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:191: note: predefined trait \'omp_cgroup_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:221: note: predefined trait \'omp_pteam_mem_alloc\' used here","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:250: note: predefined trait \'omp_thread_mem_alloc\' used here"}
}
},
},
["note_omp_predetermined_dsa"]={
["note_omp_predetermined_dsa"]={
[c]="......",
[f]="......",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{static data member is predetermined as shared|variable with static storage duration is predetermined as shared|loop iteration variable is predetermined as private|loop iteration variable is predetermined as linear|loop iteration variable is predetermined as lastprivate|constant variable is predetermined as shared|global variable is predetermined as shared|non-shared variable in a task construct is predetermined as firstprivate|variable with automatic storage duration is predetermined as private}0%select{|; perhaps you forget to enclose \'omp %2\' directive into a parallel or another task region?}1",
[d]="%select{static data member is predetermined as shared|variable with static storage duration is predetermined as shared|loop iteration variable is predetermined as private|loop iteration variable is predetermined as linear|loop iteration variable is predetermined as lastprivate|constant variable is predetermined as shared|global variable is predetermined as shared|non-shared variable in a task construct is predetermined as firstprivate|variable with automatic storage duration is predetermined as private}0%select{|; perhaps you forget to enclose \'omp %2\' directive into a parallel or another task region?}1",
[b]=m,
[e]=p,
[g]="(?:static data member is predetermined as shared|variable with static storage duration is predetermined as shared|loop iteration variable is predetermined as private|loop iteration variable is predetermined as linear|loop iteration variable is predetermined as lastprivate|constant variable is predetermined as shared|global variable is predetermined as shared|non\\-shared variable in a task construct is predetermined as firstprivate|variable with automatic storage duration is predetermined as private)(?:|; perhaps you forget to enclose \'omp (.*?)\' directive into a parallel or another task region\\?)",
[a]="(?:static data member is predetermined as shared|variable with static storage duration is predetermined as shared|loop iteration variable is predetermined as private|loop iteration variable is predetermined as linear|loop iteration variable is predetermined as lastprivate|constant variable is predetermined as shared|global variable is predetermined as shared|non\\-shared variable in a task construct is predetermined as firstprivate|variable with automatic storage duration is predetermined as private)(?:|; perhaps you forget to enclose \'omp (.*?)\' directive into a parallel or another task region\\?)",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[j]={{w,3612,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (Reason != PDSA_Implicit) {\n    SemaRef.Diag(ReportLoc, diag::note_omp_predetermined_dsa) << Reason << ReportHint << getOpenMPDirectiveName(Stack->getCurrentDirective());"}}
[j]={{x,3612,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (Reason != PDSA_Implicit) {\n    SemaRef.Diag(ReportLoc, diag::note_omp_predetermined_dsa) << Reason << ReportHint << getOpenMPDirectiveName(Stack->getCurrentDirective());"}},
[k]={
["clang/test/OpenMP/target_teams_private_messages.cpp"]={"clang/test/OpenMP/target_teams_private_messages.cpp:29:16: note: static data member is predetermined as shared"}
}
},
},
["note_omp_previous_allocator"]={
["note_omp_previous_allocator"]={
[c]="previous allocator is specified here",
[f]="previous allocator is specified here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous allocator is specified here",
[d]="previous allocator is specified here",
[b]=m,
[e]=p,
[g]="previous allocator is specified here",
[a]="previous allocator is specified here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable."},
[i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable."},
[j]={{w,3347,"static bool checkPreviousOMPAllocateAttribute(Sema &S, DSAStackTy *Stack, Expr *RefExpr, VarDecl *VD, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorKind, Expr *Allocator) {\n  if (!AllocatorsMatch) {\n    S.Diag(PrevAllocatorLoc, diag::note_omp_previous_allocator) << PrevAllocatorRange;"}}
[j]={{x,3347,"static bool checkPreviousOMPAllocateAttribute(Sema &S, DSAStackTy *Stack, Expr *RefExpr, VarDecl *VD, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorKind, Expr *Allocator) {\n  if (!AllocatorsMatch) {\n    S.Diag(PrevAllocatorLoc, diag::note_omp_previous_allocator) << PrevAllocatorRange;"}},
[k]={
["clang/test/OpenMP/allocate_allocator_messages.cpp"]={"clang/test/OpenMP/allocate_allocator_messages.cpp:32:22: note: previous allocator is specified here","clang/test/OpenMP/allocate_allocator_messages.cpp:42:35: note: previous allocator is specified here","clang/test/OpenMP/allocate_allocator_messages.cpp:46:35: note: previous allocator is specified here"}
}
},
},
["note_omp_previous_clause"]={
["note_omp_previous_clause"]={
[c]="\'A\' clause is specified here",
[f]="\'A\' clause is specified here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' clause is specified here",
[d]="\'%0\' clause is specified here",
[b]=m,
[e]=p,
[g]="\'(.*?)\' clause is specified here",
[a]="\'(.*?)\' clause is specified here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{w,11101,"/// Find and diagnose mutually exclusive clause kinds.\nstatic bool checkMutuallyExclusiveClauses(Sema &S, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPClauseKind> MutuallyExclusiveClauses) {\n  for (const OMPClause *C : Clauses) {\n    if (llvm::is_contained(MutuallyExclusiveClauses, C->getClauseKind())) {\n      if (!PrevClause) {\n      } else if (PrevClause->getClauseKind() != C->getClauseKind()) {\n        S.Diag(PrevClause->getBeginLoc(), diag::note_omp_previous_clause) << getOpenMPClauseName(PrevClause->getClauseKind());"}}
[j]={{x,11101,"/// Find and diagnose mutually exclusive clause kinds.\nstatic bool checkMutuallyExclusiveClauses(Sema &S, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPClauseKind> MutuallyExclusiveClauses) {\n  for (const OMPClause *C : Clauses) {\n    if (llvm::is_contained(MutuallyExclusiveClauses, C->getClauseKind())) {\n      if (!PrevClause) {\n      } else if (PrevClause->getClauseKind() != C->getClauseKind()) {\n        S.Diag(PrevClause->getBeginLoc(), diag::note_omp_previous_clause) << getOpenMPClauseName(PrevClause->getClauseKind());"}},
[k]={
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:75:22: note: \'partial\' clause is specified here","clang/test/OpenMP/unroll_messages.cpp:79:22: note: \'full\' clause is specified here"}
}
},
},
["note_omp_previous_critical_region"]={
["note_omp_previous_critical_region"]={
[c]="previous \'critical\' region starts here",
[f]="previous \'critical\' region starts here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous \'critical\' region starts here",
[d]="previous \'critical\' region starts here",
[b]=m,
[e]=p,
[g]="previous \'critical\' region starts here",
[a]="previous \'critical\' region starts here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'."},
[i]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'."},
[j]={{w,5108,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n    if (CurrentRegion == OMPD_cancellation_point || CurrentRegion == OMPD_cancel) {\n    } else if (CurrentRegion == OMPD_master || CurrentRegion == OMPD_masked) {\n    } else if (CurrentRegion == OMPD_critical && CurrentName.getName()) {\n      if (DeadLock) {\n        if (PreviousCriticalLoc.isValid())\n          SemaRef.Diag(PreviousCriticalLoc, diag::note_omp_previous_critical_region);"}}
[j]={{x,5108,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n    if (CurrentRegion == OMPD_cancellation_point || CurrentRegion == OMPD_cancel) {\n    } else if (CurrentRegion == OMPD_master || CurrentRegion == OMPD_masked) {\n    } else if (CurrentRegion == OMPD_critical && CurrentName.getName()) {\n      if (DeadLock) {\n        if (PreviousCriticalLoc.isValid())\n          SemaRef.Diag(PreviousCriticalLoc, diag::note_omp_previous_critical_region);"}},
[k]={
["clang/test/OpenMP/critical_messages.cpp"]={"clang/test/OpenMP/critical_messages.cpp:27:3: note: previous \'critical\' region starts here","clang/test/OpenMP/critical_messages.cpp:94:3: note: previous \'critical\' region starts here"}
}
},
},
["note_omp_previous_directive"]={
["note_omp_previous_directive"]={
[c]="previous \'A\' directive used here",
[f]="previous \'A\' directive used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous \'%0\' directive used here",
[d]="previous \'%0\' directive used here",
[b]=m,
[e]=p,
[g]="previous \'(.*?)\' directive used here",
[a]="previous \'(.*?)\' directive used here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={eb,1582847864,cb},
[i]={hb,1582847864,ib},
[j]={{w,11293,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Check that only one instance of scan directives is used in the same outer\n  // region.\n  if (DSAStack->doesParentHasScanDirective()) {\n    Diag(DSAStack->getParentScanDirectiveLoc(), diag::note_omp_previous_directive) << \"scan\";"},{w,11400,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.0, 2.17.9, ordered Construct, Restrictions.\n  // During execution of an iteration of a worksharing-loop or a loop nest\n  // within a worksharing-loop, simd, or worksharing-loop SIMD region, a thread\n  // must not execute more than one ordered region corresponding to an ordered\n  // construct without a depend clause.\n  if (!DependFound && !DoacrossFound) {\n    if (DSAStack->doesParentHasOrderedDirective()) {\n      Diag(DSAStack->getParentOrderedDirectiveLoc(), diag::note_omp_previous_directive) << \"ordered\";"}}
[j]={{x,11293,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Check that only one instance of scan directives is used in the same outer\n  // region.\n  if (DSAStack->doesParentHasScanDirective()) {\n    Diag(DSAStack->getParentScanDirectiveLoc(), diag::note_omp_previous_directive) << \"scan\";"},{x,11400,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.0, 2.17.9, ordered Construct, Restrictions.\n  // During execution of an iteration of a worksharing-loop or a loop nest\n  // within a worksharing-loop, simd, or worksharing-loop SIMD region, a thread\n  // must not execute more than one ordered region corresponding to an ordered\n  // construct without a depend clause.\n  if (!DependFound && !DoacrossFound) {\n    if (DSAStack->doesParentHasOrderedDirective()) {\n      Diag(DSAStack->getParentOrderedDirectiveLoc(), diag::note_omp_previous_directive) << \"ordered\";"}},
[k]={
["clang/test/OpenMP/scan_messages.cpp"]={"clang/test/OpenMP/scan_messages.cpp:80:1: note: previous \'scan\' directive used here","clang/test/OpenMP/scan_messages.cpp:172:1: note: previous \'scan\' directive used here"}
}
},
},
["note_omp_previous_inscan_reduction"]={
["note_omp_previous_inscan_reduction"]={
[c]="\'reduction\' clause with \'inscan\' modifier is used here",
[f]="\'reduction\' clause with \'inscan\' modifier is used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'reduction\' clause with \'inscan\' modifier is used here",
[d]="\'reduction\' clause with \'inscan\' modifier is used here",
[b]=m,
[e]=p,
[g]="\'reduction\' clause with \'inscan\' modifier is used here",
[a]="\'reduction\' clause with \'inscan\' modifier is used here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{w,2821,"/// Check consistency of the reduction clauses.\nstatic void checkReductionClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n  if (InscanFound) {\n    for (OMPClause *C : Clauses) {\n      if (RC->getModifier() != OMPC_REDUCTION_inscan) {\n        S.Diag(InscanLoc, diag::note_omp_previous_inscan_reduction);"}}
[j]={{x,2821,"/// Check consistency of the reduction clauses.\nstatic void checkReductionClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n  if (InscanFound) {\n    for (OMPClause *C : Clauses) {\n      if (RC->getModifier() != OMPC_REDUCTION_inscan) {\n        S.Diag(InscanLoc, diag::note_omp_previous_inscan_reduction);"}},
[k]={
["clang/test/OpenMP/parallel_for_reduction_messages.cpp"]={"clang/test/OpenMP/parallel_for_reduction_messages.cpp:362:36: note: \'reduction\' clause with \'inscan\' modifier is used here","clang/test/OpenMP/parallel_for_reduction_messages.cpp:362:36: note: \'reduction\' clause with \'inscan\' modifier is used here"}
}
},
},
["note_omp_previous_mem_order_clause"]={
["note_omp_previous_mem_order_clause"]={
[c]="\'A\' clause used here",
[f]="\'A\' clause used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' clause used here",
[d]="\'%0\' clause used here",
[b]=m,
[e]=p,
[g]="\'(.*?)\' clause used here",
[a]="\'(.*?)\' clause used here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{w,11231,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    if (C->getClauseKind() == OMPC_acq_rel || C->getClauseKind() == OMPC_acquire || C->getClauseKind() == OMPC_release) {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{w,12496,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n        Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{w,12504,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n      } else {\n        if (!EncounteredAtomicKinds.insert(C->getClauseKind()).second) {\n          Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{w,12519,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_relaxed: {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{w,12559,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.0, 2.17.7 atomic Construct, Restrictions\n  // If atomic-clause is read then memory-order-clause must not be acq_rel or\n  // release.\n  // If atomic-clause is write then memory-order-clause must not be acq_rel or\n  // acquire.\n  // If atomic-clause is update or not present then memory-order-clause must not\n  // be acq_rel or acquire.\n  if ((AtomicKind == OMPC_read && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_release)) || ((AtomicKind == OMPC_write || AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_acquire))) {\n    Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"}}
[j]={{x,11231,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    if (C->getClauseKind() == OMPC_acq_rel || C->getClauseKind() == OMPC_acquire || C->getClauseKind() == OMPC_release) {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{x,12496,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n        Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{x,12504,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n      } else {\n        if (!EncounteredAtomicKinds.insert(C->getClauseKind()).second) {\n          Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{x,12519,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_relaxed: {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{x,12559,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.0, 2.17.7 atomic Construct, Restrictions\n  // If atomic-clause is read then memory-order-clause must not be acq_rel or\n  // release.\n  // If atomic-clause is write then memory-order-clause must not be acq_rel or\n  // acquire.\n  // If atomic-clause is update or not present then memory-order-clause must not\n  // be acq_rel or acquire.\n  if ((AtomicKind == OMPC_read && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_release)) || ((AtomicKind == OMPC_write || AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_acquire))) {\n    Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"}},
[k]={
["clang/test/OpenMP/flush_messages.cpp"]={"clang/test/OpenMP/flush_messages.cpp:143:19: note: \'acq_rel\' clause used here","clang/test/OpenMP/flush_messages.cpp:144:19: note: \'release\' clause used here"}
}
},
},
["note_omp_previous_named_if_clause"]={
["note_omp_previous_named_if_clause"]={
[c]="previous clause with directive name modifier specified here",
[f]="previous clause with directive name modifier specified here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous clause with directive name modifier specified here",
[d]="previous clause with directive name modifier specified here",
[b]=m,
[e]=p,
[g]="previous clause with directive name modifier specified here",
[a]="previous clause with directive name modifier specified here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause."},
[i]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause."},
[j]={{w,5320,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n  // If any if clause on the directive includes a directive-name-modifier then\n  // all if clauses on the directive must include a directive-name-modifier.\n  if (FoundNameModifiers[OMPD_unknown] && NamedModifiersNumber > 0) {\n    for (SourceLocation Loc : NameModifierLoc) {\n      S.Diag(Loc, diag::note_omp_previous_named_if_clause);"}}
[j]={{x,5320,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n  // If any if clause on the directive includes a directive-name-modifier then\n  // all if clauses on the directive must include a directive-name-modifier.\n  if (FoundNameModifiers[OMPD_unknown] && NamedModifiersNumber > 0) {\n    for (SourceLocation Loc : NameModifierLoc) {\n      S.Diag(Loc, diag::note_omp_previous_named_if_clause);"}},
[k]={
["clang/test/OpenMP/target_data_if_messages.cpp"]={"clang/test/OpenMP/target_data_if_messages.cpp:38:41: note: previous clause with directive name modifier specified here"}
}
},
},
["note_omp_previous_reduction_identifier"]={
["note_omp_previous_reduction_identifier"]={
[c]="previously marked as task_reduction with different reduction operation",
[f]="previously marked as task_reduction with different reduction operation",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously marked as task_reduction with different reduction operation",
[d]="previously marked as task_reduction with different reduction operation",
[b]=m,
[e]=p,
[g]="previously marked as task_reduction with different reduction operation",
[a]="previously marked as task_reduction with different reduction operation",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause."},
[i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause."},
[j]={{w,19812,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.15.4.6, Restrictions, p.2]\n    // A list item that appears in an in_reduction clause of a task construct\n    // must appear in a task_reduction clause of a construct associated with a\n    // taskgroup region that includes the participating task in its taskgroup\n    // set. The construct associated with the innermost region that meets this\n    // condition must specify the same reduction-identifier as the in_reduction\n    // clause.\n    if (ClauseKind == OMPC_in_reduction) {\n      if ((DeclareReductionRef.isUnset() && IsParentReductionOp) || (DeclareReductionRef.isUsable() && IsParentBOK) || (IsParentBOK && BOK != ParentBOK) || IsParentReductionOp) {\n        if (EmitError) {\n          S.Diag(ParentSR.getBegin(), diag::note_omp_previous_reduction_identifier) << ParentSR << (IsParentBOK ? ParentBOKDSA.RefExpr : ParentReductionOpDSA.RefExpr)->getSourceRange();"}}
[j]={{x,19812,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.15.4.6, Restrictions, p.2]\n    // A list item that appears in an in_reduction clause of a task construct\n    // must appear in a task_reduction clause of a construct associated with a\n    // taskgroup region that includes the participating task in its taskgroup\n    // set. The construct associated with the innermost region that meets this\n    // condition must specify the same reduction-identifier as the in_reduction\n    // clause.\n    if (ClauseKind == OMPC_in_reduction) {\n      if ((DeclareReductionRef.isUnset() && IsParentReductionOp) || (DeclareReductionRef.isUsable() && IsParentBOK) || (IsParentBOK && BOK != ParentBOK) || IsParentReductionOp) {\n        if (EmitError) {\n          S.Diag(ParentSR.getBegin(), diag::note_omp_previous_reduction_identifier) << ParentSR << (IsParentBOK ? ParentBOKDSA.RefExpr : ParentReductionOpDSA.RefExpr)->getSourceRange();"}},
[k]={
["clang/test/OpenMP/task_in_reduction_message.cpp"]={"clang/test/OpenMP/task_in_reduction_message.cpp:49:38: note: previously marked as task_reduction with different reduction operation","clang/test/OpenMP/task_in_reduction_message.cpp:55:38: note: previously marked as task_reduction with different reduction operation","clang/test/OpenMP/task_in_reduction_message.cpp:260:38: note: previously marked as task_reduction with different reduction operation"}
}
},
},
["note_omp_protected_structured_block"]={
["note_omp_protected_structured_block"]={
[c]="jump bypasses OpenMP structured block",
[f]="jump bypasses OpenMP structured block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses OpenMP structured block",
[d]="jump bypasses OpenMP structured block",
[b]=m,
[e]=p,
[g]="jump bypasses OpenMP structured block",
[a]="jump bypasses OpenMP structured block",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={eb,1582847864,cb},
[i]={hb,1582847864,ib},
[j]={{N,616,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{N,944,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {"}}
[j]={{O,616,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{O,944,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {"}},
[k]={
["clang/test/OpenMP/master_messages.cpp"]={"clang/test/OpenMP/master_messages.cpp:66:3: note: jump bypasses OpenMP structured block"}
}
},
},
["note_omp_referenced"]={
["note_omp_referenced"]={
[c]="previously referenced here",
[f]="previously referenced here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously referenced here",
[d]="previously referenced here",
[b]=m,
[e]=p,
[g]="previously referenced here",
[a]="previously referenced here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause"},
[i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause"},
[j]={{w,19368,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n      if (DVar.CKind == OMPC_reduction) {\n        if (DVar.RefExpr)\n          S.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_referenced);"}}
[j]={{x,19368,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n      if (DVar.CKind == OMPC_reduction) {\n        if (DVar.RefExpr)\n          S.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_referenced);"}},
[k]={
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:287:43: note: previously referenced here","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:182:43: note: previously referenced here","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:182:43: note: previously referenced here"}
}
},
},
["note_omp_requires_encountered_directive"]={
["note_omp_requires_encountered_directive"]={
[c]="\'A\' previously encountered here",
[f]="\'A\' previously encountered here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' previously encountered here",
[d]="\'%0\' previously encountered here",
[b]=m,
[e]=p,
[g]="\'(.*?)\' previously encountered here",
[a]="\'(.*?)\' previously encountered here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{w,3545,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n        for (SourceLocation TargetLoc : TargetLocations) {\n          Diag(TargetLoc, diag::note_omp_requires_encountered_directive) << \"target\";"},{w,3552,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n      } else if (!AtomicLoc.isInvalid() && isa<OMPAtomicDefaultMemOrderClause>(CNew)) {\n        Diag(AtomicLoc, diag::note_omp_requires_encountered_directive) << \"atomic\";"}}
[j]={{x,3545,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n        for (SourceLocation TargetLoc : TargetLocations) {\n          Diag(TargetLoc, diag::note_omp_requires_encountered_directive) << \"target\";"},{x,3552,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n      } else if (!AtomicLoc.isInvalid() && isa<OMPAtomicDefaultMemOrderClause>(CNew)) {\n        Diag(AtomicLoc, diag::note_omp_requires_encountered_directive) << \"atomic\";"}},
[k]={
["clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp"]={"clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:5:3: note: \'atomic\' previously encountered here","clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:5:3: note: \'atomic\' previously encountered here","clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:5:3: note: \'atomic\' previously encountered here"}
}
},
},
["note_omp_requires_previous_clause"]={
["note_omp_requires_previous_clause"]={
[c]="A clause previously used here",
[f]="A clause previously used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 clause previously used here",
[d]="%0 clause previously used here",
[b]=m,
[e]=p,
[g]="(.*?) clause previously used here",
[a]="(.*?) clause previously used here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause"},
[i]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause"},
[j]={{w,681,"/// Stack for tracking declarations used in OpenMP directives and\n/// clauses and their data-sharing attributes.\nclass DSAStackTy {\n  /// Checks for a duplicate clause amongst previously declared requires\n  /// directives\n  bool hasDuplicateRequiresClause(ArrayRef<OMPClause *> ClauseList) const {\n    for (OMPClause *CNew : ClauseList) {\n      for (const OMPRequiresDecl *D : RequiresDecls) {\n        for (const OMPClause *CPrev : D->clauselists()) {\n          if (CNew->getClauseKind() == CPrev->getClauseKind()) {\n            SemaRef.Diag(CPrev->getBeginLoc(), diag::note_omp_requires_previous_clause) << getOpenMPClauseName(CPrev->getClauseKind());"}}
[j]={{x,681,"/// Stack for tracking declarations used in OpenMP directives and\n/// clauses and their data-sharing attributes.\nclass DSAStackTy {\n  /// Checks for a duplicate clause amongst previously declared requires\n  /// directives\n  bool hasDuplicateRequiresClause(ArrayRef<OMPClause *> ClauseList) const {\n    for (OMPClause *CNew : ClauseList) {\n      for (const OMPRequiresDecl *D : RequiresDecls) {\n        for (const OMPClause *CPrev : D->clauselists()) {\n          if (CNew->getClauseKind() == CPrev->getClauseKind()) {\n            SemaRef.Diag(CPrev->getBeginLoc(), diag::note_omp_requires_previous_clause) << getOpenMPClauseName(CPrev->getClauseKind());"}},
[k]={
["clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp"]={"clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:9:22: note: atomic_default_mem_order clause previously used here","clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:9:22: note: atomic_default_mem_order clause previously used here"}
}
},
},
["note_omp_task_predetermined_firstprivate_here"]={
["note_omp_task_predetermined_firstprivate_here"]={
[c]="predetermined as a firstprivate in a task construct here",
[f]="predetermined as a firstprivate in a task construct here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="predetermined as a firstprivate in a task construct here",
[d]="predetermined as a firstprivate in a task construct here",
[b]=m,
[e]=p,
[g]="predetermined as a firstprivate in a task construct here",
[a]="predetermined as a firstprivate in a task construct here",
[a]=l,
[g]=m,
[e]=H,
[h]=I,
[i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause."},
[i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause."},
[j]={{w,18440,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (VDPrivate->isInvalidDecl()) {\n      if (IsImplicitClause) {\n        Diag(RefExpr->getExprLoc(), diag::note_omp_task_predetermined_firstprivate_here);"}}
[j]={{x,18440,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (VDPrivate->isInvalidDecl()) {\n      if (IsImplicitClause) {\n        Diag(RefExpr->getExprLoc(), diag::note_omp_task_predetermined_firstprivate_here);"}}
},
},
["note_opencl_typedef_access_qualifier"]={
["note_opencl_typedef_access_qualifier"]={
[c]="previously declared \'A\' here",
[f]="previously declared \'A\' here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously declared \'%0\' here",
[d]="previously declared \'%0\' here",
[b]=m,
[e]=p,
[g]="previously declared \'(.*?)\' here",
[a]="previously declared \'(.*?)\' here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs"},
[i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs"},
[j]={{hb,8443,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    S.Diag(TypedefTy->getDecl()->getBeginLoc(), diag::note_opencl_typedef_access_qualifier) << PrevAccessQual;"}}
[j]={{cb,8443,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    S.Diag(TypedefTy->getDecl()->getBeginLoc(), diag::note_opencl_typedef_access_qualifier) << PrevAccessQual;"}}
},
},
["note_operator_arrow_depth"]={
["note_operator_arrow_depth"]={
[c]="use -foperator-arrow-depth=N to increase \'operator->\' limit",
[f]="use -foperator-arrow-depth=N to increase \'operator->\' limit",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use -foperator-arrow-depth=N to increase \'operator->\' limit",
[d]="use -foperator-arrow-depth=N to increase \'operator->\' limit",
[b]=m,
[e]=p,
[g]="use \\-foperator\\-arrow\\-depth\\=N to increase \'operator\\-\\>\' limit",
[a]="use \\-foperator\\-arrow\\-depth\\=N to increase \'operator\\-\\>\' limit",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[j]={{Ub,7591,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n        Diag(OpLoc, diag::note_operator_arrow_depth) << getLangOpts().ArrowDepth;"}}
[j]={{dc,7591,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n        Diag(OpLoc, diag::note_operator_arrow_depth) << getLangOpts().ArrowDepth;"}},
[k]={
["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:25:12: note: use -foperator-arrow-depth=N to increase \'operator->\' limit"}
}
},
},
["note_operator_arrow_here"]={
["note_operator_arrow_here"]={
[c]="\'operator->\' declared here produces an object of type A",
[f]="\'operator->\' declared here produces an object of type A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'operator->\' declared here produces an object of type %0",
[d]="\'operator->\' declared here produces an object of type %0",
[b]=m,
[e]=p,
[g]="\'operator\\-\\>\' declared here produces an object of type (.*?)",
[a]="\'operator\\-\\>\' declared here produces an object of type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[j]={{Ub,7537,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n    } else {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrow_here) << OperatorArrows[I]->getCallResultType();"}}
[j]={{dc,7537,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n    } else {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrow_here) << OperatorArrows[I]->getCallResultType();"}},
[k]={
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:269:7: note: \'operator->\' declared here produces an object of type \'AX\'","clang/test/SemaCXX/overloaded-operator.cpp:279:17: note: \'operator->\' declared here produces an object of type \'struct CircB\'","clang/test/SemaCXX/overloaded-operator.cpp:283:17: note: \'operator->\' declared here produces an object of type \'struct CircC\'","clang/test/SemaCXX/overloaded-operator.cpp:286:17: note: \'operator->\' declared here produces an object of type \'struct CircA\'"}
}
},
},
["note_operator_arrows_suppressed"]={
["note_operator_arrows_suppressed"]={
[c]="(skipping A \'operator->\'B in backtrace)",
[f]="(skipping A \'operator->\'B in backtrace)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="(skipping %0 \'operator->\'%s0 in backtrace)",
[d]="(skipping %0 \'operator->\'%s0 in backtrace)",
[b]=m,
[e]=p,
[g]="\\(skipping (.*?) \'operator\\-\\>\'(.*?) in backtrace\\)",
[a]="\\(skipping (.*?) \'operator\\-\\>\'(.*?) in backtrace\\)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[j]={{Ub,7533,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrows_suppressed) << SkipCount;"}}
[j]={{dc,7533,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrows_suppressed) << SkipCount;"}},
[k]={
["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:10:10: note: (skipping 2 \'operator->\'s in backtrace)"}
}
},
},
["note_overridden_marked_noescape"]={
["note_overridden_marked_noescape"]={
[c]="parameter of overridden method is annotated with __attribute__((noescape))",
[f]="parameter of overridden method is annotated with __attribute__((noescape))",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="parameter of overridden method is annotated with __attribute__((noescape))",
[d]="parameter of overridden method is annotated with __attribute__((noescape))",
[b]=m,
[e]=p,
[g]="parameter of overridden method is annotated with __attribute__\\(\\(noescape\\)\\)",
[a]="parameter of overridden method is annotated with __attribute__\\(\\(noescape\\)\\)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."},
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."},
[j]={{y,17985,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (OldFT->hasExtParameterInfos()) {\n    for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)\n      // A parameter of the overriding method should be annotated with noescape\n      // if the corresponding parameter of the overridden method is annotated.\n      if (OldFT->getExtParameterInfo(I).isNoEscape() && !NewFT->getExtParameterInfo(I).isNoEscape()) {\n        Diag(Old->getParamDecl(I)->getLocation(), diag::note_overridden_marked_noescape);"},{B,119,"/// Issue a warning if the parameter of the overridden method is non-escaping\n/// but the parameter of the overriding method is not.\nstatic bool diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, Sema &S) {\n  if (OldD->hasAttr<NoEscapeAttr>() && !NewD->hasAttr<NoEscapeAttr>()) {\n    S.Diag(OldD->getLocation(), diag::note_overridden_marked_noescape);"}}
[j]={{z,17985,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (OldFT->hasExtParameterInfos()) {\n    for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)\n      // A parameter of the overriding method should be annotated with noescape\n      // if the corresponding parameter of the overridden method is annotated.\n      if (OldFT->getExtParameterInfo(I).isNoEscape() && !NewFT->getExtParameterInfo(I).isNoEscape()) {\n        Diag(Old->getParamDecl(I)->getLocation(), diag::note_overridden_marked_noescape);"},{C,119,"/// Issue a warning if the parameter of the overridden method is non-escaping\n/// but the parameter of the overriding method is not.\nstatic bool diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, Sema &S) {\n  if (OldD->hasAttr<NoEscapeAttr>() && !NewD->hasAttr<NoEscapeAttr>()) {\n    S.Diag(OldD->getLocation(), diag::note_overridden_marked_noescape);"}},
[k]={
["clang/test/SemaObjCXX/noescape.mm"]={"clang/test/SemaObjCXX/noescape.mm:34:49: note: parameter of overridden method is annotated with __attribute__((noescape))","clang/test/SemaObjCXX/noescape.mm:47:44: note: parameter of overridden method is annotated with __attribute__((noescape))","clang/test/SemaObjCXX/noescape.mm:107:44: note: parameter of overridden method is annotated with __attribute__((noescape))","clang/test/SemaObjCXX/noescape.mm:107:44: note: parameter of overridden method is annotated with __attribute__((noescape))"}
}
},
},
["note_overridden_method"]={
["note_overridden_method"]={
[c]="overridden method is here",
[f]="overridden method is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="overridden method is here",
[d]="overridden method is here",
[b]=m,
[e]=p,
[g]="overridden method is here",
[a]="overridden method is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[i]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[j]={{u,2546,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          if (AMK == AMK_Override)\n            Diag(CI.getLoc(), diag::note_overridden_method);"}}
[j]={{v,2546,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          if (AMK == AMK_Override)\n            Diag(CI.getLoc(), diag::note_overridden_method);"}},
[k]={
["clang/test/SemaObjC/attr-availability-1.m"]={"clang/test/SemaObjC/attr-availability-1.m:17:35: note: overridden method is here","clang/test/SemaObjC/attr-availability-1.m:20:36: note: overridden method is here","clang/test/SemaObjC/attr-availability-1.m:22:36: note: overridden method is here"}
}
},
},
["note_overridden_virtual_function"]={
["note_overridden_virtual_function"]={
[c]="overridden virtual function is here",
[f]="overridden virtual function is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="overridden virtual function is here",
[d]="overridden virtual function is here",
[b]=m,
[e]=p,
[g]="overridden virtual function is here",
[a]="overridden virtual function is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t..."},
[i]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t..."},
[j]={{v,19002,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    if (CXXRecord) {\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                Diag(M->first->getLocation(), diag::note_overridden_virtual_function);"},{y,1823,"// 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        if (WrittenVirtual != Method)\n          Diag(WrittenVirtual->getLocation(), diag::note_overridden_virtual_function);"},{y,3310,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) {\n      Diag(OMD->getLocation(), diag::note_overridden_virtual_function);"},{y,3334,"/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member\n/// function overrides a virtual member function marked \'final\', according to\n/// C++11 [class.virtual]p4.\nbool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{y,6892,"/// Report an error regarding overriding, along with any relevant\n/// overridden methods.\n///\n/// \\param DiagID the primary error to report.\n/// \\param MD the overriding method.\nstatic bool ReportOverrides(Sema &S, unsigned DiagID, const CXXMethodDecl *MD, llvm::function_ref<bool(const CXXMethodDecl *)> Report) {\n  for (const CXXMethodDecl *O : MD->overridden_methods()) {\n    if (Report(O)) {\n      S.Diag(O->getLocation(), diag::note_overridden_virtual_function);"},{y,18015,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{y,18052,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The return types aren\'t either both pointers or references to a class type.\n  if (NewClassTy.isNull()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18077,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if the new class derives from the old class.\n    if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18093,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if we the conversion from derived to base is valid.\n    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy, diag::err_covariant_return_inaccessible_base, diag::err_covariant_return_ambiguous_derived_to_base_conv, New->getLocation(), New->getReturnTypeSourceRange(), New->getDeclName(), nullptr)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18105,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The qualifiers of the return types must be the same.\n  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18117,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The new class type must have the same or less qualifiers as the old type.\n  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{vc,995,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  return CheckExceptionSpecSubset(PDiag(DiagID), PDiag(diag::err_deep_exception_specs_differ), PDiag(diag::note_overridden_virtual_function), PDiag(diag::ext_override_exception_spec), Old->getType()->castAs<FunctionProtoType>(), Old->getLocation(), New->getType()->castAs<FunctionProtoType>(), New->getLocation());"}}
[j]={{w,19002,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    if (CXXRecord) {\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                Diag(M->first->getLocation(), diag::note_overridden_virtual_function);"},{z,1823,"// 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        if (WrittenVirtual != Method)\n          Diag(WrittenVirtual->getLocation(), diag::note_overridden_virtual_function);"},{z,3310,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) {\n      Diag(OMD->getLocation(), diag::note_overridden_virtual_function);"},{z,3334,"/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member\n/// function overrides a virtual member function marked \'final\', according to\n/// C++11 [class.virtual]p4.\nbool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{z,6892,"/// Report an error regarding overriding, along with any relevant\n/// overridden methods.\n///\n/// \\param DiagID the primary error to report.\n/// \\param MD the overriding method.\nstatic bool ReportOverrides(Sema &S, unsigned DiagID, const CXXMethodDecl *MD, llvm::function_ref<bool(const CXXMethodDecl *)> Report) {\n  for (const CXXMethodDecl *O : MD->overridden_methods()) {\n    if (Report(O)) {\n      S.Diag(O->getLocation(), diag::note_overridden_virtual_function);"},{z,18015,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{z,18052,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The return types aren\'t either both pointers or references to a class type.\n  if (NewClassTy.isNull()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18077,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if the new class derives from the old class.\n    if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18093,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if we the conversion from derived to base is valid.\n    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy, diag::err_covariant_return_inaccessible_base, diag::err_covariant_return_ambiguous_derived_to_base_conv, New->getLocation(), New->getReturnTypeSourceRange(), New->getDeclName(), nullptr)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18105,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The qualifiers of the return types must be the same.\n  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18117,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The new class type must have the same or less qualifiers as the old type.\n  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{Pc,995,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  return CheckExceptionSpecSubset(PDiag(DiagID), PDiag(diag::err_deep_exception_specs_differ), PDiag(diag::note_overridden_virtual_function), PDiag(diag::ext_override_exception_spec), Old->getType()->castAs<FunctionProtoType>(), Old->getLocation(), New->getType()->castAs<FunctionProtoType>(), New->getLocation());"}},
[k]={
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:4:16: note: overridden virtual function is here","clang/test/CXX/class.derived/class.abstract/p16.cpp:5:16: note: overridden virtual function is here","clang/test/CXX/class.derived/class.abstract/p16.cpp:32:11: note: overridden virtual function is here","clang/test/CXX/class.derived/class.abstract/p16.cpp:23:14: note: overridden virtual function is here","clang/test/CXX/class.derived/class.abstract/p16.cpp:32:11: note: overridden virtual function is here","clang/test/CXX/class.derived/class.abstract/p16.cpp:25:14: note: overridden virtual function is here","clang/test/CXX/class.derived/class.abstract/p16.cpp:26:14: note: overridden virtual function is here"}
}
},
},
["note_ovl_ambiguous_eqeq_reversed_self_non_const"]={
["note_ovl_ambiguous_eqeq_reversed_self_non_const"]={
[c]="mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity",
[f]="mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity",
[d]="mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity",
[b]=m,
[e]=p,
[g]="mark \'operator\\=\\=\' as const or add a matching \'operator\\!\\=\' to resolve the ambiguity",
[a]="mark \'operator\\=\\=\' as const or add a matching \'operator\\!\\=\' to resolve the ambiguity",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{D,14067,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n            // Mark member== const or provide matching != to disallow reversed\n            // args. Eg.\n            // struct S { bool operator==(const S&); };\n            // S()==S();\n            if (auto *MD = dyn_cast<CXXMethodDecl>(FnDecl))\n              if (Op == OverloadedOperatorKind::OO_EqualEqual && !MD->isConst() && Context.hasSameUnqualifiedType(MD->getThisObjectType(), MD->getParamDecl(0)->getType().getNonReferenceType()) && Context.hasSameUnqualifiedType(MD->getThisObjectType(), Args[0]->getType()) && Context.hasSameUnqualifiedType(MD->getThisObjectType(), Args[1]->getType()))\n                Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_eqeq_reversed_self_non_const);"}}
[j]={{E,14067,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n            // Mark member== const or provide matching != to disallow reversed\n            // args. Eg.\n            // struct S { bool operator==(const S&); };\n            // S()==S();\n            if (auto *MD = dyn_cast<CXXMethodDecl>(FnDecl))\n              if (Op == OverloadedOperatorKind::OO_EqualEqual && !MD->isConst() && Context.hasSameUnqualifiedType(MD->getThisObjectType(), MD->getParamDecl(0)->getType().getNonReferenceType()) && Context.hasSameUnqualifiedType(MD->getThisObjectType(), Args[0]->getType()) && Context.hasSameUnqualifiedType(MD->getThisObjectType(), Args[1]->getType()))\n                Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_eqeq_reversed_self_non_const);"}},
[k]={
["clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp:131:8: note: mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp:263:27: note: mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp:319:8: note: mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity"}
}
},
},
["note_ovl_ambiguous_oper_binary_reversed_candidate"]={
["note_ovl_ambiguous_oper_binary_reversed_candidate"]={
[c]="ambiguous candidate function with reversed arguments",
[f]="ambiguous candidate function with reversed arguments",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="ambiguous candidate function with reversed arguments",
[d]="ambiguous candidate function with reversed arguments",
[b]=m,
[e]=p,
[g]="ambiguous candidate function with reversed arguments",
[a]="ambiguous candidate function with reversed arguments",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{D,14073,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n          } else {\n            for (auto *F : AmbiguousWith)\n              Diag(F->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_candidate);"}}
[j]={{E,14073,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n          } else {\n            for (auto *F : AmbiguousWith)\n              Diag(F->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_candidate);"}}
},
},
["note_ovl_ambiguous_oper_binary_reversed_self"]={
["note_ovl_ambiguous_oper_binary_reversed_self"]={
[c]="ambiguity is between a regular call to this operator and a call with the argument order reversed",
[f]="ambiguity is between a regular call to this operator and a call with the argument order reversed",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="ambiguity is between a regular call to this operator and a call with the argument order reversed",
[d]="ambiguity is between a regular call to this operator and a call with the argument order reversed",
[b]=m,
[e]=p,
[g]="ambiguity is between a regular call to this operator and a call with the argument order reversed",
[a]="ambiguity is between a regular call to this operator and a call with the argument order reversed",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{D,14051,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n            Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_self);"}}
[j]={{E,14051,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n            Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_self);"}},
[k]={
["clang/test/CXX/class/class.compare/class.eq/p2.cpp"]={"clang/test/CXX/class/class.compare/class.eq/p2.cpp:121:10: note: ambiguity is between a regular call to this operator and a call with the argument order reversed"}
}
},
},
["note_ovl_ambiguous_oper_binary_selected_candidate"]={
["note_ovl_ambiguous_oper_binary_selected_candidate"]={
[c]="candidate function with non-reversed arguments",
[f]="candidate function with non-reversed arguments",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate function with non-reversed arguments",
[d]="candidate function with non-reversed arguments",
[b]=m,
[e]=p,
[g]="candidate function with non\\-reversed arguments",
[a]="candidate function with non\\-reversed arguments",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{D,14070,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n          } else {\n            Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_selected_candidate);"}}
[j]={{E,14070,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n          } else {\n            Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_selected_candidate);"}}
},
},
["note_ovl_builtin_candidate"]={
["note_ovl_builtin_candidate"]={
[c]="built-in candidate A",
[f]="built-in candidate A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="built-in candidate %0",
[d]="built-in candidate %0",
[b]=m,
[e]=p,
[g]="built\\-in candidate (.*?)",
[a]="built\\-in candidate (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{D,11681,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"},{D,11686,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n  } else {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"}}
[j]={{E,11681,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"},{E,11686,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n  } else {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"}},
[k]={
["clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp"]={"clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp:43:19: note: built-in candidate operator->*(struct E *, int struct E::*)","clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp:43:19: note: built-in candidate operator->*(const struct E *, int struct E::*)"}
}
},
},
["note_ovl_candidate"]={
["note_ovl_candidate"]={
[c]="candidate .........",
[f]="candidate .........",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %3}1%select{| has different class%diff{ (expected $ but has $)|}5,6| has different number of parameters (expected %5 but has %6)| has type mismatch at %ordinal5 parameter%diff{ (expected $ but has $)|}6,7| has different return type%diff{ ($ expected but has $)|}5,6| has different qualifiers (expected %5 but found %6)| has different exception specification}4",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %3}1%select{| has different class%diff{ (expected $ but has $)|}5,6| has different number of parameters (expected %5 but has %6)| has type mismatch at %ordinal5 parameter%diff{ (expected $ but has $)|}6,7| has different return type%diff{ ($ expected but has $)|}5,6| has different qualifiers (expected %5 but found %6)| has different exception specification}4",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?))(?:| has different class(?: \\(expected (.*?) but has (.*?)\\)|)| has different number of parameters \\(expected (.*?) but has (.*?)\\)| has type mismatch at (.*?) parameter(?: \\(expected (.*?) but has (.*?)\\)|)| has different return type(?: \\((.*?) expected but has (.*?)\\)|)| has different qualifiers \\(expected (.*?) but found (.*?)\\)| has different exception specification)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?))(?:| has different class(?: \\(expected (.*?) but has (.*?)\\)|)| has different number of parameters \\(expected (.*?) but has (.*?)\\)| has type mismatch at (.*?) parameter(?: \\(expected (.*?) but has (.*?)\\)|)| has different return type(?: \\((.*?) expected but has (.*?)\\)|)| has different qualifiers \\(expected (.*?) but found (.*?)\\)| has different exception specification)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[j]={{D,10669,"// Notes the location of an overload candidate.\nvoid Sema::NoteOverloadCandidate(const NamedDecl *Found, const FunctionDecl *Fn, OverloadCandidateRewriteKind RewriteKind, QualType DestType, bool TakingAddress) {\n  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate) << (unsigned)KSPair.first << (unsigned)KSPair.second << Fn << FnDesc;"},{D,12565,"// 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);"}}
[j]={{E,10669,"// Notes the location of an overload candidate.\nvoid Sema::NoteOverloadCandidate(const NamedDecl *Found, const FunctionDecl *Fn, OverloadCandidateRewriteKind RewriteKind, QualType DestType, bool TakingAddress) {\n  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate) << (unsigned)KSPair.first << (unsigned)KSPair.second << Fn << FnDesc;"},{E,12565,"// 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);"}},
[k]={
["clang/test/Sema/overloadable-complex.c"]={"clang/test/Sema/overloadable-complex.c:30:7: note: candidate function","clang/test/Sema/overloadable-complex.c:31:6: note: candidate function","clang/test/Sema/overloadable-complex.c:30:7: note: candidate function","clang/test/Sema/overloadable-complex.c:31:6: note: candidate function"}
}
},
},
["note_ovl_candidate_arity"]={
["note_ovl_candidate_arity"]={
[c]="candidate ...... not viable: requires... A argumentB, but C was provided",
[f]="candidate ...... not viable: requires... A argumentB, but C was provided",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: requires%select{ at least| at most|}3 %4 argument%s4, but %5 %plural{1:was|:were}5 provided",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: requires%select{ at least| at most|}3 %4 argument%s4, but %5 %plural{1:was|:were}5 provided",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: requires(?: at least| at most|) (.*?) argument(.*?), but (.*?) (?:was|were) provided",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: requires(?: at least| at most|) (.*?) argument(.*?), but (.*?) (?:was|were) provided",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[j]={{D,11072,"/// General arity mismatch diagnosis over a candidate in a candidate set.\nstatic void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, unsigned NumFormalArgs) {\n  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n  else\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << Description << mode << modeCount << NumFormalArgs << Fn->getParametersSourceRange();"}}
[j]={{E,11072,"/// General arity mismatch diagnosis over a candidate in a candidate set.\nstatic void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, unsigned NumFormalArgs) {\n  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n  else\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << Description << mode << modeCount << NumFormalArgs << Fn->getParametersSourceRange();"}},
[k]={
["clang/test/CXX/expr/expr.post/expr.call/p4.cpp"]={"clang/test/CXX/expr/expr.post/expr.call/p4.cpp:3:6: note: candidate function not viable: requires 2 arguments, but 0 were provided","clang/test/CXX/expr/expr.post/expr.call/p4.cpp:3:6: note: candidate function not viable: requires 2 arguments, but 1 was provided","clang/test/CXX/expr/expr.post/expr.call/p4.cpp:17:30: note: candidate function [with T = <int>] not viable: requires 2 arguments, but 0 were provided","clang/test/CXX/expr/expr.post/expr.call/p4.cpp:17:30: note: candidate function [with T = <int>] not viable: requires 2 arguments, but 1 was provided"}
}
},
},
["note_ovl_candidate_arity_one"]={
["note_ovl_candidate_arity_one"]={
[c]="candidate ...... not viable: ... argument A, but no arguments were provided",
[f]="candidate ...... not viable: ... argument A, but no arguments were provided",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{requires at least|allows at most single|requires single}3 argument %4, but %plural{0:no|:%5}5 arguments were provided",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{requires at least|allows at most single|requires single}3 argument %4, but %plural{0:no|:%5}5 arguments were provided",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:requires at least|allows at most single|requires single) argument (.*?), but (?:no|(.*?)) arguments were provided",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:requires at least|allows at most single|requires single) argument (.*?), but (?:no|(.*?)) arguments were provided",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[i]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[j]={{D,11067,"/// General arity mismatch diagnosis over a candidate in a candidate set.\nstatic void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, unsigned NumFormalArgs) {\n  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << Description << mode << Fn->getParamDecl(0) << NumFormalArgs << Fn->getParametersSourceRange();"}}
[j]={{E,11067,"/// General arity mismatch diagnosis over a candidate in a candidate set.\nstatic void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, unsigned NumFormalArgs) {\n  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << Description << mode << Fn->getParamDecl(0) << NumFormalArgs << Fn->getParametersSourceRange();"}},
[k]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:61:29: note: candidate function template not viable: requires single argument \'m\', but 2 arguments were provided","clang/test/SemaTemplate/matrix-type.cpp:61:29: note: candidate function template not viable: requires single argument \'m\', but 2 arguments were provided"}
}
},
},
["note_ovl_candidate_bad_addrspace"]={
["note_ovl_candidate_bad_addrspace"]={
[c]="candidate ...... not viable: cannot ... A ... B in C argument",
[f]="candidate ...... not viable: cannot ... A ... B in C argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot %select{pass pointer to|bind reference in}5 %3 %select{as a pointer to|to object in}5 %4 in %ordinal6 argument",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot %select{pass pointer to|bind reference in}5 %3 %select{as a pointer to|to object in}5 %4 in %ordinal6 argument",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot (?:pass pointer to|bind reference in) (.*?) (?:as a pointer to|to object in) (.*?) in (.*?) argument",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot (?:pass pointer to|bind reference in) (.*?) (?:as a pointer to|to object in) (.*?) in (.*?) argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[j]={{D,10841,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n      if (isObjectArgument)\n      else\n        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromQs.getAddressSpace() << ToQs.getAddressSpace() << ToTy->isReferenceType() << I + 1;"}}
[j]={{E,10841,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n      if (isObjectArgument)\n      else\n        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromQs.getAddressSpace() << ToQs.getAddressSpace() << ToTy->isReferenceType() << I + 1;"}},
[k]={
["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:9:6: note: candidate function not viable: cannot pass pointer to generic address space as a pointer to address space \'__private\' in 1st argument"}
}
},
},
["note_ovl_candidate_bad_addrspace_this"]={
["note_ovl_candidate_bad_addrspace_this"]={
[c]="candidate ...... not viable: \'this\' object is in A, but method expects object in B",
[f]="candidate ...... not viable: \'this\' object is in A, but method expects object in B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: \'this\' object is in %3, but method expects object in %4",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: \'this\' object is in %3, but method expects object in %4",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: \'this\' object is in (.*?), but method expects object in (.*?)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: \'this\' object is in (.*?), but method expects object in (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={kc,1575504770,mc},
[i]={zc,1575504770,Ac},
[j]={{D,10837,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n      if (isObjectArgument)\n        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace_this) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << FromQs.getAddressSpace() << ToQs.getAddressSpace();"}}
[j]={{E,10837,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n      if (isObjectArgument)\n        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace_this) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << FromQs.getAddressSpace() << ToQs.getAddressSpace();"}},
[k]={
["clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp"]={"clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp:4:8: note: candidate function not viable: \'this\' object is in address space \'__private\', but method expects object in address space \'__local\'","clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp:6:8: note: candidate function not viable: \'this\' object is in address space \'__private\', but method expects object in address space \'__global\'"}
}
},
},
["note_ovl_candidate_bad_arc_conv"]={
["note_ovl_candidate_bad_arc_conv"]={
[c]="candidate ...... not viable: cannot implicitly convert argument of type A to B for ... under ARC",
[f]="candidate ...... not viable: cannot implicitly convert argument of type A to B for ... under ARC",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot implicitly convert argument %diff{of type $ to $|type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5 under ARC",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot implicitly convert argument %diff{of type $ to $|type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5 under ARC",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot implicitly convert argument (?:of type (.*?) to (.*?)|type to parameter type) for (?:(.*?) argument|object argument) under ARC",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot implicitly convert argument (?:of type (.*?) to (.*?)|type to parameter type) for (?:(.*?) argument|object argument) under ARC",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"a644f9cb73a1",1311182049,"arc-objc++: Issue an arc specific diagnostic when overload resolution"},
[i]={"a644f9cb73a1",1311182049,"arc-objc++: Issue an arc specific diagnostic when overload resolution"},
[j]={{D,10970,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (isa<ObjCObjectPointerType>(CFromTy) && isa<PointerType>(CToTy)) {\n    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1;"}}
[j]={{E,10970,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (isa<ObjCObjectPointerType>(CFromTy) && isa<PointerType>(CToTy)) {\n    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1;"}},
[k]={
["clang/test/SemaObjCXX/arc-overloading.mm"]={"clang/test/SemaObjCXX/arc-overloading.mm:208:6: note: candidate function not viable: cannot implicitly convert argument of type \'MixerEQGraphTestDelegate *const __strong\' to \'void *\' for 1st argument under ARC","clang/test/SemaObjCXX/arc-overloading.mm:209:6: note: candidate function not viable: cannot implicitly convert argument of type \'MixerEQGraphTestDelegate *const __strong\' to \'struct S *\' for 1st argument under ARC","clang/test/SemaObjCXX/arc-overloading.mm:210:6: note: candidate function not viable: cannot implicitly convert argument of type \'MixerEQGraphTestDelegate *const __strong\' to \'char *\' for 1st argument under ARC"}
}
},
},
["note_ovl_candidate_bad_base_to_derived_conv"]={
["note_ovl_candidate_bad_base_to_derived_conv"]={
[c]="candidate ...... not viable: cannot ... ... A to ... B for C argument",
[f]="candidate ...... not viable: cannot ... ... A to ... B for C argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot %select{convert from|convert from|bind}3 %select{base class pointer|superclass|base class object of type}3 %4 to %select{derived class pointer|subclass|derived class reference}3 %5 for %ordinal6 argument",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot %select{convert from|convert from|bind}3 %select{base class pointer|superclass|base class object of type}3 %4 to %select{derived class pointer|subclass|derived class reference}3 %5 for %ordinal6 argument",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot (?:convert from|convert from|bind) (?:base class pointer|superclass|base class object of type) (.*?) to (?:derived class pointer|subclass|derived class reference) (.*?) for (.*?) argument",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot (?:convert from|convert from|bind) (?:base class pointer|superclass|base class object of type) (.*?) to (?:derived class pointer|subclass|derived class reference) (.*?) for (.*?) argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fb0c0d37b7f2",1277950485,"Extend the \"cannot convert from base class pointer to derived class"},
[i]={"fb0c0d37b7f2",1277950485,"Extend the \"cannot convert from base class pointer to derived class"},
[j]={{D,10957,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (BaseToDerivedConversion) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_base_to_derived_conv) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << (BaseToDerivedConversion - 1) << FromTy << ToTy << I + 1;"}}
[j]={{E,10957,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (BaseToDerivedConversion) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_base_to_derived_conv) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << (BaseToDerivedConversion - 1) << FromTy << ToTy << I + 1;"}},
[k]={
["clang/test/SemaCXX/cxx11-inheriting-ctors.cpp"]={"clang/test/SemaCXX/cxx11-inheriting-ctors.cpp:72:10: note: candidate constructor (the implicit copy constructor) not viable: cannot bind base class object of type \'struct B\' to derived class reference \'const D &\' for 1st argument","clang/test/SemaCXX/cxx11-inheriting-ctors.cpp:72:10: note: candidate constructor (the implicit move constructor) not viable: cannot bind base class object of type \'struct B\' to derived class reference \'D &&\' for 1st argument"}
}
},
},
["note_ovl_candidate_bad_conv"]={
["note_ovl_candidate_bad_conv"]={
[c]="candidate ...... not viable: no known conversion from A to B for ......",
[f]="candidate ...... not viable: no known conversion from A to B for ......",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: no known conversion %diff{from $ to $|from argument type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: no known conversion %diff{from $ to $|from argument type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: no known conversion (?:from (.*?) to (.*?)|from argument type to parameter type) for (?:(.*?) argument|object argument)(?:|; dereference the argument with \\*|; take the address of the argument with &|; remove \\*|; remove &)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: no known conversion (?:from (.*?) to (.*?)|from argument type to parameter type) for (?:(.*?) argument|object argument)(?:|; dereference the argument with \\*|; take the address of the argument with &|; remove \\*|; remove &)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[j]={{D,10984,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);"}}
[j]={{E,10984,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);"}},
[k]={
["clang/test/SemaOpenCL/queue_t_overload.cl"]={"clang/test/SemaOpenCL/queue_t_overload.cl:3:36: note: candidate function not viable: no known conversion from \'__global int *__private\' to \'__local char *__private\' for 2nd argument","clang/test/SemaOpenCL/queue_t_overload.cl:4:36: note: candidate function not viable: no known conversion from \'__global int *__private\' to \'__local float *__private\' for 2nd argument","clang/test/SemaOpenCL/queue_t_overload.cl:3:36: note: candidate function not viable: no known conversion from \'int\' to \'__private queue_t\' for 1st argument","clang/test/SemaOpenCL/queue_t_overload.cl:4:36: note: candidate function not viable: no known conversion from \'int\' to \'__private queue_t\' for 1st argument"}
}
},
},
["note_ovl_candidate_bad_conv_incomplete"]={
["note_ovl_candidate_bad_conv_incomplete"]={
[c]="candidate ...... not viable: cannot convert argument of incomplete type A to B for ......",
[f]="candidate ...... not viable: cannot convert argument of incomplete type A to B for ......",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot convert argument of incomplete type %diff{$ to $|to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: cannot convert argument of incomplete type %diff{$ to $|to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot convert argument of incomplete type (?:(.*?) to (.*?)|to parameter type) for (?:(.*?) argument|object argument)(?:|; dereference the argument with \\*|; take the address of the argument with &|; remove \\*|; remove &)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: cannot convert argument of incomplete type (?:(.*?) to (.*?)|to parameter type) for (?:(.*?) argument|object argument)(?:|; dereference the argument with \\*|; take the address of the argument with &|; remove \\*|; remove &)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d174646dd1a",1264234249,"Produce a special diagnostic when users call a function with an argument of"},
[i]={"6d174646dd1a",1264234249,"Produce a special diagnostic when users call a function with an argument of"},
[j]={{D,10916,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (TempFromTy->isIncompleteType()) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 << (unsigned)(Cand->Fix.Kind);"}}
[j]={{E,10916,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (TempFromTy->isIncompleteType()) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 << (unsigned)(Cand->Fix.Kind);"}},
[k]={
["clang/test/SemaObjCXX/arc-type-conversion.mm"]={"clang/test/SemaObjCXX/arc-type-conversion.mm:4:8: note: candidate function not viable: cannot convert argument of incomplete type \'void *\' to \'__strong id\' for 1st argument"}
}
},
},
["note_ovl_candidate_bad_cvr"]={
["note_ovl_candidate_bad_cvr"]={
[c]="candidate ...... not viable: A argument (B) would lose ... qualifier...",
[f]="candidate ...... not viable: A argument (B) would lose ... qualifier...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %ordinal5 argument (%3) would lose %select{const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}4 qualifier%select{||s||s|s|s}4",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %ordinal5 argument (%3) would lose %select{const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}4 qualifier%select{||s||s|s|s}4",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (.*?) argument \\((.*?)\\) would lose (?:const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict) qualifier(?:||s||s|s|s)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (.*?) argument \\((.*?)\\) would lose (?:const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict) qualifier(?:||s||s|s|s)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[j]={{D,10875,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (isObjectArgument) {\n    } else {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << (CVR - 1) << I + 1;"}}
[j]={{E,10875,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (isObjectArgument) {\n    } else {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << (CVR - 1) << I + 1;"}},
[k]={
["clang/test/SemaCXX/unused-with-error.cpp"]={"clang/test/SemaCXX/unused-with-error.cpp:4:13: note: candidate function not viable: 1st argument (\'const int *\') would lose const qualifier"}
}
},
},
["note_ovl_candidate_bad_cvr_this"]={
["note_ovl_candidate_bad_cvr_this"]={
[c]="candidate ...... not viable: \'this\' argument has type A, but method is not marked ...",
[f]="candidate ...... not viable: \'this\' argument has type A, but method is not marked ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: \'this\' argument has type %3, but method is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}4",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: \'this\' argument has type %3, but method is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}4",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: \'this\' argument has type (.*?), but method is not marked (?:const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: \'this\' argument has type (.*?), but method is not marked (?:const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[j]={{D,10871,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (isObjectArgument) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << FromTy << (CVR - 1);"}}
[j]={{E,10871,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (isObjectArgument) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << FromTy << (CVR - 1);"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13: note: candidate function not viable: \'this\' argument has type \'const decltype(ml)\' (aka \'const (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\'), but method is not marked const","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:22:12: note: candidate function not viable: \'this\' argument has type \'volatile decltype(l)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:22:12)\'), but method is not marked volatile","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13: note: candidate function not viable: \'this\' argument has type \'volatile decltype(ml)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\'), but method is not marked volatile"}
}
},
},
["note_ovl_candidate_bad_deduction"]={
["note_ovl_candidate_bad_deduction"]={
[c]="candidate template ignored: failed template argument deduction",
[f]="candidate template ignored: failed template argument deduction",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: failed template argument deduction",
[d]="candidate template ignored: failed template argument deduction",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: failed template argument deduction",
[a]="candidate template ignored\\: failed template argument deduction",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[j]={{D,11361,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  // TODO: diagnose these individually, then kill off\n  // note_ovl_candidate_bad_deduction, which is uselessly vague.\n  case Sema::TDK_MiscellaneousDeductionFailure:\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);"}}
[j]={{E,11361,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  // TODO: diagnose these individually, then kill off\n  // note_ovl_candidate_bad_deduction, which is uselessly vague.\n  case Sema::TDK_MiscellaneousDeductionFailure:\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);"}},
[k]={
["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:35:42: note: candidate template ignored: failed template argument deduction"}
}
},
},
["note_ovl_candidate_bad_gc"]={
["note_ovl_candidate_bad_gc"]={
[c]="candidate ...... not viable: ... argument (A) has ... ownership, but parameter has ... ownership",
[f]="candidate ...... not viable: ... argument (A) has ... ownership, but parameter has ... ownership",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|\'this\'}6 argument (%3) has %select{no|__weak|__strong}4 ownership, but parameter has %select{no|__weak|__strong}5 ownership",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|\'this\'}6 argument (%3) has %select{no|__weak|__strong}4 ownership, but parameter has %select{no|__weak|__strong}5 ownership",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:(.*?)|\'this\') argument \\((.*?)\\) has (?:no|__weak|__strong) ownership, but parameter has (?:no|__weak|__strong) ownership",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:(.*?)|\'this\') argument \\((.*?)\\) has (?:no|__weak|__strong) ownership, but parameter has (?:no|__weak|__strong) ownership",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"aec25847606f",1303859806,"When computing Objective-C pointer conversions in C++, retain"},
[i]={"aec25847606f",1303859806,"When computing Objective-C pointer conversions in C++, retain"},
[j]={{D,10859,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr() << (unsigned)isObjectArgument << I + 1;"}}
[j]={{E,10859,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr() << (unsigned)isObjectArgument << I + 1;"}},
[k]={
["clang/test/SemaObjCXX/gc-attributes.mm"]={"clang/test/SemaObjCXX/gc-attributes.mm:6:6: note: candidate function not viable: 1st argument (\'A *__weak *\') has __weak ownership, but parameter has __strong ownership","clang/test/SemaObjCXX/gc-attributes.mm:15:6: note: candidate function not viable: 1st argument (\'A *__strong *\') has __strong ownership, but parameter has __weak ownership"}
}
},
},
["note_ovl_candidate_bad_list_argument"]={
["note_ovl_candidate_bad_list_argument"]={
[c]="candidate ...... not viable: ... argument to A",
[f]="candidate ...... not viable: ... argument to A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{cannot convert initializer list|too few initializers in list|too many initializers in list}7 argument to %4",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{cannot convert initializer list|too few initializers in list|too many initializers in list}7 argument to %4",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:cannot convert initializer list|too few initializers in list|too many initializers in list) argument to (.*?)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:cannot convert initializer list|too few initializers in list|too many initializers in list) argument to (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"a72462cdf43b",1316886512,"Add a special note for overload resolution when an initializer list argument"},
[i]={"a72462cdf43b",1316886512,"Add a special note for overload resolution when an initializer list argument"},
[j]={{D,10897,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  // Special diagnostic for failure to convert an initializer list, since\n  // telling the user that it has type void is not useful.\n  if (FromExpr && isa<InitListExpr>(FromExpr)) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 << (Conv.Bad.Kind == BadConversionSequence::too_few_initializers ? 1 : Conv.Bad.Kind == BadConversionSequence::too_many_initializers ? 2 : 0);"}}
[j]={{E,10897,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  // Special diagnostic for failure to convert an initializer list, since\n  // telling the user that it has type void is not useful.\n  if (FromExpr && isa<InitListExpr>(FromExpr)) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 << (Conv.Bad.Kind == BadConversionSequence::too_few_initializers ? 1 : Conv.Bad.Kind == BadConversionSequence::too_many_initializers ? 2 : 0);"}},
[k]={
["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:119:10: note: candidate constructor (the implicit copy constructor) not viable: cannot convert initializer list argument to \'const C\'","clang/test/SemaCXX/cxx0x-initializer-references.cpp:119:10: note: candidate constructor (the implicit move constructor) not viable: cannot convert initializer list argument to \'C\'","clang/test/SemaCXX/cxx0x-initializer-references.cpp:119:14: note: candidate constructor not viable: cannot convert initializer list argument to \'int\'"}
}
},
},
["note_ovl_candidate_bad_overload"]={
["note_ovl_candidate_bad_overload"]={
[c]="candidate ...... not viable: no overload of A matching B for C argument",
[f]="candidate ...... not viable: no overload of A matching B for C argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: no overload of %4 matching %3 for %ordinal5 argument",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: no overload of %4 matching %3 for %ordinal5 argument",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: no overload of (.*?) matching (.*?) for (.*?) argument",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: no overload of (.*?) matching (.*?) for (.*?) argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fb7ad0f57a0c",1265078572,"Improve the diagnostic used when an incompatible overload set is passed"},
[i]={"fb7ad0f57a0c",1265078572,"Improve the diagnostic used when an incompatible overload set is passed"},
[j]={{D,10808,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (FromTy == S.Context.OverloadTy) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << ToTy << Name << I + 1;"}}
[j]={{E,10808,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (FromTy == S.Context.OverloadTy) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << ToTy << Name << I + 1;"}},
[k]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/p6.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/p6.cpp:4:26: note: candidate function [with T = int] not viable: no overload of \'temp2\' matching \'void (*)(int)\' for 2nd argument"}
}
},
},
["note_ovl_candidate_bad_ownership"]={
["note_ovl_candidate_bad_ownership"]={
[c]="candidate ...... not viable: ... argument (A) has ... ownership, but parameter has ... ownership",
[f]="candidate ...... not viable: ... argument (A) has ... ownership, but parameter has ... ownership",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|\'this\'}6 argument (%3) has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}4 ownership, but parameter has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}5 ownership",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|\'this\'}6 argument (%3) has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}4 ownership, but parameter has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}5 ownership",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:(.*?)|\'this\') argument \\((.*?)\\) has (?:no|__unsafe_unretained|__strong|__weak|__autoreleasing) ownership, but parameter has (?:no|__unsafe_unretained|__strong|__weak|__autoreleasing) ownership",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: (?:(.*?)|\'this\') argument \\((.*?)\\) has (?:no|__unsafe_unretained|__strong|__weak|__autoreleasing) ownership, but parameter has (?:no|__unsafe_unretained|__strong|__weak|__autoreleasing) ownership",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[i]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[j]={{D,10850,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << FromQs.getObjCLifetime() << ToQs.getObjCLifetime() << (unsigned)isObjectArgument << I + 1;"}}
[j]={{E,10850,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << FromQs.getObjCLifetime() << ToQs.getObjCLifetime() << (unsigned)isObjectArgument << I + 1;"}},
[k]={
["clang/test/SemaObjCXX/arc-overloading.mm"]={"clang/test/SemaObjCXX/arc-overloading.mm:58:6: note: candidate function not viable: 1st argument (\'__unsafe_unretained id *\') has __unsafe_unretained ownership, but parameter has __autoreleasing ownership","clang/test/SemaObjCXX/arc-overloading.mm:119:6: note: candidate function not viable: 1st argument (\'__autoreleasing id\') has __autoreleasing ownership, but parameter has __strong ownership","clang/test/SemaObjCXX/arc-overloading.mm:119:6: note: candidate function not viable: 1st argument (\'__unsafe_unretained id\') has __unsafe_unretained ownership, but parameter has __strong ownership","clang/test/SemaObjCXX/arc-overloading.mm:193:8: note: candidate function not viable: 1st argument (\'__weak id *\') has __weak ownership, but parameter has __autoreleasing ownership"}
}
},
},
["note_ovl_candidate_bad_target"]={
["note_ovl_candidate_bad_target"]={
[c]="candidate ...... not viable: call to ... function from ... function",
[f]="candidate ...... not viable: call to ... function from ... function",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: call to %select{__device__|__global__|__host__|__host__ __device__|invalid}3 function from %select{__device__|__global__|__host__|__host__ __device__|invalid}4 function",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: call to %select{__device__|__global__|__host__|__host__ __device__|invalid}3 function from %select{__device__|__global__|__host__|__host__ __device__|invalid}4 function",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: call to (?:__device__|__global__|__host__|__host__ __device__|invalid) function from (?:__device__|__global__|__host__|__host__ __device__|invalid) function",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: call to (?:__device__|__global__|__host__|__host__ __device__|invalid) function from (?:__device__|__global__|__host__|__host__ __device__|invalid) function",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[j]={{D,11397,"/// CUDA: diagnose an invalid call across targets.\nstatic void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */"}}
[j]={{E,11397,"/// CUDA: diagnose an invalid call across targets.\nstatic void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */"}},
[k]={
["clang/test/SemaCUDA/implicit-member-target-collision.cu"]={"clang/test/SemaCUDA/implicit-member-target-collision.cu:16:8: note: candidate constructor (the implicit default constructor) not viable: call to invalid function from __host__ function","clang/test/SemaCUDA/implicit-member-target-collision.cu:31:8: note: candidate constructor (the implicit default constructor) not viable: call to invalid function from __host__ function","clang/test/SemaCUDA/implicit-member-target-collision.cu:49:8: note: candidate constructor (the implicit default constructor) not viable: call to invalid function from __host__ function"}
}
},
},
["note_ovl_candidate_bad_value_category"]={
["note_ovl_candidate_bad_value_category"]={
[c]="candidate ...... not viable: expects an ... for ...",
[f]="candidate ...... not viable: expects an ... for ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: expects an %select{lvalue|rvalue}5 for %select{%ordinal4 argument|object argument}3",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: expects an %select{lvalue|rvalue}5 for %select{%ordinal4 argument|object argument}3",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: expects an (?:lvalue|rvalue) for (?:(.*?) argument|object argument)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: expects an (?:lvalue|rvalue) for (?:(.*?) argument|object argument)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={pb,1590001902,ob},
[i]={rb,1590001902,pb},
[j]={{D,10885,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (Conv.Bad.Kind == BadConversionSequence::lvalue_ref_to_rvalue || Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_value_category) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << (unsigned)isObjectArgument << I + 1 << (Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) << ToParamRange;"}}
[j]={{E,10885,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (Conv.Bad.Kind == BadConversionSequence::lvalue_ref_to_rvalue || Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_value_category) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << (unsigned)isObjectArgument << I + 1 << (Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) << ToParamRange;"}},
[k]={
["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:5:25: note: candidate function [with T = -42] not viable: expects an lvalue for 1st argument","clang/test/Misc/integer-literal-printing.cpp:8:34: note: candidate function [with T = 42] not viable: expects an lvalue for 1st argument"}
}
},
},
["note_ovl_candidate_constraints_not_satisfied"]={
["note_ovl_candidate_constraints_not_satisfied"]={
[c]="candidate ...... not viable: constraints not satisfied",
[f]="candidate ...... not viable: constraints not satisfied",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: constraints not satisfied",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 not viable: constraints not satisfied",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: constraints not satisfied",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) not viable\\: constraints not satisfied",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{D,11615,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_constraints_not_satisfied: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_constraints_not_satisfied) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */;"}}
[j]={{E,11615,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_constraints_not_satisfied: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_constraints_not_satisfied) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */;"}},
[k]={
["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:33:3: note: candidate function not viable: constraints not satisfied","clang/test/CXX/class/class.dtor/p4.cpp:37:3: note: candidate function not viable: constraints not satisfied"}
}
},
},
["note_ovl_candidate_deduced_mismatch"]={
["note_ovl_candidate_deduced_mismatch"]={
[c]="candidate template ignored: deduced type A of ...B parameter does not match adjusted type C of ...argumentD",
[f]="candidate template ignored: deduced type A of ...B parameter does not match adjusted type C of ...argumentD",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: deduced type %diff{$ of %select{|element of }4%ordinal0 parameter does not match adjusted type $ of %select{|element of }4argument|of %select{|element of }4%ordinal0 parameter does not match adjusted type of %select{|element of }4argument}1,2%3",
[d]="candidate template ignored: deduced type %diff{$ of %select{|element of }4%ordinal0 parameter does not match adjusted type $ of %select{|element of }4argument|of %select{|element of }4%ordinal0 parameter does not match adjusted type of %select{|element of }4argument}1,2%3",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: deduced type (?:(.*?) of (?:|element of )(.*?) parameter does not match adjusted type (.*?) of (?:|element of )argument|of (?:|element of )(.*?) parameter does not match adjusted type of (?:|element of )argument)(.*?)",
[a]="candidate template ignored\\: deduced type (?:(.*?) of (?:|element of )(.*?) parameter does not match adjusted type (.*?) of (?:|element of )argument|of (?:|element of )(.*?) parameter does not match adjusted type of (?:|element of )argument)(.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"9b534547250a",1451527374,"Improve diagnostic for the case where a function template candidate is rejected"},
[i]={"9b534547250a",1451527374,"Improve diagnostic for the case where a function template candidate is rejected"},
[j]={{D,11311,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_DeducedMismatchNested: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_deduced_mismatch) << (*DeductionFailure.getCallArgIndex() + 1) << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg() << TemplateArgString << (DeductionFailure.Result == Sema::TDK_DeducedMismatchNested);"}}
[j]={{E,11311,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_DeducedMismatchNested: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_deduced_mismatch) << (*DeductionFailure.getCallArgIndex() + 1) << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg() << TemplateArgString << (DeductionFailure.Result == Sema::TDK_DeducedMismatchNested);"}},
[k]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:66:6: note: candidate template ignored: deduced type \'matrix<float, 3UL, 4UL>\' of 2nd parameter does not match adjusted type \'matrix<int, 3, 4>\' of argument [with R = 3, C = 4]","clang/test/SemaTemplate/matrix-type.cpp:71:6: note: candidate template ignored: deduced type \'matrix<[...], 3UL + 4UL, 4UL>\' of 1st parameter does not match adjusted type \'matrix<[...], 3, 4>\' of argument [with T = int, R = 3, C = 4]","clang/test/SemaTemplate/matrix-type.cpp:76:6: note: candidate template ignored: deduced type \'matrix<[...], 5UL - 2, 5UL>\' of 1st parameter does not match adjusted type \'matrix<[...], 5, 5>\' of argument [with T = unsigned int, R = 5]"}
}
},
},
["note_ovl_candidate_deleted"]={
["note_ovl_candidate_deleted"]={
[c]="candidate ...... has been ...",
[f]="candidate ...... has been ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 has been %select{explicitly made unavailable|explicitly deleted|implicitly deleted}3",
[d]="candidate %select{function|function|function (with reversed parameter order)|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|function (the implicit \'operator==\' for this \'operator<=>)\'|inherited constructor}0%select{| template| %2}1 has been %select{explicitly made unavailable|explicitly deleted|implicitly deleted}3",
[b]=m,
[e]=p,
[g]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) has been (?:explicitly made unavailable|explicitly deleted|implicitly deleted)",
[a]="candidate (?:function|function|function \\(with reversed parameter order\\)|constructor|constructor \\(the implicit default constructor\\)|constructor \\(the implicit copy constructor\\)|constructor \\(the implicit move constructor\\)|function \\(the implicit copy assignment operator\\)|function \\(the implicit move assignment operator\\)|function \\(the implicit \'operator\\=\\=\' for this \'operator\\<\\=\\>\\)\'|inherited constructor)(?:| template| (.*?)) has been (?:explicitly made unavailable|explicitly deleted|implicitly deleted)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[j]={{D,11523,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  // Note deleted candidates, but only if they\'re viable.\n  if (Cand->Viable) {\n    if (Fn->isDeleted()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);"}}
[j]={{E,11523,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  // Note deleted candidates, but only if they\'re viable.\n  if (Cand->Viable) {\n    if (Fn->isDeleted()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);"}},
[k]={
["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:33:3: note: candidate function has been explicitly deleted","clang/test/CXX/class/class.dtor/p4.cpp:37:3: note: candidate function has been explicitly deleted"}
}
},
},
["note_ovl_candidate_disabled_by_enable_if"]={
["note_ovl_candidate_disabled_by_enable_if"]={
[c]="candidate template ignored: disabled by AB",
[f]="candidate template ignored: disabled by AB",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: disabled by %0%1",
[d]="candidate template ignored: disabled by %0%1",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: disabled by (.*?)(.*?)",
[a]="candidate template ignored\\: disabled by (.*?)(.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:"},
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:"},
[j]={{D,11266,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_enable_if) {\n      S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if) << \"\'enable_if\'\" << TemplateArgString;"}}
[j]={{E,11266,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_enable_if) {\n      S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if) << \"\'enable_if\'\" << TemplateArgString;"}},
[k]={
["clang/test/SemaTemplate/overload-candidates.cpp"]={"clang/test/SemaTemplate/overload-candidates.cpp:58:22: note: candidate template ignored: disabled by \'enable_if\' [with T = char]"}
}
},
},
["note_ovl_candidate_disabled_by_function_cond_attr"]={
["note_ovl_candidate_disabled_by_function_cond_attr"]={
[c]="candidate disabled: A",
[f]="candidate disabled: A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate disabled: %0",
[d]="candidate disabled: %0",
[b]=m,
[e]=p,
[g]="candidate disabled\\: (.*?)",
[a]="candidate disabled\\: (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[j]={{C,7023,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{D,11448,"static void DiagnoseFailedEnableIfAttr(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{D,14906,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // In the case the method to call was not selected by the overloading\n  // resolution process, we still need to handle the enable_if attribute. Do\n  // that here, so it will not hide previous -- and more relevant -- errors.\n  if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) {\n    if (const EnableIfAttr *Attr = CheckEnableIf(Method, LParenLoc, Args, true)) {\n      Diag(Method->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"}}
[j]={{D,7023,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{E,11448,"static void DiagnoseFailedEnableIfAttr(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{E,14906,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // In the case the method to call was not selected by the overloading\n  // resolution process, we still need to handle the enable_if attribute. Do\n  // that here, so it will not hide previous -- and more relevant -- errors.\n  if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) {\n    if (const EnableIfAttr *Attr = CheckEnableIf(Method, LParenLoc, Args, true)) {\n      Diag(Method->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"}},
[k]={
["clang/test/SemaCXX/builtin-object-size-cxx14.cpp"]={"clang/test/SemaCXX/builtin-object-size-cxx14.cpp:42:6: note: candidate disabled: <no message provided>","clang/test/SemaCXX/builtin-object-size-cxx14.cpp:49:6: note: candidate disabled: <no message provided>"}
}
},
},
["note_ovl_candidate_disabled_by_requirement"]={
["note_ovl_candidate_disabled_by_requirement"]={
[c]="candidate template ignored: requirement \'A\' was not satisfiedB",
[f]="candidate template ignored: requirement \'A\' was not satisfiedB",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: requirement \'%0\' was not satisfied%1",
[d]="candidate template ignored: requirement \'%0\' was not satisfied%1",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: requirement \'(.*?)\' was not satisfied(.*?)",
[a]="candidate template ignored\\: requirement \'(.*?)\' was not satisfied(.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition."},
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition."},
[j]={{D,11275,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    // We found a specific requirement that disabled the enable_if.\n    if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_requirement) {\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_disabled_by_requirement) << PDiag->second.getStringArg(0) << TemplateArgString;"}}
[j]={{E,11275,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    // We found a specific requirement that disabled the enable_if.\n    if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_requirement) {\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_disabled_by_requirement) << PDiag->second.getStringArg(0) << TemplateArgString;"}},
[k]={
["clang/test/SemaCUDA/autoret-global.cu"]={"clang/test/SemaCUDA/autoret-global.cu:29:6: note: candidate template ignored: requirement \'3 == 1\' was not satisfied [with N = 3]","clang/test/SemaCUDA/autoret-global.cu:35:6: note: candidate template ignored: requirement \'3 == 2\' was not satisfied [with N = 3]"}
}
},
},
["note_ovl_candidate_explicit"]={
["note_ovl_candidate_explicit"]={
[c]="explicit ... is not a candidate...",
[f]="explicit ... is not a candidate...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="explicit %select{constructor|conversion function|deduction guide}0 is not a candidate%select{| (explicit specifier evaluates to true)}1",
[d]="explicit %select{constructor|conversion function|deduction guide}0 is not a candidate%select{| (explicit specifier evaluates to true)}1",
[b]=m,
[e]=p,
[g]="explicit (?:constructor|conversion function|deduction guide) is not a candidate(?:| \\(explicit specifier evaluates to true\\))",
[a]="explicit (?:constructor|conversion function|deduction guide) is not a candidate(?:| \\(explicit specifier evaluates to true\\))",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{D,11480,"static void DiagnoseFailedExplicitSpec(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(First->getLocation(), diag::note_ovl_candidate_explicit) << Kind << (ES.getExpr() ? 1 : 0) << (ES.getExpr() ? ES.getExpr()->getSourceRange() : SourceRange());"}}
[j]={{E,11480,"static void DiagnoseFailedExplicitSpec(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(First->getLocation(), diag::note_ovl_candidate_explicit) << Kind << (ES.getExpr() ? 1 : 0) << (ES.getExpr() ? ES.getExpr()->getSourceRange() : SourceRange());"}},
[k]={
["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:8:12: note: explicit constructor is not a candidate"}
}
},
},
["note_ovl_candidate_explicit_arg_mismatch_named"]={
["note_ovl_candidate_explicit_arg_mismatch_named"]={
[c]="candidate template ignored: invalid explicitly-specified argument for template parameter A",
[f]="candidate template ignored: invalid explicitly-specified argument for template parameter A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: invalid explicitly-specified argument for template parameter %0",
[d]="candidate template ignored: invalid explicitly-specified argument for template parameter %0",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: invalid explicitly\\-specified argument for template parameter (.*?)",
[a]="candidate template ignored\\: invalid explicitly\\-specified argument for template parameter (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[j]={{D,11202,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InvalidExplicitArguments:\n    if (ParamD->getDeclName())\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_named) << ParamD->getDeclName();"}}
[j]={{E,11202,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InvalidExplicitArguments:\n    if (ParamD->getDeclName())\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_named) << ParamD->getDeclName();"}},
[k]={
["clang/test/CXX/temp/temp.param/p8-cxx20.cpp"]={"clang/test/CXX/temp/temp.param/p8-cxx20.cpp:43:8: note: candidate template ignored: invalid explicitly-specified argument for template parameter \'d\'","clang/test/CXX/temp/temp.param/p8-cxx20.cpp:43:8: note: candidate template ignored: invalid explicitly-specified argument for template parameter \'d\'"}
}
},
},
["note_ovl_candidate_explicit_arg_mismatch_unnamed"]={
["note_ovl_candidate_explicit_arg_mismatch_unnamed"]={
[c]="candidate template ignored: invalid explicitly-specified argument for A template parameter",
[f]="candidate template ignored: invalid explicitly-specified argument for A template parameter",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: invalid explicitly-specified argument for %ordinal0 template parameter",
[d]="candidate template ignored: invalid explicitly-specified argument for %ordinal0 template parameter",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: invalid explicitly\\-specified argument for (.*?) template parameter",
[a]="candidate template ignored\\: invalid explicitly\\-specified argument for (.*?) template parameter",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[j]={{D,11214,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InvalidExplicitArguments:\n    if (ParamD->getDeclName())\n    else {\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) << (index + 1);"}}
[j]={{E,11214,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InvalidExplicitArguments:\n    if (ParamD->getDeclName())\n    else {\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) << (index + 1);"}},
[k]={
["clang/test/CXX/temp/temp.res/temp.local/p1.cpp"]={"clang/test/CXX/temp/temp.res/temp.local/p1.cpp:15:20: note: candidate template ignored: invalid explicitly-specified argument for 1st template parameter","clang/test/CXX/temp/temp.res/temp.local/p1.cpp:13:25: note: candidate template ignored: invalid explicitly-specified argument for 1st template parameter","clang/test/CXX/temp/temp.res/temp.local/p1.cpp:15:20: note: candidate template ignored: invalid explicitly-specified argument for 1st template parameter"}
}
},
},
["note_ovl_candidate_has_pass_object_size_params"]={
["note_ovl_candidate_has_pass_object_size_params"]={
[c]="candidate address cannot be taken because parameter A has pass_object_size attribute",
[f]="candidate address cannot be taken because parameter A has pass_object_size attribute",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate address cannot be taken because parameter %0 has pass_object_size attribute",
[d]="candidate address cannot be taken because parameter %0 has pass_object_size attribute",
[b]=m,
[e]=p,
[g]="candidate address cannot be taken because parameter (.*?) has pass_object_size attribute",
[a]="candidate address cannot be taken because parameter (.*?) has pass_object_size attribute",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[i]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[j]={{D,10606,"/// 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      S.Diag(FD->getLocation(), diag::note_ovl_candidate_has_pass_object_size_params) << ParamNo;"}}
[j]={{E,10606,"/// 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      S.Diag(FD->getLocation(), diag::note_ovl_candidate_has_pass_object_size_params) << ParamNo;"}},
[k]={
["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:38:6: note: candidate address cannot be taken because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:38:6: note: candidate address cannot be taken because parameter 1 has pass_object_size attribute"}
}
},
},
["note_ovl_candidate_illegal_constructor"]={
["note_ovl_candidate_illegal_constructor"]={
[c]="candidate ... ignored: instantiation ... its own class type by value",
[f]="candidate ... ignored: instantiation ... its own class type by value",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{constructor|template}0 ignored: instantiation %select{takes|would take}0 its own class type by value",
[d]="candidate %select{constructor|template}0 ignored: instantiation %select{takes|would take}0 its own class type by value",
[b]=m,
[e]=p,
[g]="candidate (?:constructor|template) ignored\\: instantiation (?:takes|would take) its own class type by value",
[a]="candidate (?:constructor|template) ignored\\: instantiation (?:takes|would take) its own class type by value",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"578a1f8c6d27",1418521613,"If a non-template constructor instantiated to X(X),"},
[i]={"578a1f8c6d27",1418521613,"If a non-template constructor instantiated to X(X),"},
[j]={{D,11545,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_illegal_constructor: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor) << (Fn->getPrimaryTemplate() ? 1 : 0);"}}
[j]={{E,11545,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_illegal_constructor: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor) << (Fn->getPrimaryTemplate() ? 1 : 0);"}},
[k]={
["clang/test/SemaTemplate/constructor-template.cpp"]={"clang/test/SemaTemplate/constructor-template.cpp:62:24: note: candidate template ignored: instantiation would take its own class type by value","clang/test/SemaTemplate/constructor-template.cpp:161:5: note: candidate constructor ignored: instantiation takes its own class type by value"}
}
},
},
["note_ovl_candidate_illegal_constructor_adrspace_mismatch"]={
["note_ovl_candidate_illegal_constructor_adrspace_mismatch"]={
[c]="candidate constructor ignored: cannot be used to construct an object in address space A",
[f]="candidate constructor ignored: cannot be used to construct an object in address space A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate constructor ignored: cannot be used to construct an object in address space %0",
[d]="candidate constructor ignored: cannot be used to construct an object in address space %0",
[b]=m,
[e]=p,
[g]="candidate constructor ignored\\: cannot be used to construct an object in address space (.*?)",
[a]="candidate constructor ignored\\: cannot be used to construct an object in address space (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c25ea86d4392",1561047808,"[Sema] Diagnose addr space mismatch while constructing objects"},
[i]={"c25ea86d4392",1561047808,"[Sema] Diagnose addr space mismatch while constructing objects"},
[j]={{D,11555,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_object_addrspace_mismatch: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor_adrspace_mismatch) << QualsForPrinting;"}}
[j]={{E,11555,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_object_addrspace_mismatch: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor_adrspace_mismatch) << QualsForPrinting;"}},
[k]={
["clang/test/CodeGenCXX/address-space-of-this.cpp"]={"clang/test/CodeGenCXX/address-space-of-this.cpp:8:3: note: candidate constructor ignored: cannot be used to construct an object in address space \'__attribute__((address_space(10)))\'"}
}
},
},
["note_ovl_candidate_incomplete_deduction"]={
["note_ovl_candidate_incomplete_deduction"]={
[c]="candidate template ignored: couldn\'t infer template argument A",
[f]="candidate template ignored: couldn\'t infer template argument A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: couldn\'t infer template argument %0",
[d]="candidate template ignored: couldn\'t infer template argument %0",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: couldn\'t infer template argument (.*?)",
[a]="candidate template ignored\\: couldn\'t infer template argument (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[j]={{D,11111,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Incomplete: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction) << ParamD->getDeclName();"}}
[j]={{E,11111,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Incomplete: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction) << ParamD->getDeclName();"}},
[k]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/p6.cpp"]={bc,bc,bc,bc,bc,bc,bc,"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/p6.cpp:99:41: note: candidate template ignored: couldn\'t infer template argument \'R\'","clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/p6.cpp:100:41: note: candidate template ignored: couldn\'t infer template argument \'R\'"}
}
},
},
["note_ovl_candidate_incomplete_deduction_pack"]={
["note_ovl_candidate_incomplete_deduction_pack"]={
[c]="candidate template ignored: deduced too few arguments for expanded pack A; no argument for B expanded parameter in deduced argument pack C",
[f]="candidate template ignored: deduced too few arguments for expanded pack A; no argument for B expanded parameter in deduced argument pack C",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: deduced too few arguments for expanded pack %0; no argument for %ordinal1 expanded parameter in deduced argument pack %2",
[d]="candidate template ignored: deduced too few arguments for expanded pack %0; no argument for %ordinal1 expanded parameter in deduced argument pack %2",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: deduced too few arguments for expanded pack (.*?); no argument for (.*?) expanded parameter in deduced argument pack (.*?)",
[a]="candidate template ignored\\: deduced too few arguments for expanded pack (.*?); no argument for (.*?) expanded parameter in deduced argument pack (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value"},
[i]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value"},
[j]={{D,11120,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_IncompletePack: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction_pack) << ParamD->getDeclName() << (DeductionFailure.getFirstArg()->pack_size() + 1) << *DeductionFailure.getFirstArg();"}}
[j]={{E,11120,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_IncompletePack: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction_pack) << ParamD->getDeclName() << (DeductionFailure.getFirstArg()->pack_size() + 1) << *DeductionFailure.getFirstArg();"}},
[k]={
["clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp"]={"clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp:20:17: note: candidate template ignored: deduced too few arguments for expanded pack \'Us\'; no argument for 2nd expanded parameter in deduced argument pack <int>"}
}
},
},
["note_ovl_candidate_inconsistent_deduction"]={
["note_ovl_candidate_inconsistent_deduction"]={
[c]="candidate template ignored: deduced ... for parameter A (B vs. C)",
[f]="candidate template ignored: deduced ... for parameter A (B vs. C)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: deduced %select{conflicting types|conflicting values|conflicting templates|packs of different lengths}0 for parameter %1%diff{ ($ vs. $)|}2,3",
[d]="candidate template ignored: deduced %select{conflicting types|conflicting values|conflicting templates|packs of different lengths}0 for parameter %1%diff{ ($ vs. $)|}2,3",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: deduced (?:conflicting types|conflicting values|conflicting templates|packs of different lengths) for parameter (.*?)(?: \\((.*?) vs\\. (.*?)\\)|)",
[a]="candidate template ignored\\: deduced (?:conflicting types|conflicting values|conflicting templates|packs of different lengths) for parameter (.*?)(?: \\((.*?) vs\\. (.*?)\\)|)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3626a5cac2ed",1273340492,"When printing a non-viable overload candidate that failed due to"},
[i]={"3626a5cac2ed",1273340492,"When printing a non-viable overload candidate that failed due to"},
[j]={{D,11191,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Inconsistent: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction) << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg();"}}
[j]={{E,11191,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Inconsistent: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction) << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg();"}},
[k]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/basic.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/basic.cpp:18:27: note: candidate template ignored: deduced conflicting types for parameter \'T\' (\'int\' vs. \'float\')"}
}
},
},
["note_ovl_candidate_inconsistent_deduction_types"]={
["note_ovl_candidate_inconsistent_deduction_types"]={
[c]="candidate template ignored: deduced values of conflicting types for parameter A (B of type C vs. D of type E)",
[f]="candidate template ignored: deduced values of conflicting types for parameter A (B of type C vs. D of type E)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: deduced values %diff{of conflicting types for parameter %0 (%1 of type $ vs. %3 of type $)|%1 and %3 of conflicting types for parameter %0}2,4",
[d]="candidate template ignored: deduced values %diff{of conflicting types for parameter %0 (%1 of type $ vs. %3 of type $)|%1 and %3 of conflicting types for parameter %0}2,4",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: deduced values (?:of conflicting types for parameter (.*?) \\((.*?) of type (.*?) vs\\. (.*?) of type (.*?)\\)|(.*?) and (.*?) of conflicting types for parameter (.*?))",
[a]="candidate template ignored\\: deduced values (?:of conflicting types for parameter (.*?) \\((.*?) of type (.*?) vs\\. (.*?) of type (.*?)\\)|(.*?) and (.*?) of conflicting types for parameter (.*?))",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"593d6a168f45",1482456639,"When merging two deduced non-type template arguments for the same parameter,"},
[i]={"593d6a168f45",1482456639,"When merging two deduced non-type template arguments for the same parameter,"},
[j]={{D,11168,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Inconsistent: {\n    if (isa<TemplateTypeParmDecl>(ParamD))\n    else if (isa<NonTypeTemplateParmDecl>(ParamD)) {\n      if (!T1.isNull() && !T2.isNull() && !S.Context.hasSameType(T1, T2)) {\n        S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction_types) << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << T1 << *DeductionFailure.getSecondArg() << T2;"}}
[j]={{E,11168,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Inconsistent: {\n    if (isa<TemplateTypeParmDecl>(ParamD))\n    else if (isa<NonTypeTemplateParmDecl>(ParamD)) {\n      if (!T1.isNull() && !T2.isNull() && !S.Context.hasSameType(T1, T2)) {\n        S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction_types) << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << T1 << *DeductionFailure.getSecondArg() << T2;"}},
[k]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/p9.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/p9.cpp:34:8: note: candidate template ignored: deduced values of conflicting types for parameter \'Value\' (10 of type \'int\' vs. 10 of type \'char\')","clang/test/CXX/temp/temp.fct.spec/temp.deduct/p9.cpp:34:8: note: candidate template ignored: deduced values of conflicting types for parameter \'Value\' (10 of type \'char\' vs. 10 of type \'int\')"}
}
},
},
["note_ovl_candidate_inherited_constructor"]={
["note_ovl_candidate_inherited_constructor"]={
[c]="constructor from base class A inherited here",
[f]="constructor from base class A inherited here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="constructor from base class %0 inherited here",
[d]="constructor from base class %0 inherited here",
[b]=m,
[e]=p,
[g]="constructor from base class (.*?) inherited here",
[a]="constructor from base class (.*?) inherited here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works..."},
[i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works..."},
[j]={{D,10527,"void MaybeEmitInheritedConstructorNote(Sema &S, const Decl *FoundDecl) {\n  // FIXME: It\'d be nice to only emit a note once per using-decl per overload\n  // set.\n  if (const auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl))\n    S.Diag(FoundDecl->getLocation(), diag::note_ovl_candidate_inherited_constructor) << Shadow->getNominatedBaseClass();"}}
[j]={{E,10527,"void MaybeEmitInheritedConstructorNote(Sema &S, const Decl *FoundDecl) {\n  // FIXME: It\'d be nice to only emit a note once per using-decl per overload\n  // set.\n  if (const auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl))\n    S.Diag(FoundDecl->getLocation(), diag::note_ovl_candidate_inherited_constructor) << Shadow->getNominatedBaseClass();"}},
[k]={
["clang/test/CXX/special/class.inhctor/p3.cpp"]={"clang/test/CXX/special/class.inhctor/p3.cpp:31:13: note: constructor from base class \'B3\' inherited here"}
}
},
},
["note_ovl_candidate_inherited_constructor_slice"]={
["note_ovl_candidate_inherited_constructor_slice"]={
[c]="candidate ... ignored: inherited constructor cannot be used to ... object",
[f]="candidate ... ignored: inherited constructor cannot be used to ... object",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate %select{constructor|template}0 ignored: inherited constructor cannot be used to %select{copy|move}1 object",
[d]="candidate %select{constructor|template}0 ignored: inherited constructor cannot be used to %select{copy|move}1 object",
[b]=m,
[e]=p,
[g]="candidate (?:constructor|template) ignored\\: inherited constructor cannot be used to (?:copy|move) object",
[a]="candidate (?:constructor|template) ignored\\: inherited constructor cannot be used to (?:copy|move) object",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f9c59b71220c",1483911944,"PR30305: Implement proposed DR resolution to prevent slicing via inherited constructor."},
[i]={"f9c59b71220c",1483911944,"PR30305: Implement proposed DR resolution to prevent slicing via inherited constructor."},
[j]={{D,11592,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_inhctor_slice:\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inherited_constructor_slice) << (Fn->getPrimaryTemplate() ? 1 : 0) << Fn->getParamDecl(0)->getType()->isRValueReferenceType();"}}
[j]={{E,11592,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_inhctor_slice:\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inherited_constructor_slice) << (Fn->getPrimaryTemplate() ? 1 : 0) << Fn->getParamDecl(0)->getType()->isRValueReferenceType();"}},
[k]={
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:100:5: note: candidate constructor ignored: inherited constructor cannot be used to copy object","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:100:5: note: candidate constructor ignored: inherited constructor cannot be used to copy object","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:100:5: note: candidate constructor ignored: inherited constructor cannot be used to copy object"}
}
},
},
["note_ovl_candidate_instantiation_depth"]={
["note_ovl_candidate_instantiation_depth"]={
[c]="candidate template ignored: substitution exceeded maximum template instantiation depth",
[f]="candidate template ignored: substitution exceeded maximum template instantiation depth",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: substitution exceeded maximum template instantiation depth",
[d]="candidate template ignored: substitution exceeded maximum template instantiation depth",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: substitution exceeded maximum template instantiation depth",
[a]="candidate template ignored\\: substitution exceeded maximum template instantiation depth",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[j]={{D,11244,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InstantiationDepth:\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_instantiation_depth);"}}
[j]={{E,11244,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InstantiationDepth:\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_instantiation_depth);"}}
},
},
["note_ovl_candidate_non_deduced_mismatch"]={
["note_ovl_candidate_non_deduced_mismatch"]={
[c]="candidate template ignored: could not match A against B",
[f]="candidate template ignored: could not match A against B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: could not match %diff{$ against $|types}0,1",
[d]="candidate template ignored: could not match %diff{$ against $|types}0,1",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: could not match (?:(.*?) against (.*?)|types)",
[a]="candidate template ignored\\: could not match (?:(.*?) against (.*?)|types)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"44ecdbdc6134",1359609589,"Improve \'failed template argument deduction\' diagnostic for the case where we"},
[i]={"44ecdbdc6134",1359609589,"Improve \'failed template argument deduction\' diagnostic for the case where we"},
[j]={{D,11354,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_NonDeducedMismatch: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch) << FirstTA << SecondTA;"}}
[j]={{E,11354,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_NonDeducedMismatch: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch) << FirstTA << SecondTA;"}},
[k]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/basic.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/basic.cpp:18:27: note: candidate template ignored: could not match \'T *\' against \'ConvToIntPtr\'","clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.call/basic.cpp:41:8: note: candidate template ignored: could not match \'bar\' against \'foo\'"}
}
},
},
["note_ovl_candidate_non_deduced_mismatch_qualified"]={
["note_ovl_candidate_non_deduced_mismatch_qualified"]={
[c]="candidate template ignored: could not match A against B",
[f]="candidate template ignored: could not match A against B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: could not match %q0 against %q1",
[d]="candidate template ignored: could not match %q0 against %q1",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: could not match (.*?) against (.*?)",
[a]="candidate template ignored\\: could not match (.*?) against (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e373235c7cf8",1365455500,"Fix PR15634, better error message for template deduction failure."},
[i]={"e373235c7cf8",1365455500,"Fix PR15634, better error message for template deduction failure."},
[j]={{D,11338,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_NonDeducedMismatch: {\n    if (FirstTA.getKind() == TemplateArgument::Template && SecondTA.getKind() == TemplateArgument::Template) {\n      if (FirstTN.getKind() == TemplateName::Template && SecondTN.getKind() == TemplateName::Template) {\n        if (FirstTN.getAsTemplateDecl()->getName() == SecondTN.getAsTemplateDecl()->getName()) {\n          S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch_qualified) << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();"}}
[j]={{E,11338,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_NonDeducedMismatch: {\n    if (FirstTA.getKind() == TemplateArgument::Template && SecondTA.getKind() == TemplateArgument::Template) {\n      if (FirstTN.getKind() == TemplateName::Template && SecondTN.getKind() == TemplateName::Template) {\n        if (FirstTN.getAsTemplateDecl()->getName() == SecondTN.getAsTemplateDecl()->getName()) {\n          S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch_qualified) << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();"}}
},
},
["note_ovl_candidate_substitution_failure"]={
["note_ovl_candidate_substitution_failure"]={
[c]="candidate template ignored: substitution failureAB",
[f]="candidate template ignored: substitution failureAB",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: substitution failure%0%1",
[d]="candidate template ignored: substitution failure%0%1",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: substitution failure(.*?)(.*?)",
[a]="candidate template ignored\\: substitution failure(.*?)(.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[j]={{D,11292,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_substitution_failure) << TemplateArgString << SFINAEArgString << R;"}}
[j]={{E,11292,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_substitution_failure) << TemplateArgString << SFINAEArgString << R;"}},
[k]={
["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:54:32: note: candidate template ignored: substitution failure: deduced incomplete pack <(no value)> for template parameter \'T\'"}
}
},
},
["note_ovl_candidate_underqualified"]={
["note_ovl_candidate_underqualified"]={
[c]="candidate template ignored: cannot deduce a type for A that would make B equal C",
[f]="candidate template ignored: cannot deduce a type for A that would make B equal C",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: cannot deduce a type for %0 that would make %2 equal %1",
[d]="candidate template ignored: cannot deduce a type for %0 that would make %2 equal %1",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: cannot deduce a type for (.*?) that would make (.*?) equal (.*?)",
[a]="candidate template ignored\\: cannot deduce a type for (.*?) that would make (.*?) equal (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"42d7d19710d0",1280999108,"TDK_InconsistentQuals is really totally different from TDK_Inconsistent."},
[i]={"42d7d19710d0",1280999108,"TDK_InconsistentQuals is really totally different from TDK_Inconsistent."},
[j]={{D,11147,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Underqualified: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified) << ParamD->getDeclName() << Arg << NonCanonParam;"}}
[j]={{E,11147,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Underqualified: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified) << ParamD->getDeclName() << Arg << NonCanonParam;"}},
[k]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p1.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p1.cpp:8:29: note: candidate template ignored: cannot deduce a type for \'T\' that would make \'const T\' equal \'volatile int\'"}
}
},
},
["note_ovl_candidate_unsatisfied_constraints"]={
["note_ovl_candidate_unsatisfied_constraints"]={
[c]="candidate template ignored: constraints not satisfiedA",
[f]="candidate template ignored: constraints not satisfiedA",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="candidate template ignored: constraints not satisfied%0",
[d]="candidate template ignored: constraints not satisfied%0",
[b]=m,
[e]=p,
[g]="candidate template ignored\\: constraints not satisfied(.*?)",
[a]="candidate template ignored\\: constraints not satisfied(.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{D,10584,"/// 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          S.Diag(FD->getBeginLoc(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"},{D,11230,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_ConstraintsNotSatisfied: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"}}
[j]={{E,10584,"/// 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          S.Diag(FD->getBeginLoc(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"},{E,11230,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_ConstraintsNotSatisfied: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"}},
[k]={
["clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp"]={"clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp:20:17: note: candidate template ignored: constraints not satisfied [with Us = <int, int>]"}
}
},
},
["note_ovl_surrogate_cand"]={
["note_ovl_surrogate_cand"]={
[c]="conversion candidate of type A",
[f]="conversion candidate of type A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="conversion candidate of type %0",
[d]="conversion candidate of type %0",
[b]=m,
[e]=p,
[g]="conversion candidate of type (.*?)",
[a]="conversion candidate of type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[j]={{D,11666,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n  if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n  } else {\n    S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) << FnType;"}}
[j]={{E,11666,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n  if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n  } else {\n    S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) << FnType;"}},
[k]={
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:201:3: note: conversion candidate of type \'INTREF (*)(FLOAT, double)\' (aka \'int &(*)(float, double)\')","clang/test/SemaCXX/overloaded-operator.cpp:202:3: note: conversion candidate of type \'float &(&)(int, double)\'","clang/test/SemaCXX/overloaded-operator.cpp:201:3: note: conversion candidate of type \'INTREF (*)(FLOAT, double)\' (aka \'int &(*)(float, double)\')","clang/test/SemaCXX/overloaded-operator.cpp:202:3: note: conversion candidate of type \'float &(&)(int, double)\'"}
}
},
},
["note_ovl_surrogate_constraints_not_satisfied"]={
["note_ovl_surrogate_constraints_not_satisfied"]={
[c]="conversion candidate A not viable: constraints not satisfied",
[f]="conversion candidate A not viable: constraints not satisfied",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="conversion candidate %0 not viable: constraints not satisfied",
[d]="conversion candidate %0 not viable: constraints not satisfied",
[b]=m,
[e]=p,
[g]="conversion candidate (.*?) not viable\\: constraints not satisfied",
[a]="conversion candidate (.*?) not viable\\: constraints not satisfied",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas."},
[i]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas."},
[j]={{D,11660,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n  if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n    S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_constraints_not_satisfied) << Cand->Surrogate;"}}
[j]={{E,11660,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n  if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n    S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_constraints_not_satisfied) << Cand->Surrogate;"}},
[k]={
["clang/test/SemaTemplate/concepts.cpp"]={"clang/test/SemaTemplate/concepts.cpp:727:5: note: conversion candidate \'operator int (*)(int)\' not viable: constraints not satisfied"}
}
},
},
["note_ovl_too_many_candidates"]={
["note_ovl_too_many_candidates"]={
[c]="remaining A candidateB omitted; pass -fshow-overloads=all to show them",
[f]="remaining A candidateB omitted; pass -fshow-overloads=all to show them",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="remaining %0 candidate%s0 omitted; pass -fshow-overloads=all to show them",
[d]="remaining %0 candidate%s0 omitted; pass -fshow-overloads=all to show them",
[b]=m,
[e]=p,
[g]="remaining (.*?) candidate(.*?) omitted; pass \\-fshow\\-overloads\\=all to show them",
[a]="remaining (.*?) candidate(.*?) omitted; pass \\-fshow\\-overloads\\=all to show them",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"2b99c6fc4f3e",1276235867,"Add an option -fshow-overloads=best|all to limit the number of overload"},
[i]={"2b99c6fc4f3e",1276235867,"Add an option -fshow-overloads=best|all to limit the number of overload"},
[j]={{yc,2589,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  if (SuppressedOverloads)\n    S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) << SuppressedOverloads;"},{D,10769,"/// Diagnoses an ambiguous conversion.  The partial diagnostic is the\n/// \"lead\" diagnostic; it will be given two arguments, the source and\n/// target types of the conversion.\nvoid ImplicitConversionSequence::DiagnoseAmbiguousConversion(Sema &S, SourceLocation CaretLoc, const PartialDiagnostic &PDiag) const {\n  if (I != E)\n    S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);"},{D,12124,"void OverloadCandidateSet::NoteCandidates(Sema &S, ArrayRef<Expr *> Args, ArrayRef<OverloadCandidate *> Cands, StringRef Opc, SourceLocation OpLoc) {\n  if (I != E)\n    S.Diag(OpLoc, diag::note_ovl_too_many_candidates, shouldDeferDiags(S, Args, OpLoc)) << int(E - I);"},{D,12230,"/// NoteCandidates - When no template specialization match is found, prints\n/// diagnostic messages containing the non-matching specializations that form\n/// the candidate set.\n/// This is analoguous to OverloadCandidateSet::NoteCandidates() with\n/// OCD == OCD_AllCandidates and Cand->Viable == false.\nvoid TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {\n  if (I != E)\n    S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);"}}
[j]={{yc,2589,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  if (SuppressedOverloads)\n    S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) << SuppressedOverloads;"},{E,10769,"/// Diagnoses an ambiguous conversion.  The partial diagnostic is the\n/// \"lead\" diagnostic; it will be given two arguments, the source and\n/// target types of the conversion.\nvoid ImplicitConversionSequence::DiagnoseAmbiguousConversion(Sema &S, SourceLocation CaretLoc, const PartialDiagnostic &PDiag) const {\n  if (I != E)\n    S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);"},{E,12124,"void OverloadCandidateSet::NoteCandidates(Sema &S, ArrayRef<Expr *> Args, ArrayRef<OverloadCandidate *> Cands, StringRef Opc, SourceLocation OpLoc) {\n  if (I != E)\n    S.Diag(OpLoc, diag::note_ovl_too_many_candidates, shouldDeferDiags(S, Args, OpLoc)) << int(E - I);"},{E,12230,"/// NoteCandidates - When no template specialization match is found, prints\n/// diagnostic messages containing the non-matching specializations that form\n/// the candidate set.\n/// This is analoguous to OverloadCandidateSet::NoteCandidates() with\n/// OCD == OCD_AllCandidates and Cand->Viable == false.\nvoid TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {\n  if (I != E)\n    S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);"}},
[k]={
["clang/test/SemaCXX/overloaded-builtin-operators.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators.cpp:239:16: note: remaining 142 candidates omitted; pass -fshow-overloads=all to show them"}
}
},
},
["note_ownership_returns_index_mismatch"]={
["note_ownership_returns_index_mismatch"]={
[c]="declared with index A here",
[f]="declared with index A here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="declared with index %0 here",
[d]="declared with index %0 here",
[b]=m,
[e]=p,
[g]="declared with index (.*?) here",
[a]="declared with index (.*?) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar..."},
[i]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar..."},
[j]={{u,1898,"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      } else if (K == OwnershipAttr::Returns && I->getOwnKind() == OwnershipAttr::Returns) {\n        // A returns attribute conflicts with any other returns attribute using\n        // a different index.\n        if (!llvm::is_contained(I->args(), Idx)) {\n          if (I->args_size())\n            S.Diag(AL.getLoc(), diag::note_ownership_returns_index_mismatch) << Idx.getSourceIndex() << Ex->getSourceRange();"}}
[j]={{v,1898,"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      } else if (K == OwnershipAttr::Returns && I->getOwnKind() == OwnershipAttr::Returns) {\n        // A returns attribute conflicts with any other returns attribute using\n        // a different index.\n        if (!llvm::is_contained(I->args(), Idx)) {\n          if (I->args_size())\n            S.Diag(AL.getLoc(), diag::note_ownership_returns_index_mismatch) << Idx.getSourceIndex() << Ex->getSourceRange();"}},
[k]={
["clang/test/Sema/attr-ownership.cpp"]={"clang/test/Sema/attr-ownership.cpp:6:22: note: declared with index 3 here"}
}
},
},
["note_parameter_here"]={
["note_parameter_here"]={
[c]="passing argument to parameter here",
[f]="passing argument to parameter here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="passing argument to parameter here",
[d]="passing argument to parameter here",
[b]=m,
[e]=p,
[g]="passing argument to parameter here",
[a]="passing argument to parameter here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[j]={{U,6965,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n    else\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here);"}}
[j]={{W,6965,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n    else\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here);"}},
[k]={
["clang/test/SemaObjC/argument-checking.m"]={"clang/test/SemaObjC/argument-checking.m:5:31: note: passing argument to parameter here","clang/test/SemaObjC/argument-checking.m:6:25: note: passing argument to parameter here"}
}
},
},
["note_parameter_mapping_substitution_here"]={
["note_parameter_mapping_substitution_here"]={
[c]="while substituting into concept arguments here; substitution failures not allowed in concept arguments",
[f]="while substituting into concept arguments here; substitution failures not allowed in concept arguments",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="while substituting into concept arguments here; substitution failures not allowed in concept arguments",
[d]="while substituting into concept arguments here; substitution failures not allowed in concept arguments",
[b]=m,
[e]=p,
[g]="while substituting into concept arguments here; substitution failures not allowed in concept arguments",
[a]="while substituting into concept arguments here; substitution failures not allowed in concept arguments",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{gb,1065,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ParameterMappingSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_parameter_mapping_substitution_here) << Active->InstantiationRange;"}}
[j]={{eb,1065,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ParameterMappingSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_parameter_mapping_substitution_here) << Active->InstantiationRange;"}},
[k]={
["clang/test/CXX/temp/temp.constr/temp.constr.normal/p1.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.normal/p1.cpp:12:42: note: while substituting into concept arguments here; substitution failures not allowed in concept arguments"}
}
},
},
["note_parameter_named_here"]={
["note_parameter_named_here"]={
[c]="passing argument to parameter A here",
[f]="passing argument to parameter A here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="passing argument to parameter %0 here",
[d]="passing argument to parameter %0 here",
[b]=m,
[e]=p,
[g]="passing argument to parameter (.*?) here",
[a]="passing argument to parameter (.*?) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[j]={{U,6962,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) << Entity.getDecl()->getDeclName();"}}
[j]={{W,6962,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) << Entity.getDecl()->getDeclName();"}},
[k]={
["clang/test/SemaObjC/argument-checking.m"]={"clang/test/SemaObjC/argument-checking.m:10:28: note: passing argument to parameter \'s\' here","clang/test/SemaObjC/argument-checking.m:11:23: note: passing argument to parameter \'s\' here","clang/test/SemaObjC/argument-checking.m:13:15: note: passing argument to parameter \'s2\' here"}
}
},
},
["note_parameter_pack_here"]={
["note_parameter_pack_here"]={
[c]="parameter pack A declared here",
[f]="parameter pack A declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="parameter pack %0 declared here",
[d]="parameter pack %0 declared here",
[b]=m,
[e]=p,
[g]="parameter pack (.*?) declared here",
[a]="parameter pack (.*?) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1032,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1032,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}},
[k]={
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:33:22: note: parameter pack \'Types\' declared here"}
}
},
},
["note_parameter_type"]={
["note_parameter_type"]={
[c]="parameter of type A is declared here",
[f]="parameter of type A is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="parameter of type %0 is declared here",
[d]="parameter of type %0 is declared here",
[b]=m,
[e]=p,
[g]="parameter of type (.*?) is declared here",
[a]="parameter of type (.*?) is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[j]={{F,8172,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity.  Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!SecondArgIsLastNamedArgument)\n  else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n    Diag(ParamLoc, diag::note_parameter_type) << Type;"},{Db,1232,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  if (AtIndexGetter) {\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(AtIndexGetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Db,1348,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(AtIndexSetter->parameters()[1]->getLocation(), diag::note_parameter_type) << T;"},{Db,1356,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(AtIndexSetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Db,1371,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      if (!T->isObjCObjectPointerType()) {\n        S.Diag(AtIndexSetter->parameters()[i]->getLocation(), diag::note_parameter_type) << T;"}}
[j]={{F,8172,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity.  Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!SecondArgIsLastNamedArgument)\n  else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n    Diag(ParamLoc, diag::note_parameter_type) << Type;"},{Lb,1232,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  if (AtIndexGetter) {\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(AtIndexGetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Lb,1348,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(AtIndexSetter->parameters()[1]->getLocation(), diag::note_parameter_type) << T;"},{Lb,1356,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(AtIndexSetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Lb,1371,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      if (!T->isObjCObjectPointerType()) {\n        S.Diag(AtIndexSetter->parameters()[i]->getLocation(), diag::note_parameter_type) << T;"}},
[k]={
["clang/test/SemaObjC/objc-container-subscripting.m"]={"clang/test/SemaObjC/objc-container-subscripting.m:7:40: note: parameter of type \'double\' is declared here","clang/test/SemaObjC/objc-container-subscripting.m:8:59: note: parameter of type \'void *\' is declared here","clang/test/SemaObjC/objc-container-subscripting.m:8:25: note: parameter of type \'id *\' is declared here","clang/test/SemaObjC/objc-container-subscripting.m:29:36: note: parameter of type \'id *\' is declared here","clang/test/SemaObjC/objc-container-subscripting.m:30:26: note: parameter of type \'void *\' is declared here","clang/test/SemaObjC/objc-container-subscripting.m:30:56: note: parameter of type \'id *\' is declared here"}
}
},
},
["note_partial_availability_specified_here"]={
["note_partial_availability_specified_here"]={
[c]="A has been marked as being introduced in B C here, but the deployment target is D E",
[f]="A has been marked as being introduced in B C here, but the deployment target is D E",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 has been marked as being introduced in %1 %2 here, but the deployment target is %1 %3",
[d]="%0 has been marked as being introduced in %1 %2 here, but the deployment target is %1 %3",
[b]=m,
[e]=p,
[g]="(.*?) has been marked as being introduced in (.*?) (.*?) here, but the deployment target is (.*?) (.*?)",
[a]="(.*?) has been marked as being introduced in (.*?) (.*?) here, but the deployment target is (.*?) (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note"},
[i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note"},
[j]={{Kb,396,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    S.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << S.Context.getTargetInfo().getPlatformMinVersion().getAsString();"},{Kb,781,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    SemaRef.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << SemaRef.Context.getTargetInfo().getPlatformMinVersion().getAsString();"}}
[j]={{Vb,396,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    S.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << S.Context.getTargetInfo().getPlatformMinVersion().getAsString();"},{Vb,781,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    SemaRef.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << SemaRef.Context.getTargetInfo().getPlatformMinVersion().getAsString();"}},
[k]={
["clang/test/Parser/objc-implementation-attrs.m"]={"clang/test/Parser/objc-implementation-attrs.m:25:24: note: \'unavail_int\' has been marked as being introduced in macOS 1000 here, but the deployment target is macOS 10.14.0"}
}
},
},
["note_partial_spec_match"]={
["note_partial_spec_match"]={
[c]="partial specialization matches A",
[f]="partial specialization matches A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="partial specialization matches %0",
[d]="partial specialization matches %0",
[b]=m,
[e]=p,
[g]="partial specialization matches (.*?)",
[a]="partial specialization matches (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations "},
[i]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations "},
[j]={{x,4857,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  if (AmbiguousPartialSpec) {\n    // Print the matching partial specializations.\n    for (MatchResult P : Matched)\n      Diag(P.Partial->getLocation(), diag::note_partial_spec_match) << getTemplateArgumentBindingsText(P.Partial->getTemplateParameters(), *P.Args);"},{gb,3698,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    if (Matched.size() >= 1) {\n      if (Matched.size() == 1) {\n      } else {\n        if (Ambiguous) {\n          // Print the matching partial specializations.\n          for (SmallVectorImpl<MatchResult>::iterator P = Matched.begin(), PEnd = Matched.end(); P != PEnd; ++P)\n            S.Diag(P->Partial->getLocation(), diag::note_partial_spec_match) << S.getTemplateArgumentBindingsText(P->Partial->getTemplateParameters(), *P->Args);"}}
[j]={{y,4857,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  if (AmbiguousPartialSpec) {\n    // Print the matching partial specializations.\n    for (MatchResult P : Matched)\n      Diag(P.Partial->getLocation(), diag::note_partial_spec_match) << getTemplateArgumentBindingsText(P.Partial->getTemplateParameters(), *P.Args);"},{eb,3698,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    if (Matched.size() >= 1) {\n      if (Matched.size() == 1) {\n      } else {\n        if (Ambiguous) {\n          // Print the matching partial specializations.\n          for (SmallVectorImpl<MatchResult>::iterator P = Matched.begin(), PEnd = Matched.end(); P != PEnd; ++P)\n            S.Diag(P->Partial->getLocation(), diag::note_partial_spec_match) << S.getTemplateArgumentBindingsText(P->Partial->getTemplateParameters(), *P->Args);"}},
[k]={
["clang/test/SemaTemplate/temp_class_order.cpp"]={"clang/test/SemaTemplate/temp_class_order.cpp:33:8: note: partial specialization matches [with T = int, U = int *]","clang/test/SemaTemplate/temp_class_order.cpp:36:8: note: partial specialization matches [with T = int *, U = int]"}
}
},
},
["note_pch_rebuild_required"]={
["note_pch_rebuild_required"]={
[c]="please rebuild precompiled header \'A\'",
[f]="please rebuild precompiled header \'A\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="please rebuild precompiled header \'%0\'",
[d]="please rebuild precompiled header \'%0\'",
[b]=m,
[e]=p,
[g]="please rebuild precompiled header \'(.*?)\'",
[a]="please rebuild precompiled header \'(.*?)\'",
[a]=l,
[g]=m,
[e]="AST Deserialization Issue",
[h]="AST Deserialization Issue",
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[j]={{Qb,2519,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;"}}
[j]={{ec,2519,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;"}}
},
},
["note_pch_required_by"]={
["note_pch_required_by"]={
[c]="\'A\' required by \'B\'",
[f]="\'A\' required by \'B\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' required by \'%1\'",
[d]="\'%0\' required by \'%1\'",
[b]=m,
[e]=p,
[g]="\'(.*?)\' required by \'(.*?)\'",
[a]="\'(.*?)\' required by \'(.*?)\'",
[a]=l,
[g]=m,
[e]="AST Deserialization Issue",
[h]="AST Deserialization Issue",
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[j]={{Qb,2512,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        Diag(diag::note_pch_required_by) << Filename << ImportStack[0]->FileName;"},{Qb,2515,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        for (unsigned I = 1; I < ImportStack.size(); ++I)\n          Diag(diag::note_pch_required_by) << ImportStack[I - 1]->FileName << ImportStack[I]->FileName;"}}
[j]={{ec,2512,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        Diag(diag::note_pch_required_by) << Filename << ImportStack[0]->FileName;"},{ec,2515,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        for (unsigned I = 1; I < ImportStack.size(); ++I)\n          Diag(diag::note_pch_required_by) << ImportStack[I - 1]->FileName << ImportStack[I]->FileName;"}}
},
},
["note_performs_forbidden_arc_conversion"]={
["note_performs_forbidden_arc_conversion"]={
[c]="inline function performs a conversion which is forbidden in ARC",
[f]="inline function performs a conversion which is forbidden in ARC",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="inline function performs a conversion which is forbidden in ARC",
[d]="inline function performs a conversion which is forbidden in ARC",
[b]=m,
[e]=p,
[g]="inline function performs a conversion which is forbidden in ARC",
[a]="inline function performs a conversion which is forbidden in ARC",
[a]=l,
[g]=m,
[e]="ARC Restrictions",
[h]="ARC Restrictions",
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics"},
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics"},
[j]={{Kb,482,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCForbiddenConversion:\n          diag_available_here = diag::note_performs_forbidden_arc_conversion;"}}
[j]={{Vb,482,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCForbiddenConversion:\n          diag_available_here = diag::note_performs_forbidden_arc_conversion;"}},
[k]={
["clang/test/SemaObjC/arc-system-header.m"]={"clang/test/SemaObjC/Inputs/arc-system-header.h:1:21: note: inline function performs a conversion which is forbidden in ARC","clang/test/SemaObjC/Inputs/arc-system-header.h:5:22: note: inline function performs a conversion which is forbidden in ARC"}
}
},
},
["note_pointer_declared_here"]={
["note_pointer_declared_here"]={
[c]="pointer A declared here",
[f]="pointer A declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="pointer %0 declared here",
[d]="pointer %0 declared here",
[b]=m,
[e]=p,
[g]="pointer (.*?) declared here",
[a]="pointer (.*?) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div"},
[i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div"},
[j]={{C,11325,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) {\n      if (const ValueDecl *LHSArgDecl = DRE->getDecl())\n        S.Diag(LHSArgDecl->getLocation(), diag::note_pointer_declared_here) << LHSArgDecl;"}}
[j]={{D,11325,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) {\n      if (const ValueDecl *LHSArgDecl = DRE->getDecl())\n        S.Diag(LHSArgDecl->getLocation(), diag::note_pointer_declared_here) << LHSArgDecl;"}},
[k]={
["clang/test/Sema/div-sizeof-ptr.cpp"]={xc,xc,xc,xc,xc,"clang/test/Sema/div-sizeof-ptr.cpp:11:14: note: pointer \'r\' declared here","clang/test/Sema/div-sizeof-ptr.cpp:19:10: note: pointer \'d\' declared here","clang/test/Sema/div-sizeof-ptr.cpp:19:10: note: pointer \'d\' declared here",xc}
}
},
},
["note_possibility"]={
["note_possibility"]={
[c]="one possibility",
[f]="one possibility",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="one possibility",
[d]="one possibility",
[b]=m,
[e]=p,
[g]="one possibility",
[a]="one possibility",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={Ec,1308178962,sc},
[i]={Nc,1308178962,Cc},
[j]={{B,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}}
[j]={{C,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:386:1: note: one possibility","clang/test/SemaObjC/arc.m:387:1: note: one possibility","clang/test/SemaObjC/arc.m:388:1: note: one possibility","clang/test/SemaObjC/arc.m:389:1: note: one possibility","clang/test/SemaObjC/arc.m:390:1: note: one possibility"}
}
},
},
["note_possible_target_of_call"]={
["note_possible_target_of_call"]={
[c]="possible target for call",
[f]="possible target for call",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="possible target for call",
[d]="possible target for call",
[b]=m,
[e]=p,
[g]="possible target for call",
[a]="possible target for call",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion"},
[i]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion"},
[j]={{yc,2582,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  for (UnresolvedSetImpl::iterator It = Overloads.begin(), DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {\n    S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);"}}
[j]={{yc,2582,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  for (UnresolvedSetImpl::iterator It = Overloads.begin(), DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {\n    S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);"}},
[k]={
["clang/test/Sema/attr-target-mv.c"]={"clang/test/Sema/attr-target-mv.c:12:42: note: possible target for call"}
}
},
},
["note_pp_ambiguous_macro_chosen"]={
["note_pp_ambiguous_macro_chosen"]={
[c]="expanding this definition of A",
[f]="expanding this definition of A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="expanding this definition of %0",
[d]="expanding this definition of %0",
[b]=m,
[e]=p,
[g]="expanding this definition of (.*?)",
[a]="expanding this definition of (.*?)",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[j]={{wc,561,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    Diag(MI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_chosen) << Identifier.getIdentifierInfo();"}}
[j]={{Vc,561,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    Diag(MI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_chosen) << Identifier.getIdentifierInfo();"}},
[k]={
["clang/test/Modules/macros2.c"]={"clang/test/Modules/Inputs/macros_top.h:22:9: note: expanding this definition of \'TOP_OTHER_DEF_RIGHT_UNDEF\'","clang/test/Modules/Inputs/macros_left.h:14:9: note: expanding this definition of \'LEFT_RIGHT_DIFFERENT\'","clang/test/Modules/Inputs/macros_left.h:11:9: note: expanding this definition of \'LEFT_RIGHT_DIFFERENT2\'","clang/test/Modules/Inputs/macros_top.h:19:9: note: expanding this definition of \'TOP_OTHER_REDEF1\'"}
}
},
},
["note_pp_ambiguous_macro_other"]={
["note_pp_ambiguous_macro_other"]={
[c]="other definition of A",
[f]="other definition of A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="other definition of %0",
[d]="other definition of %0",
[b]=m,
[e]=p,
[g]="other definition of (.*?)",
[a]="other definition of (.*?)",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[j]={{wc,565,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    M.forAllDefinitions([&](const MacroInfo *OtherMI) {\n      if (OtherMI != MI)\n        Diag(OtherMI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_other) << Identifier.getIdentifierInfo();"}}
[j]={{Vc,565,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    M.forAllDefinitions([&](const MacroInfo *OtherMI) {\n      if (OtherMI != MI)\n        Diag(OtherMI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_other) << Identifier.getIdentifierInfo();"}},
[k]={
["clang/test/Modules/macros2.c"]={"clang/test/Modules/Inputs/macros_other.h:6:9: note: other definition of \'TOP_OTHER_DEF_RIGHT_UNDEF\'","clang/test/Modules/Inputs/macros_right.h:12:9: note: other definition of \'LEFT_RIGHT_DIFFERENT\'","clang/test/Modules/Inputs/macros_right.h:13:9: note: other definition of \'LEFT_RIGHT_DIFFERENT2\'","clang/test/Modules/Inputs/macros_other.h:4:9: note: other definition of \'TOP_OTHER_REDEF1\'"}
}
},
},
["note_pp_framework_without_header"]={
["note_pp_framework_without_header"]={
[c]="did not find header \'A\' in framework \'B\' (loaded from \'C\')",
[f]="did not find header \'A\' in framework \'B\' (loaded from \'C\')",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="did not find header \'%0\' in framework \'%1\' (loaded from \'%2\')",
[d]="did not find header \'%0\' in framework \'%1\' (loaded from \'%2\')",
[b]=m,
[e]=p,
[g]="did not find header \'(.*?)\' in framework \'(.*?)\' \\(loaded from \'(.*?)\'\\)",
[a]="did not find header \'(.*?)\' in framework \'(.*?)\' \\(loaded from \'(.*?)\'\\)",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"421380a10816",1549406095,"[Preprocessor] Add a note with framework location for \"file not found\" error."},
[i]={"421380a10816",1549406095,"[Preprocessor] Add a note with framework location for \"file not found\" error."},
[j]={{S,2101,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  if (IsFrameworkFound) {\n    Diag(FilenameTok, diag::note_pp_framework_without_header) << OriginalFilename.substr(SlashPos + 1) << FrameworkName << CacheEntry.Directory->getName();"}}
[j]={{S,2101,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  if (IsFrameworkFound) {\n    Diag(FilenameTok, diag::note_pp_framework_without_header) << OriginalFilename.substr(SlashPos + 1) << FrameworkName << CacheEntry.Directory->getName();"}},
[k]={
["clang/test/Preprocessor/include-header-missing-in-framework.c"]={"clang/test/Preprocessor/include-header-missing-in-framework.c:10:10: note: did not find header \'NotExistingHeader.h\' in framework \'TestFramework\' (loaded from \'clang/test/Preprocessor/Inputs\')"}
}
},
},
["note_pp_macro_annotation"]={
["note_pp_macro_annotation"]={
[c]="macro marked \'...\' here",
[f]="macro marked \'...\' here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="macro marked \'%select{deprecated|restrict_expansion|final}0\' here",
[d]="macro marked \'%select{deprecated|restrict_expansion|final}0\' here",
[b]=m,
[e]=p,
[g]="macro marked \'(?:deprecated|restrict_expansion|final)\' here",
[a]="macro marked \'(?:deprecated|restrict_expansion|final)\' here",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{"clang/lib/Lex/Preprocessor.cpp",1460,"void Preprocessor::emitMacroDeprecationWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 0;"},{"clang/lib/Lex/Preprocessor.cpp",1475,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 1;"},{"clang/lib/Lex/Preprocessor.cpp",1487,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n  Diag(*A.FinalAnnotationLoc, diag::note_pp_macro_annotation) << 2;"}}
[j]={{"clang/lib/Lex/Preprocessor.cpp",1460,"void Preprocessor::emitMacroDeprecationWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 0;"},{"clang/lib/Lex/Preprocessor.cpp",1475,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 1;"},{"clang/lib/Lex/Preprocessor.cpp",1487,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n  Diag(*A.FinalAnnotationLoc, diag::note_pp_macro_annotation) << 2;"}},
[k]={
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:14:56: note: macro marked \'deprecated\' here",Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb}
}
},
},
["note_pp_module_begin_here"]={
["note_pp_module_begin_here"]={
[c]="entering module \'A\' due to this pragma",
[f]="entering module \'A\' due to this pragma",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="entering module \'%0\' due to this pragma",
[d]="entering module \'%0\' due to this pragma",
[b]=m,
[e]=p,
[g]="entering module \'(.*?)\' due to this pragma",
[a]="entering module \'(.*?)\' due to this pragma",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"51d09c512b95",1496121779,"Diagnose attempts to build a preprocessed module that defines an unavailable submodule."},
[i]={"51d09c512b95",1496121779,"Diagnose attempts to build a preprocessed module that defines an unavailable submodule."},
[j]={{Hb,1774,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // If the module isn\'t available, it doesn\'t make sense to enter it.\n    if (Preprocessor::checkModuleIsAvailable(PP.getLangOpts(), PP.getTargetInfo(), PP.getDiagnostics(), M)) {\n      PP.Diag(BeginLoc, diag::note_pp_module_begin_here) << M->getTopLevelModuleName();"}}
[j]={{Ub,1774,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // If the module isn\'t available, it doesn\'t make sense to enter it.\n    if (Preprocessor::checkModuleIsAvailable(PP.getLangOpts(), PP.getTargetInfo(), PP.getDiagnostics(), M)) {\n      PP.Diag(BeginLoc, diag::note_pp_module_begin_here) << M->getTopLevelModuleName();"}},
[k]={
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:9:22: note: entering module \'a\' due to this pragma"}
}
},
},
["note_pragma_attribute_applied_decl_here"]={
["note_pragma_attribute_applied_decl_here"]={
[c]="when applied to this declaration",
[f]="when applied to this declaration",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="when applied to this declaration",
[d]="when applied to this declaration",
[b]=m,
[e]=p,
[g]="when applied to this declaration",
[a]="when applied to this declaration",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[j]={{sb,1137,"void Sema::PrintPragmaAttributeInstantiationPoint() {\n  Diags.Report(PragmaAttributeCurrentTargetDecl->getBeginLoc(), diag::note_pragma_attribute_applied_decl_here);"}}
[j]={{wb,1137,"void Sema::PrintPragmaAttributeInstantiationPoint() {\n  Diags.Report(PragmaAttributeCurrentTargetDecl->getBeginLoc(), diag::note_pragma_attribute_applied_decl_here);"}},
[k]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:12:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:13:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:17:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:17:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:21:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:21:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:31:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:36:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:44:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:44:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:53:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:56:1: note: when applied to this declaration","clang/test/Sema/pragma-attribute.c:56:1: note: when applied to this declaration"}
}
},
},
["note_pragma_attribute_namespace_on_attribute"]={
["note_pragma_attribute_namespace_on_attribute"]={
[c]="omit the namespace to add attributes to the most-recently pushed attribute group",
[f]="omit the namespace to add attributes to the most-recently pushed attribute group",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="omit the namespace to add attributes to the most-recently pushed attribute group",
[d]="omit the namespace to add attributes to the most-recently pushed attribute group",
[b]=m,
[e]=p,
[g]="omit the namespace to add attributes to the most\\-recently pushed attribute group",
[a]="omit the namespace to add attributes to the most\\-recently pushed attribute group",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[j]={{"clang/lib/Parse/ParsePragma.cpp",3886,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::note_pragma_attribute_namespace_on_attribute);"}}
[j]={{"clang/lib/Parse/ParsePragma.cpp",3886,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::note_pragma_attribute_namespace_on_attribute);"}},
[k]={
["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: note: omit the namespace to add attributes to the most-recently pushed attribute group"}
}
},
},
["note_pragma_attribute_region_ends_here"]={
["note_pragma_attribute_region_ends_here"]={
[c]="\'#pragma clang attribute push\' regions ends here",
[f]="\'#pragma clang attribute push\' regions ends here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'#pragma clang attribute push\' regions ends here",
[d]="\'#pragma clang attribute push\' regions ends here",
[b]=m,
[e]=p,
[g]="\'\\#pragma clang attribute push\' regions ends here",
[a]="\'\\#pragma clang attribute push\' regions ends here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[j]={{sb,1092,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // Dig back through the stack trying to find the most recently pushed group\n  // that in Namespace. Note that this works fine if no namespace is present,\n  // think of push/pops without namespaces as having an implicit \"nullptr\"\n  // namespace.\n  for (size_t Index = PragmaAttributeStack.size(); Index;) {\n    if (PragmaAttributeStack[Index].Namespace == Namespace) {\n      for (const PragmaAttributeEntry &Entry : PragmaAttributeStack[Index].Entries) {\n        if (!Entry.IsUsed) {\n          Diag(PragmaLoc, diag::note_pragma_attribute_region_ends_here);"}}
[j]={{wb,1092,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // Dig back through the stack trying to find the most recently pushed group\n  // that in Namespace. Note that this works fine if no namespace is present,\n  // think of push/pops without namespaces as having an implicit \"nullptr\"\n  // namespace.\n  for (size_t Index = PragmaAttributeStack.size(); Index;) {\n    if (PragmaAttributeStack[Index].Namespace == Namespace) {\n      for (const PragmaAttributeEntry &Entry : PragmaAttributeStack[Index].Entries) {\n        if (!Entry.IsUsed) {\n          Diag(PragmaLoc, diag::note_pragma_attribute_region_ends_here);"}},
[k]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:7:15: note: \'#pragma clang attribute push\' regions ends here"}
}
},
},
["note_pragma_attribute_use_attribute_kw"]={
["note_pragma_attribute_use_attribute_kw"]={
[c]="use the GNU \'__attribute__\' syntax",
[f]="use the GNU \'__attribute__\' syntax",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use the GNU \'__attribute__\' syntax",
[d]="use the GNU \'__attribute__\' syntax",
[b]=m,
[e]=p,
[g]="use the GNU \'__attribute__\' syntax",
[a]="use the GNU \'__attribute__\' syntax",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[j]={{"clang/lib/Parse/ParsePragma.cpp",1887,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    if (Tok.getIdentifierInfo()) {\n      // If we suspect that this is an attribute suggest the use of\n      // \'__attribute__\'.\n      if (ParsedAttr::getParsedKind(Tok.getIdentifierInfo(), /*ScopeName=*/nullptr, ParsedAttr::AS_GNU) != ParsedAttr::UnknownAttribute) {\n        Diag(Tok, diag::note_pragma_attribute_use_attribute_kw) << FixItHint::CreateInsertion(InsertStartLoc, \"__attribute__((\") << FixItHint::CreateInsertion(Tok.getEndLoc(), \"))\");"}}
[j]={{"clang/lib/Parse/ParsePragma.cpp",1887,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    if (Tok.getIdentifierInfo()) {\n      // If we suspect that this is an attribute suggest the use of\n      // \'__attribute__\'.\n      if (ParsedAttr::getParsedKind(Tok.getIdentifierInfo(), /*ScopeName=*/nullptr, ParsedAttr::AS_GNU) != ParsedAttr::UnknownAttribute) {\n        Diag(Tok, diag::note_pragma_attribute_use_attribute_kw) << FixItHint::CreateInsertion(InsertStartLoc, \"__attribute__((\") << FixItHint::CreateInsertion(Tok.getEndLoc(), \"))\");"}},
[k]={
["clang/test/Parser/pragma-attribute.cpp"]={"clang/test/Parser/pragma-attribute.cpp:178:39: note: use the GNU \'__attribute__\' syntax","clang/test/Parser/pragma-attribute.cpp:180:46: note: use the GNU \'__attribute__\' syntax"}
}
},
},
["note_pragma_entered_here"]={
["note_pragma_entered_here"]={
[c]="#pragma entered here",
[f]="#pragma entered here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="#pragma entered here",
[d]="#pragma entered here",
[b]=m,
[e]=p,
[g]="\\#pragma entered here",
[a]="\\#pragma entered here",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[j]={{S,2146,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here);"},{S,2155,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here);"},{wc,1642,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n  if (II == Ident__LINE__) {\n  } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n  } else if (II == Ident__DATE__) {\n  } else if (II == Ident__TIME__) {\n  } else if (II == Ident__INCLUDE_LEVEL__) {\n  } else if (II == Ident__TIMESTAMP__) {\n  } else if (II == Ident__FLT_EVAL_METHOD__) {\n    if (getLastFPEvalPragmaLocation().isValid()) {\n      Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);"},{Hb,1900,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{Hb,1956,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{sb,705,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (PragmaLocation.isValid())\n    Diag(PragmaLocation, diag::note_pragma_entered_here);"},{sb,707,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (Section.PragmaSectionLocation.isValid())\n    Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"},{sb,726,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      if (Section.PragmaSectionLocation.isValid())\n        Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"}}
[j]={{S,2146,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here);"},{S,2155,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here);"},{Vc,1642,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n  if (II == Ident__LINE__) {\n  } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n  } else if (II == Ident__DATE__) {\n  } else if (II == Ident__TIME__) {\n  } else if (II == Ident__INCLUDE_LEVEL__) {\n  } else if (II == Ident__TIMESTAMP__) {\n  } else if (II == Ident__FLT_EVAL_METHOD__) {\n    if (getLastFPEvalPragmaLocation().isValid()) {\n      Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);"},{Ub,1900,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{Ub,1956,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{wb,705,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (PragmaLocation.isValid())\n    Diag(PragmaLocation, diag::note_pragma_entered_here);"},{wb,707,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (Section.PragmaSectionLocation.isValid())\n    Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"},{wb,726,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      if (Section.PragmaSectionLocation.isValid())\n        Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"}},
[k]={
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:10:15: note: #pragma entered here","clang/test/Sema/pragma-arc-cf-code-audited.c:11:15: note: #pragma entered here"}
}
},
},
["note_pragma_loop_invalid_vectorize_option"]={
["note_pragma_loop_invalid_vectorize_option"]={
[c]="vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')",
[f]="vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')",
[d]="vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')",
[b]=m,
[e]=p,
[g]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[a]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[j]={{"clang/lib/Parse/ParsePragma.cpp",1455,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (R.isInvalid() && !Tok.is(tok::comma))\n        Diag(Toks[0].getLocation(), diag::note_pragma_loop_invalid_vectorize_option);"}}
[j]={{"clang/lib/Parse/ParsePragma.cpp",1455,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (R.isInvalid() && !Tok.is(tok::comma))\n        Diag(Toks[0].getLocation(), diag::note_pragma_loop_invalid_vectorize_option);"}},
[k]={
["clang/test/Parser/pragma-loop.cpp"]={"clang/test/Parser/pragma-loop.cpp:63:98: note: vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')","clang/test/Parser/pragma-loop.cpp:198:81: note: vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')","clang/test/Parser/pragma-loop.cpp:200:102: note: vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')","clang/test/Parser/pragma-loop.cpp:205:101: note: vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')","clang/test/Parser/pragma-loop.cpp:227:144: note: vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}
}
},
},
["note_pragma_pack_here"]={
["note_pragma_pack_here"]={
[c]="previous \'#pragma pack\' directive that modifies alignment is here",
[f]="previous \'#pragma pack\' directive that modifies alignment is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous \'#pragma pack\' directive that modifies alignment is here",
[d]="previous \'#pragma pack\' directive that modifies alignment is here",
[b]=m,
[e]=p,
[g]="previous \'\\#pragma pack\' directive that modifies alignment is here",
[a]="previous \'\\#pragma pack\' directive that modifies alignment is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"},
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"},
[j]={{sb,467,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  if (PrevAlignPackState.ShouldWarnOnInclude) {\n    Diag(PrevAlignPackState.CurrentPragmaLocation, diag::note_pragma_pack_here);"},{sb,472,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // Warn about modified alignment after #includes.\n  if (PrevAlignPackState.CurrentValue != AlignPackStack.CurrentValue) {\n    Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_here);"}}
[j]={{wb,467,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  if (PrevAlignPackState.ShouldWarnOnInclude) {\n    Diag(PrevAlignPackState.CurrentPragmaLocation, diag::note_pragma_pack_here);"},{wb,472,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // Warn about modified alignment after #includes.\n  if (PrevAlignPackState.CurrentValue != AlignPackStack.CurrentValue) {\n    Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_here);"}},
[k]={
["clang/test/SemaObjC/suspicious-pragma-pack.m"]={"clang/test/SemaObjC/suspicious-pragma-pack.m:3:9: note: previous \'#pragma pack\' directive that modifies alignment is here"}
}
},
},
["note_pragma_pack_pop_instead_reset"]={
["note_pragma_pack_pop_instead_reset"]={
[c]="did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?",
[f]="did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?",
[d]="did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?",
[b]=m,
[e]=p,
[g]="did you intend to use \'\\#pragma pack \\(pop\\)\' instead of \'\\#pragma pack\\(\\)\'\\?",
[a]="did you intend to use \'\\#pragma pack \\(pop\\)\' instead of \'\\#pragma pack\\(\\)\'\\?",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"a1479d798870",1501508270,"-Wpragma-pack: add an additional note and fixit when warning"},
[i]={"a1479d798870",1501508270,"-Wpragma-pack: add an additional note and fixit when warning"},
[j]={{sb,491,"void Sema::DiagnoseUnterminatedPragmaAlignPack() {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  for (const auto &StackSlot : llvm::reverse(AlignPackStack.Stack)) {\n    // The user might have already reset the alignment, so suggest replacing\n    // the reset with a pop.\n    if (IsInnermost && AlignPackStack.CurrentValue == AlignPackStack.DefaultValue) {\n      auto DB = Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_pop_instead_reset);"}}
[j]={{wb,491,"void Sema::DiagnoseUnterminatedPragmaAlignPack() {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  for (const auto &StackSlot : llvm::reverse(AlignPackStack.Stack)) {\n    // The user might have already reset the alignment, so suggest replacing\n    // the reset with a pop.\n    if (IsInnermost && AlignPackStack.CurrentValue == AlignPackStack.DefaultValue) {\n      auto DB = Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_pop_instead_reset);"}},
[k]={
["clang/test/FixIt/fixit-pragma-pack.c"]={"clang/test/FixIt/fixit-pragma-pack.c:4:9: note: did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?"}
}
},
},
["note_precedence_bitwise_first"]={
["note_precedence_bitwise_first"]={
[c]="place parentheses around the A expression to evaluate it first",
[f]="place parentheses around the A expression to evaluate it first",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="place parentheses around the %0 expression to evaluate it first",
[d]="place parentheses around the %0 expression to evaluate it first",
[b]=m,
[e]=p,
[g]="place parentheses around the (.*?) expression to evaluate it first",
[a]="place parentheses around the (.*?) expression to evaluate it first",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[i]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[j]={{C,15778,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_bitwise_first) << BinaryOperator::getOpcodeStr(Opc), ParensRange);"}}
[j]={{D,15778,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_bitwise_first) << BinaryOperator::getOpcodeStr(Opc), ParensRange);"}},
[k]={
["clang/test/CodeGen/2008-10-13-FrontendCrash.c"]={"clang/test/CodeGen/2008-10-13-FrontendCrash.c:8:18: note: place parentheses around the ^ expression to evaluate it first"}
}
},
},
["note_precedence_conditional_first"]={
["note_precedence_conditional_first"]={
[c]="place parentheses around the \'?:\' expression to evaluate it first",
[f]="place parentheses around the \'?:\' expression to evaluate it first",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="place parentheses around the \'?:\' expression to evaluate it first",
[d]="place parentheses around the \'?:\' expression to evaluate it first",
[b]=m,
[e]=p,
[g]="place parentheses around the \'\\?\\:\' expression to evaluate it first",
[a]="place parentheses around the \'\\?\\:\' expression to evaluate it first",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."},
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."},
[j]={{C,9778,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_conditional_first), SourceRange(CondRHS->getBeginLoc(), RHSExpr->getEndLoc()));"}}
[j]={{D,9778,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_conditional_first), SourceRange(CondRHS->getBeginLoc(), RHSExpr->getEndLoc()));"}},
[k]={
["clang/test/Misc/caret-diags-macros.c"]={"clang/test/Misc/caret-diags-macros.c:125:38: note: place parentheses around the \'?:\' expression to evaluate it first","clang/test/Misc/caret-diags-macros.c:139:9: note: place parentheses around the \'?:\' expression to evaluate it first","clang/test/Misc/caret-diags-macros.c:158:9: note: place parentheses around the \'?:\' expression to evaluate it first","clang/test/Misc/caret-diags-macros.c:174:21: note: place parentheses around the \'?:\' expression to evaluate it first"}
}
},
},
["note_precedence_silence"]={
["note_precedence_silence"]={
[c]="place parentheses around the \'A\' expression to silence this warning",
[f]="place parentheses around the \'A\' expression to silence this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="place parentheses around the \'%0\' expression to silence this warning",
[d]="place parentheses around the \'%0\' expression to silence this warning",
[b]=m,
[e]=p,
[g]="place parentheses around the \'(.*?)\' expression to silence this warning",
[a]="place parentheses around the \'(.*?)\' expression to silence this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"dac86fd24c56",1349659189,"Use a single note diagnostic for all the precedent/parentheses warnings."},
[i]={"dac86fd24c56",1349659189,"Use a single note diagnostic for all the precedent/parentheses warnings."},
[j]={{C,9521,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << BinaryOperator::getOpcodeStr(CondOpcode), SourceRange(Condition->getBeginLoc(), Condition->getEndLoc()));"},{C,11346,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    S.Diag(Loc, diag::note_precedence_silence) << RHS;"},{C,15766,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << OpStr, (isLeftComp ? LHSExpr : RHSExpr)->getSourceRange());"},{C,15827,"/// It accepts a \'&&\' expr that is inside a \'||\' one.\n/// Emit a diagnostic together with a fixit hint that wraps the \'&&\' expression\n/// in parentheses.\nstatic void EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop) {\n  SuggestParentheses(Self, Bop->getOperatorLoc(), Self.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{C,15843,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{C,15866,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Op, Bop->getSourceRange());"},{C,15874,"static void DiagnoseShiftCompare(Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(S, OCE->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << (Kind == OO_LessLess ? \"<<\" : \">>\"), OCE->getSourceRange());"}}
[j]={{D,9521,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << BinaryOperator::getOpcodeStr(CondOpcode), SourceRange(Condition->getBeginLoc(), Condition->getEndLoc()));"},{D,11346,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    S.Diag(Loc, diag::note_precedence_silence) << RHS;"},{D,15766,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << OpStr, (isLeftComp ? LHSExpr : RHSExpr)->getSourceRange());"},{D,15827,"/// It accepts a \'&&\' expr that is inside a \'||\' one.\n/// Emit a diagnostic together with a fixit hint that wraps the \'&&\' expression\n/// in parentheses.\nstatic void EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop) {\n  SuggestParentheses(Self, Bop->getOperatorLoc(), Self.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{D,15843,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{D,15866,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Op, Bop->getSourceRange());"},{D,15874,"static void DiagnoseShiftCompare(Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(S, OCE->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << (Kind == OO_LessLess ? \"<<\" : \">>\"), OCE->getSourceRange());"}},
[k]={
["clang/test/Parser/cxx2a-spaceship.cpp"]={"clang/test/Parser/cxx2a-spaceship.cpp:13:15: note: place parentheses around the \'<<\' expression to silence this warning","clang/test/Parser/cxx2a-spaceship.cpp:17:15: note: place parentheses around the \'<<\' expression to silence this warning"}
}
},
},
["note_prev_module_declaration"]={
["note_prev_module_declaration"]={
[c]="previous module declaration is here",
[f]="previous module declaration is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous module declaration is here",
[d]="previous module declaration is here",
[b]=m,
[e]=p,
[g]="previous module declaration is here",
[a]="previous module declaration is here",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration."},
[i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration."},
[j]={{jc,238,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(VisibleModules.getImportLoc(ModuleScopes.back().Module), diag::note_prev_module_declaration);"}}
[j]={{gc,238,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(VisibleModules.getImportLoc(ModuleScopes.back().Module), diag::note_prev_module_declaration);"}},
[k]={
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:14:8: note: previous module declaration is here"}
}
},
},
["note_prev_module_definition"]={
["note_prev_module_definition"]={
[c]="previously defined here",
[f]="previously defined here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously defined here",
[d]="previously defined here",
[b]=m,
[e]=p,
[g]="previously defined here",
[a]="previously defined here",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[j]={{jc,315,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition);"}}
[j]={{gc,315,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition);"}}
},
},
["note_prev_module_definition_from_ast_file"]={
["note_prev_module_definition_from_ast_file"]={
[c]="module loaded from \'A\'",
[f]="module loaded from \'A\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="module loaded from \'%0\'",
[d]="module loaded from \'%0\'",
[b]=m,
[e]=p,
[g]="module loaded from \'(.*?)\'",
[a]="module loaded from \'(.*?)\'",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[j]={{jc,317,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n      else if (OptionalFileEntryRef FE = M->getASTFile())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition_from_ast_file) << FE->getName();"}}
[j]={{gc,317,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n      else if (OptionalFileEntryRef FE = M->getASTFile())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition_from_ast_file) << FE->getName();"}}
},
},
["note_prev_partial_spec_here"]={
["note_prev_partial_spec_here"]={
[c]="previous declaration of class template partial specialization A is here",
[f]="previous declaration of class template partial specialization A is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous declaration of class template partial specialization %0 is here",
[d]="previous declaration of class template partial specialization %0 is here",
[b]=m,
[e]=p,
[g]="previous declaration of class template partial specialization (.*?) is here",
[a]="previous declaration of class template partial specialization (.*?) is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of"},
[i]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of"},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4246,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here) << SemaRef.Context.getTypeDeclType(PrevDecl);"}}
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4246,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here) << SemaRef.Context.getTypeDeclType(PrevDecl);"}},
[k]={
["clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:41:31: note: previous declaration of class template partial specialization \'Inner<int, type-parameter-0-0>\' is here","clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:82:29: note: previous declaration of class template partial specialization \'Bar<0, int, type-parameter-0-0>\' is here"}
}
},
},
["note_previous_access_declaration"]={
["note_previous_access_declaration"]={
[c]="previously declared \'A\' here",
[f]="previously declared \'A\' here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously declared \'%1\' here",
[d]="previously declared \'%1\' here",
[b]=m,
[e]=p,
[g]="previously declared \'(.*?)\' here",
[a]="previously declared \'(.*?)\' here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration."},
[i]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration."},
[j]={{"clang/lib/Sema/SemaAccess.cpp",55,"/// 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(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) << PrevMemberDecl << PrevMemberDecl->getAccess();"},{E,1355,"/// 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    } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n      Diag(Ivar->getLocation(), diag::note_previous_access_declaration) << Ivar << Ivar->getName();"}}
[j]={{"clang/lib/Sema/SemaAccess.cpp",55,"/// 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(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) << PrevMemberDecl << PrevMemberDecl->getAccess();"},{G,1355,"/// 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    } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n      Diag(Ivar->getLocation(), diag::note_previous_access_declaration) << Ivar << Ivar->getName();"}},
[k]={
["clang/test/SemaObjC/ivar-sem-check-2.m"]={"clang/test/SemaObjC/ivar-sem-check-2.m:4:6: note: previously declared \'value2\' here"}
}
},
},
["note_previous_attribute"]={
["note_previous_attribute"]={
[c]="previous attribute is here",
[f]="previous attribute is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous attribute is here",
[d]="previous attribute is here",
[b]=m,
[e]=p,
[g]="previous attribute is here",
[a]="previous attribute is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4c3db23d1c93",1335403563,"Reject cases like"},
[i]={"4c3db23d1c93",1335403563,"Reject cases like"},
[j]={{v,7150,"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    } else if (IsMicrosoftABI && IsSpecialization) {\n    } else {\n      S.Diag(OldImportAttr->getLocation(), diag::note_previous_attribute);"},{u,2551,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n        } else {\n          Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,2875,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  if (existingAttr) {\n    S.Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3299,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3383,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3907,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n      Diag(EA->getLoc(), diag::note_previous_attribute);"},{u,7684,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{u,7704,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{y,6485,"/// 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(ClassAttr->getLocation(), diag::note_previous_attribute);"}}
[j]={{w,7150,"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    } else if (IsMicrosoftABI && IsSpecialization) {\n    } else {\n      S.Diag(OldImportAttr->getLocation(), diag::note_previous_attribute);"},{v,2551,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n        } else {\n          Diag(CI.getLoc(), diag::note_previous_attribute);"},{v,2875,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  if (existingAttr) {\n    S.Diag(CI.getLoc(), diag::note_previous_attribute);"},{v,3299,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{v,3383,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{v,3907,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n      Diag(EA->getLoc(), diag::note_previous_attribute);"},{v,7684,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{v,7704,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{z,6485,"/// 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(ClassAttr->getLocation(), diag::note_previous_attribute);"}},
[k]={
["clang/test/Sema/attr-wasm.c"]={"clang/test/Sema/attr-wasm.c:11:34: note: previous attribute is here","clang/test/Sema/attr-wasm.c:23:36: note: previous attribute is here"}
}
},
},
["note_previous_builtin_declaration"]={
["note_previous_builtin_declaration"]={
[c]="A is a builtin with type B",
[f]="A is a builtin with type B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 is a builtin with type %1",
[d]="%0 is a builtin with type %1",
[b]=m,
[e]=p,
[g]="(.*?) is a builtin with type (.*?)",
[a]="(.*?) is a builtin with type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{v,3478,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    if (const auto *FD = dyn_cast<FunctionDecl>(Old)) {\n      if (FD->getBuiltinID())\n        PrevDiag = diag::note_previous_builtin_declaration;"},{v,3679,"/// 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(Old->getLocation(), diag::note_previous_builtin_declaration) << Old << Old->getType();"},{v,4297,"/// 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 (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    // If it\'s actually a library-defined builtin function like \'malloc\'\n    // or \'printf\', just warn about the incompatible redeclaration.\n    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {\n      Diag(OldLocation, diag::note_previous_builtin_declaration) << Old << Old->getType();"},{v,4302,"/// 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 (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    PrevDiag = diag::note_previous_builtin_declaration;"}}
[j]={{w,3478,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    if (const auto *FD = dyn_cast<FunctionDecl>(Old)) {\n      if (FD->getBuiltinID())\n        PrevDiag = diag::note_previous_builtin_declaration;"},{w,3679,"/// 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(Old->getLocation(), diag::note_previous_builtin_declaration) << Old << Old->getType();"},{w,4297,"/// 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 (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    // If it\'s actually a library-defined builtin function like \'malloc\'\n    // or \'printf\', just warn about the incompatible redeclaration.\n    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {\n      Diag(OldLocation, diag::note_previous_builtin_declaration) << Old << Old->getType();"},{w,4302,"/// 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 (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    PrevDiag = diag::note_previous_builtin_declaration;"}},
[k]={
["clang/test/Sema/crash-invalid-builtin.c"]={"clang/test/Sema/crash-invalid-builtin.c:4:1: note: \'__builtin_isinf\' is a builtin with type \'int ()\'"}
}
},
},
["note_previous_decl"]={
["note_previous_decl"]={
[c]="A declared here",
[f]="A declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 declared here",
[d]="%0 declared here",
[b]=m,
[e]=p,
[g]="(.*?) declared here",
[a]="(.*?) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[j]={
[j]={
[1]={"clang/lib/Sema/SemaCUDA.cpp",641,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if (InitFn) {\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(InitFn->getLocation(), diag::note_previous_decl) << InitFn;"},
[1]={"clang/lib/Sema/SemaCUDA.cpp",641,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if (InitFn) {\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(InitFn->getLocation(), diag::note_previous_decl) << InitFn;"},
[2]={"clang/lib/Sema/SemaCUDA.cpp",840,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  if (!Callee->getBuiltinID())\n    SemaDiagnosticBuilder(DiagKind, Callee->getLocation(), diag::note_previous_decl, Caller, *this) << Callee;"},
[2]={"clang/lib/Sema/SemaCUDA.cpp",840,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  if (!Callee->getBuiltinID())\n    SemaDiagnosticBuilder(DiagKind, Callee->getLocation(), diag::note_previous_decl, Caller, *this) << Callee;"},
[3]={v,12302,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n  for (const auto *Param : FD->parameters()) {\n    if (!Param->hasAttr<HLSLAnnotationAttr>()) {\n      Diag(Param->getLocation(), diag::note_previous_decl) << Param;"},
[3]={w,12302,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n  for (const auto *Param : FD->parameters()) {\n    if (!Param->hasAttr<HLSLAnnotationAttr>()) {\n      Diag(Param->getLocation(), diag::note_previous_decl) << Param;"},
[4]={v,17443,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;"},
[4]={w,17443,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;"},
[5]={v,17453,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;"},
[5]={w,17453,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;"},
[6]={y,2689,"/// 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        if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())\n          Diag(BaseDecl->getLocation(), diag::note_previous_decl) << BaseType;"},
[6]={z,2689,"/// 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        if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())\n          Diag(BaseDecl->getLocation(), diag::note_previous_decl) << BaseType;"},
[7]={B,192,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n    Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"},
[7]={C,192,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n    Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"},
[8]={B,201,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n    Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"},
[8]={C,201,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n    Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"},
[9]={B,217,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n    if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n      Diag(oldDecl->getLocation(), diag::note_previous_decl) << \"parameter\";"},
[9]={C,217,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n    if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n      Diag(oldDecl->getLocation(), diag::note_previous_decl) << \"parameter\";"},
[10]={B,324,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  if (isa<ObjCMethodDecl>(ND))\n  else\n    S.Diag(ND->getLocation(), diag::note_previous_decl) << (isa<ObjCCategoryDecl>(ND) ? \"category\" : \"class\");"},
[10]={C,324,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  if (isa<ObjCMethodDecl>(ND))\n  else\n    S.Diag(ND->getLocation(), diag::note_previous_decl) << (isa<ObjCCategoryDecl>(ND) ? \"category\" : \"class\");"},
[11]={B,1028,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // If there was a forward declaration with type parameters, check\n  // for consistency.\n  if (PrevIDecl) {\n    if (ObjCTypeParamList *prevTypeParamList = PrevIDecl->getTypeParamList()) {\n      if (typeParamList) {\n      } else {\n        Diag(prevTypeParamList->getLAngleLoc(), diag::note_previous_decl) << ClassName;"},
[11]={C,1028,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // If there was a forward declaration with type parameters, check\n  // for consistency.\n  if (PrevIDecl) {\n    if (ObjCTypeParamList *prevTypeParamList = PrevIDecl->getTypeParamList()) {\n      if (typeParamList) {\n      } else {\n        Diag(prevTypeParamList->getLAngleLoc(), diag::note_previous_decl) << ClassName;"},
[12]={C,2289,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  unsigned NoteID = TC.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"},
[12]={D,2289,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  unsigned NoteID = TC.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"},
[13]={C,2506,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n  if (S && Out) {\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      unsigned NoteID = Corrected.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"},
[13]={D,2506,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n  if (S && Out) {\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      unsigned NoteID = Corrected.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"},
[14]={C,18118,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    if (DeclRef) {\n      Diag(Decl->getLocation(), diag::note_previous_decl) << Decl->getName();"},
[14]={D,18118,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    if (DeclRef) {\n      Diag(Decl->getLocation(), diag::note_previous_decl) << Decl->getName();"},
[15]={C,19175,"// 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  // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n  if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n      S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[15]={D,19175,"// 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  // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n  if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n      S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[16]={C,19188,"// 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  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[16]={D,19188,"// 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  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[17]={C,19197,"// 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(Var->getLocation(), diag::note_previous_decl) << Var;"},
[17]={D,19197,"// 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(Var->getLocation(), diag::note_previous_decl) << Var;"},
[18]={C,19242,"// 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  // Blocks are not allowed to capture arrays, excepting OpenCL.\n  // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n  // (decayed to pointers).\n  if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n      S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[18]={D,19242,"// 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  // Blocks are not allowed to capture arrays, excepting OpenCL.\n  // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n  // (decayed to pointers).\n  if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n      S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[19]={C,19260,"// 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(Var->getLocation(), diag::note_previous_decl) << Var;"},
[19]={D,19260,"// 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(Var->getLocation(), diag::note_previous_decl) << Var;"},
[20]={C,19407,"/// 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(Var->getLocation(), diag::note_previous_decl) << Var->getDeclName();"},
[20]={D,19407,"/// 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(Var->getLocation(), diag::note_previous_decl) << Var->getDeclName();"},
[21]={C,19667,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    // If we are instantiating a generic lambda call operator body,\n    // we do not want to capture new variables.  What was captured\n    // during either a lambdas transformation or initial parsing\n    // should be used.\n    if (isGenericLambdaCallOperatorSpecialization(DC)) {\n      if (BuildAndDiagnose) {\n        if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n          Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[21]={D,19667,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    // If we are instantiating a generic lambda call operator body,\n    // we do not want to capture new variables.  What was captured\n    // during either a lambdas transformation or initial parsing\n    // should be used.\n    if (isGenericLambdaCallOperatorSpecialization(DC)) {\n      if (BuildAndDiagnose) {\n        if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n          Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[22]={C,19749,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n      // No capture-default, and this is not an explicit capture\n      // so cannot capture this variable.\n      if (BuildAndDiagnose) {\n        Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[22]={D,19749,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n      // No capture-default, and this is not an explicit capture\n      // so cannot capture this variable.\n      if (BuildAndDiagnose) {\n        Diag(Var->getLocation(), diag::note_previous_decl) << Var;"},
[23]={Ub,2928,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n    // C++1z [expr.new]p23:\n    //  If the lookup finds a usual deallocation function (3.7.4.2)\n    //  with a parameter of type std::size_t and that function, considered\n    //  as a placement deallocation function, would have been\n    //  selected as a match for the allocation function, the program\n    //  is ill-formed.\n    if (getLangOpts().CPlusPlus11 && isPlacementNew && isNonPlacementDeallocationFunction(*this, OperatorDelete)) {\n      if (IsSizedDelete) {\n        if (!OperatorDelete->isImplicit())\n          Diag(OperatorDelete->getLocation(), diag::note_previous_decl) << DeleteName;"},
[23]={dc,2928,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n    // C++1z [expr.new]p23:\n    //  If the lookup finds a usual deallocation function (3.7.4.2)\n    //  with a parameter of type std::size_t and that function, considered\n    //  as a placement deallocation function, would have been\n    //  selected as a match for the allocation function, the program\n    //  is ill-formed.\n    if (getLangOpts().CPlusPlus11 && isPlacementNew && isNonPlacementDeallocationFunction(*this, OperatorDelete)) {\n      if (IsSizedDelete) {\n        if (!OperatorDelete->isImplicit())\n          Diag(OperatorDelete->getLocation(), diag::note_previous_decl) << DeleteName;"},
[24]={U,9888,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ConstructorOverloadFailed: {\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n          S.Diag(BaseDecl->getLocation(), diag::note_previous_decl) << S.Context.getTagDeclType(BaseDecl);"},
[24]={W,9888,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ConstructorOverloadFailed: {\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n          S.Diag(BaseDecl->getLocation(), diag::note_previous_decl) << S.Context.getTagDeclType(BaseDecl);"},
[25]={U,9903,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ConstructorOverloadFailed: {\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        } else {\n          if (const RecordType *Record = Entity.getType()->getAs<RecordType>())\n            S.Diag(Record->getDecl()->getLocation(), diag::note_previous_decl) << S.Context.getTagDeclType(Record->getDecl());"},
[25]={W,9903,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ConstructorOverloadFailed: {\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        } else {\n          if (const RecordType *Record = Entity.getType()->getAs<RecordType>())\n            S.Diag(Record->getDecl()->getLocation(), diag::note_previous_decl) << S.Context.getTagDeclType(Record->getDecl());"},
[26]={U,9962,"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      S.Diag(Entity.getDecl()->getLocation(), diag::note_previous_decl) << Entity.getName();"},
[26]={W,9962,"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      S.Diag(Entity.getDecl()->getLocation(), diag::note_previous_decl) << Entity.getName();"},
[27]={"clang/lib/Sema/SemaLambda.cpp",1187,"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(Var->getLocation(), diag::note_previous_decl) << C->Id;"},
[27]={"clang/lib/Sema/SemaLambda.cpp",1187,"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(Var->getLocation(), diag::note_previous_decl) << C->Id;"},
[28]={"clang/lib/Sema/SemaLookup.cpp",5635,"void Sema::diagnoseTypo(const TypoCorrection &Correction, const PartialDiagnostic &TypoDiag, bool ErrorRecovery) { diagnoseTypo(Correction, TypoDiag, PDiag(diag::note_previous_decl), ErrorRecovery); }"},
[28]={"clang/lib/Sema/SemaLookup.cpp",5635,"void Sema::diagnoseTypo(const TypoCorrection &Correction, const PartialDiagnostic &TypoDiag, bool ErrorRecovery) { diagnoseTypo(Correction, TypoDiag, PDiag(diag::note_previous_decl), ErrorRecovery); }"},
[29]={w,1720,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n  if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n    if (!ListItemNotVar && D) {\n      SemaRef.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[29]={x,1720,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n  if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n    if (!ListItemNotVar && D) {\n      SemaRef.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[30]={w,3073,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Syntax, C/C++]\n  //  Variables must be file-scope, namespace-scope, or static block-scope.\n  if (Kind == OMPD_threadprivate && !VD->hasGlobalStorage()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[30]={x,3073,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Syntax, C/C++]\n  //  Variables must be file-scope, namespace-scope, or static block-scope.\n  if (Kind == OMPD_threadprivate && !VD->hasGlobalStorage()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[31]={w,3090,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.2]\n  //  A threadprivate directive for file-scope variables must appear outside\n  //  any definition or declaration.\n  if (CanonicalVD->getDeclContext()->isTranslationUnit() && !getCurLexicalContext()->isTranslationUnit()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[31]={x,3090,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.2]\n  //  A threadprivate directive for file-scope variables must appear outside\n  //  any definition or declaration.\n  if (CanonicalVD->getDeclContext()->isTranslationUnit() && !getCurLexicalContext()->isTranslationUnit()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[32]={w,3105,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.3]\n  //  A threadprivate directive for static class member variables must appear\n  //  in the class definition, in the same scope in which the member\n  //  variables are declared.\n  if (CanonicalVD->isStaticDataMember() && !CanonicalVD->getDeclContext()->Equals(getCurLexicalContext())) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[32]={x,3105,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.3]\n  //  A threadprivate directive for static class member variables must appear\n  //  in the class definition, in the same scope in which the member\n  //  variables are declared.\n  if (CanonicalVD->isStaticDataMember() && !CanonicalVD->getDeclContext()->Equals(getCurLexicalContext())) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[33]={w,3121,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.4]\n  //  A threadprivate directive for namespace-scope variables must appear\n  //  outside any definition or declaration other than the namespace\n  //  definition itself.\n  if (CanonicalVD->getDeclContext()->isNamespace() && (!getCurLexicalContext()->isFileContext() || !getCurLexicalContext()->Encloses(CanonicalVD->getDeclContext()))) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[33]={x,3121,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.4]\n  //  A threadprivate directive for namespace-scope variables must appear\n  //  outside any definition or declaration other than the namespace\n  //  definition itself.\n  if (CanonicalVD->getDeclContext()->isNamespace() && (!getCurLexicalContext()->isFileContext() || !getCurLexicalContext()->Encloses(CanonicalVD->getDeclContext()))) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[34]={w,3135,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.6]\n  //  A threadprivate directive for static block-scope variables must appear\n  //  in the scope of the variable and not in a nested scope.\n  if (CanonicalVD->isLocalVarDecl() && CurScope && !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[34]={x,3135,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.6]\n  //  A threadprivate directive for static block-scope variables must appear\n  //  in the scope of the variable and not in a nested scope.\n  if (CanonicalVD->isLocalVarDecl() && CurScope && !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[35]={w,3231,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.2, Restrictions, C/C++, p.10]\n    //  A threadprivate variable must not have a reference type.\n    if (VD->getType()->isReferenceType()) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[35]={x,3231,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.2, Restrictions, C/C++, p.10]\n    //  A threadprivate variable must not have a reference type.\n    if (VD->getType()->isReferenceType()) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[36]={w,3249,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // Check if this is a TLS variable. If TLS is not being supported, produce\n    // the corresponding diagnostic.\n    if ((VD->getTLSKind() != VarDecl::TLS_None && !(VD->hasAttr<OMPThreadPrivateDeclAttr>() && getLangOpts().OpenMPUseTLS && getASTContext().getTargetInfo().isTLSSupported())) || (VD->getStorageClass() == SC_Register && VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[36]={x,3249,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // Check if this is a TLS variable. If TLS is not being supported, produce\n    // the corresponding diagnostic.\n    if ((VD->getTLSKind() != VarDecl::TLS_None && !(VD->hasAttr<OMPThreadPrivateDeclAttr>() && getLangOpts().OpenMPUseTLS && getASTContext().getTargetInfo().isTLSSupported())) || (VD->getStorageClass() == SC_Register && VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[37]={w,3434,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP, 2.11.3 allocate Directive, Restrictions, C / C++\n    // If a list item has a static storage type, the allocator expression in the\n    // allocator clause must be a constant expression that evaluates to one of\n    // the predefined memory allocator values.\n    if (Allocator && VD->hasGlobalStorage()) {\n      if (AllocatorKind == OMPAllocateDeclAttr::OMPUserDefinedMemAlloc) {\n        Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[37]={x,3434,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP, 2.11.3 allocate Directive, Restrictions, C / C++\n    // If a list item has a static storage type, the allocator expression in the\n    // allocator clause must be a constant expression that evaluates to one of\n    // the predefined memory allocator values.\n    if (Allocator && VD->hasGlobalStorage()) {\n      if (AllocatorKind == OMPAllocateDeclAttr::OMPUserDefinedMemAlloc) {\n        Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},
[38]={w,6922,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n            Diag(PVD->getLocation(), diag::note_previous_decl) << PVD;"},
[38]={x,6922,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n            Diag(PVD->getLocation(), diag::note_previous_decl) << PVD;"},
[39]={w,8074,"/// Checker for the non-rectangular loops. Checks if the initializer or\n/// condition expression references loop counter variable.\nclass LoopCounterRefChecker final : public ConstStmtVisitor<LoopCounterRefChecker, bool> {\n  bool checkDecl(const Expr *E, const ValueDecl *VD) {\n    // OpenMP, 2.9.1 Canonical Loop Form, Restrictions.\n    // The type of the loop iterator on which we depend may not have a random\n    // access iterator type.\n    if (Data.first && VD->getType()->isRecordType()) {\n      SemaRef.Diag(VD->getLocation(), diag::note_previous_decl) << VD;"},
[39]={x,8074,"/// Checker for the non-rectangular loops. Checks if the initializer or\n/// condition expression references loop counter variable.\nclass LoopCounterRefChecker final : public ConstStmtVisitor<LoopCounterRefChecker, bool> {\n  bool checkDecl(const Expr *E, const ValueDecl *VD) {\n    // OpenMP, 2.9.1 Canonical Loop Form, Restrictions.\n    // The type of the loop iterator on which we depend may not have a random\n    // access iterator type.\n    if (Data.first && VD->getType()->isRecordType()) {\n      SemaRef.Diag(VD->getLocation(), diag::note_previous_decl) << VD;"},
[40]={w,18117,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[40]={x,18117,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[41]={w,18390,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[41]={x,18390,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[42]={w,18547,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0 [2.19.4.5 lastprivate Clause, Restrictions]\n    // A list item that appears in a lastprivate clause with the conditional\n    // modifier must be a scalar variable.\n    if (LPKind == OMPC_LASTPRIVATE_conditional && !Type->isScalarType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[42]={x,18547,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0 [2.19.4.5 lastprivate Clause, Restrictions]\n    // A list item that appears in a lastprivate clause with the conditional\n    // modifier must be a scalar variable.\n    if (LPKind == OMPC_LASTPRIVATE_conditional && !Type->isScalarType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[43]={w,19453,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_GT || BOK == BO_LT) && !(Type->isScalarType() || (S.getLangOpts().CPlusPlus && Type->isArithmeticType()))) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[43]={x,19453,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_GT || BOK == BO_LT) && !(Type->isScalarType() || (S.getLangOpts().CPlusPlus && Type->isArithmeticType()))) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[44]={w,19466,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_OrAssign || BOK == BO_AndAssign || BOK == BO_XorAssign) && !S.getLangOpts().CPlusPlus && Type->isFloatingType()) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[44]={x,19466,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_OrAssign || BOK == BO_AndAssign || BOK == BO_XorAssign) && !S.getLangOpts().CPlusPlus && Type->isFloatingType()) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[45]={w,19664,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n      S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[45]={x,19664,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n      S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[46]={w,20012,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n    if (D) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[46]={x,20012,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n    if (D) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[47]={w,20289,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[47]={x,20289,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[48]={w,20491,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[48]={x,20491,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},
[49]={D,5654,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  if (ICS.isBad()) {\n    case BadConversionSequence::bad_qualifiers: {\n      if (CVR) {\n        Diag(Method->getLocation(), diag::note_previous_decl) << Method->getDeclName();"},
[49]={E,5654,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  if (ICS.isBad()) {\n    case BadConversionSequence::bad_qualifiers: {\n      if (CVR) {\n        Diag(Method->getLocation(), diag::note_previous_decl) << Method->getDeclName();"},
[50]={D,5668,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  if (ICS.isBad()) {\n    case BadConversionSequence::rvalue_ref_to_lvalue: {\n      Diag(Method->getLocation(), diag::note_previous_decl) << Method->getDeclName();"},
[50]={E,5668,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  if (ICS.isBad()) {\n    case BadConversionSequence::rvalue_ref_to_lvalue: {\n      Diag(Method->getLocation(), diag::note_previous_decl) << Method->getDeclName();"},
[51]={D,14924,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      Diag(MD->getBeginLoc(), diag::note_previous_decl) << MD->getDeclName();"},
[51]={E,14924,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      Diag(MD->getBeginLoc(), diag::note_previous_decl) << MD->getDeclName();"},
[52]={hb,932,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    if (!anyPackExpansions) {\n      if (i < numTypeParams) {\n      } else {\n        S.Diag(objcClass->getLocation(), diag::note_previous_decl) << objcClass;"},
[52]={cb,932,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    if (!anyPackExpansions) {\n      if (i < numTypeParams) {\n      } else {\n        S.Diag(objcClass->getLocation(), diag::note_previous_decl) << objcClass;"},
[53]={hb,1031,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // Make sure we didn\'t have the wrong number of arguments.\n  if (!anyPackExpansions && finalTypeArgs.size() != numTypeParams) {\n    S.Diag(objcClass->getLocation(), diag::note_previous_decl) << objcClass;"}
[53]={cb,1031,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // Make sure we didn\'t have the wrong number of arguments.\n  if (!anyPackExpansions && finalTypeArgs.size() != numTypeParams) {\n    S.Diag(objcClass->getLocation(), diag::note_previous_decl) << objcClass;"}
},
[k]={
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:16:22: note: \'p\' declared here"}
}
}
},
},
["note_previous_declaration"]={
["note_previous_declaration"]={
[c]="previous declaration is here",
[f]="previous declaration is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous declaration is here",
[d]="previous declaration is here",
[b]=m,
[e]=p,
[g]="previous declaration is here",
[a]="previous declaration is here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={
[j]={
[1]={"clang/lib/Sema/SemaCUDA.cpp",926,"void Sema::checkCUDATargetOverload(FunctionDecl *NewFD, const LookupResult &Previous) {\n  for (NamedDecl *OldND : Previous) {\n    // Don\'t allow HD and global functions to overload other functions with the\n    // same signature.  We allow overloading based on CUDA attributes so that\n    // functions can have different implementations on the host and device, but\n    // HD/global functions \"exist\" in some sense on both the host and device, so\n    // should have the same implementation on both sides.\n    if (NewTarget != OldTarget && ((NewTarget == CFT_HostDevice) || (OldTarget == CFT_HostDevice) || (NewTarget == CFT_Global) || (OldTarget == CFT_Global)) &&\n      Diag(OldFD->getLocation(), diag::note_previous_declaration);"},
[1]={"clang/lib/Sema/SemaCUDA.cpp",926,"void Sema::checkCUDATargetOverload(FunctionDecl *NewFD, const LookupResult &Previous) {\n  for (NamedDecl *OldND : Previous) {\n    // Don\'t allow HD and global functions to overload other functions with the\n    // same signature.  We allow overloading based on CUDA attributes so that\n    // functions can have different implementations on the host and device, but\n    // HD/global functions \"exist\" in some sense on both the host and device, so\n    // should have the same implementation on both sides.\n    if (NewTarget != OldTarget && ((NewTarget == CFT_HostDevice) || (OldTarget == CFT_HostDevice) || (NewTarget == CFT_Global) || (OldTarget == CFT_Global)) &&\n      Diag(OldFD->getLocation(), diag::note_previous_declaration);"},
[2]={v,1692,"/// We\'ve determined that \\p New is a redeclaration of \\p Old. Check that they\n/// have compatible owning modules.\nbool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {\n  if (NewIsModuleInterface || OldIsModuleInterface) {\n    Diag(Old->getLocation(), diag::
[2]={w,1692,"/// We\'ve determined that \\p New is a redeclaration of \\p Old. Check that they\n/// have compatible owning modules.\nbool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {\n  if (NewIsModuleInterface || OldIsModuleInterface) {\n    Diag(Old->getLocation(), diag::note_previous_declaration);
}
}
},
},
["note_previous_declaration_as"]={
["note_previous_declaration_as"]={
[c]="previously declared as A here",
[f]="previously declared as A here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously declared as %0 here",
[d]="previously declared as %0 here",
[b]=m,
[e]=p,
[g]="previously declared as (.*?) here",
[a]="previously declared as (.*?) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{v,3447,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (OldParamDT && NewParamDT && OldParamDT->getPointeeType() == NewParamDT->getPointeeType()) {\n    if (!EquivalentArrayTypes(OldParamOT, NewParamOT, S.getASTContext())) {\n      S.Diag(OldParam->getLocation(), diag::note_previous_declaration_as) << OldParamOT;"}}
[j]={{w,3447,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (OldParamDT && NewParamDT && OldParamDT->getPointeeType() == NewParamDT->getPointeeType()) {\n    if (!EquivalentArrayTypes(OldParamOT, NewParamOT, S.getASTContext())) {\n      S.Diag(OldParam->getLocation(), diag::note_previous_declaration_as) << OldParamOT;"}},
[k]={
["clang/test/Sema/array-parameter.cpp"]={"clang/test/Sema/array-parameter.cpp:4:15: note: previously declared as \'int[10]\' here"}
}
},
},
["note_previous_default_assoc"]={
["note_previous_default_assoc"]={
[c]="previous default generic association is here",
[f]="previous default generic association is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous default generic association is here",
[d]="previous default generic association is here",
[b]=m,
[e]=p,
[g]="previous default generic association is here",
[a]="previous default generic association is here",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"91147596414d",1302827748,"C1X: implement generic selections"},
[i]={"91147596414d",1302827748,"C1X: implement generic selections"},
[j]={{qc,3363,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n///    generic-selection:\n///          _Generic ( assignment-expression , generic-assoc-list )\n///    generic-assoc-list:\n///          generic-association\n///          generic-assoc-list , generic-association\n///    generic-association:\n///          type-name : assignment-expression\n///          default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n///  generic-selection:\n///          _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n  do {\n    if (Tok.is(tok::kw_default)) {\n      // C11 6.5.1.1p2 \"A generic selection shall have no more than one default\n      // generic association.\"\n      if (!DefaultLoc.isInvalid()) {\n        Diag(DefaultLoc, diag::note_previous_default_assoc);"}}
[j]={{Bc,3363,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n///    generic-selection:\n///          _Generic ( assignment-expression , generic-assoc-list )\n///    generic-assoc-list:\n///          generic-association\n///          generic-assoc-list , generic-association\n///    generic-association:\n///          type-name : assignment-expression\n///          default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n///  generic-selection:\n///          _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n  do {\n    if (Tok.is(tok::kw_default)) {\n      // C11 6.5.1.1p2 \"A generic selection shall have no more than one default\n      // generic association.\"\n      if (!DefaultLoc.isInvalid()) {\n        Diag(DefaultLoc, diag::note_previous_default_assoc);"}},
[k]={
["clang/test/Parser/c1x-generic-selection.c"]={"clang/test/Parser/c1x-generic-selection.c:8:7: note: previous default generic association is here"}
}
},
},
["note_previous_definition"]={
["note_previous_definition"]={
[c]="previous definition is here",
[f]="previous definition is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous definition is here",
[d]="previous definition is here",
[b]=m,
[e]=p,
[g]="previous definition is here",
[a]="previous definition is here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={
[j]={
[1]={nc,4323,"/// GetOrCreateLLVMFunction - If the specified mangled name is not in the\n/// module, create and return an llvm Function with the specified type. If there\n/// is something in the module with the specified name, return it potentially\n/// bitcasted to the right type.\n///\n/// If D is non-null, it specifies a decl that correspond to this.  This is used\n/// to set the attributes on the function when it is first created.\nllvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName, llvm::Type *Ty, GlobalDecl GD, bool ForVTable, bool DontDefer, bool IsThunk, llvm::AttributeList ExtraAttrs, ForDefinition_t IsForDefinition) {\n  if (Entry) {\n    // If there are two attempts to define the same mangled name, issue an\n    // error.\n    if (IsForDefinition && !Entry->isDeclaration()) {\n      // Check that GD is not yet in DiagnosedConflictingDefinitions is required\n      // to make sure that we issue an error only once.\n      if (lookupRepresentativeDecl(MangledName, OtherGD) && (GD.getCanonicalDecl().getDecl() != OtherGD.getCanonicalDecl().getDecl()) && DiagnosedConflictingDefinitions.insert(GD).second) {\n        getDiags().Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition);"},
[1]={Fc,4323,"/// GetOrCreateLLVMFunction - If the specified mangled name is not in the\n/// module, create and return an llvm Function with the specified type. If there\n/// is something in the module with the specified name, return it potentially\n/// bitcasted to the right type.\n///\n/// If D is non-null, it specifies a decl that correspond to this.  This is used\n/// to set the attributes on the function when it is first created.\nllvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName, llvm::Type *Ty, GlobalDecl GD, bool ForVTable, bool DontDefer, bool IsThunk, llvm::AttributeList ExtraAttrs, ForDefinition_t IsForDefinition) {\n  if (Entry) {\n    // If there are two attempts to define the same mangled name, issue an\n    // error.\n    if (IsForDefinition && !Entry->isDeclaration()) {\n      // Check that GD is not yet in DiagnosedConflictingDefinitions is required\n      // to make sure that we issue an error only once.\n      if (lookupRepresentativeDecl(MangledName, OtherGD) && (GD.getCanonicalDecl().getDecl() != OtherGD.getCanonicalDecl().getDecl()) && DiagnosedConflictingDefinitions.insert(GD).second) {\n        getDiags().Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition);"},
[2]={nc,4643,"/// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,\n/// create and return an llvm GlobalVariable with the specified type and address\n/// space. If there is something in the module with the specified name, return\n/// it potentially bitcasted to the right type.\n///\n/// If D is non-null, it specifies a decl that correspond to this.  This is used\n/// to set the attributes on the global when it is first created.\n///\n/// If IsForDefinition is true, it is guaranteed that an actual global with\n/// type Ty will be returned, not conversion of a variable with the same\n/// mangled name but some other type.\nllvm::Constant *CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName, llvm::Type *Ty, LangAS AddrSpace, const VarDecl *D, ForDefinition_t IsForDefinition) {\n  if (Entry) {\n    // If there are two attempts to define the same mangled name, issue an\n    // error.\n    if (IsForDefinition && !Entry->isDeclaration()) {\n      // Check that D is not yet in DiagnosedConflictingDefinitions is required\n      // to make sure that we issue an error only once.\n      if (D && lookupRepresentativeDecl(MangledName, OtherGD) && (D->getCanonicalDecl() != OtherGD.getCanonicalDecl().getDecl()) && (OtherD = dyn_cast<VarDecl>(OtherGD.getDecl())) && OtherD->hasInit() && DiagnosedConflictingDefinitions.insert(D).second) {\n        getDiags().Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition);"},
[2]={Fc,4643,"/// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,\n/// create and return an llvm GlobalVariable with the specified type and address\n/// space. If there is something in the module with the specified name, return\n/// it potentially bitcasted to the right type.\n///\n/// If D is non-null, it specifies a decl that correspond to this.  This is used\n/// to set the attributes on the global when it is first created.\n///\n/// If IsForDefinition is true, it is guaranteed that an actual global with\n/// type Ty will be returned, not conversion of a variable with the same\n/// mangled name but some other type.\nllvm::Constant *CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName, llvm::Type *Ty, LangAS AddrSpace, const VarDecl *D, ForDefinition_t IsForDefinition) {\n  if (Entry) {\n    // If there are two attempts to define the same mangled name, issue an\n    // error.\n    if (IsForDefinition && !Entry->isDeclaration()) {\n      // Check that D is not yet in DiagnosedConflictingDefinitions is required\n      // to make sure that we issue an error only once.\n      if (D && lookupRepresentativeDecl(MangledName, OtherGD) && (D->getCanonicalDecl() != OtherGD.getCanonicalDecl().getDecl()) && (OtherD = dyn_cast<VarDecl>(OtherGD.getDecl())) && OtherD->hasInit() && DiagnosedConflictingDefinitions.insert(D).second) {\n        getDiags().Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition);"},
[3]={nc,5785,"void CodeGenModule::emitIFuncDefinition(GlobalDecl GD) {\n  if (Entry && !Entry->isDeclaration()) {\n    if (lookupRepresentativeDecl(MangledName, OtherGD) && DiagnosedConflictingDefinitions.insert(GD).second) {\n      Diags.Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition);"},
[3]={Fc,5785,"void CodeGenModule::emitIFuncDefinition(GlobalDecl GD) {\n  if (Entry && !Entry->isDeclaration()) {\n    if (lookupRepresentativeDecl(MangledName, OtherGD) && DiagnosedConflictingDefinitions.insert(GD).second) {\n      Diags.Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition);"},
[4]={S,1912,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  if (MissingHeader.FileNameLoc.isValid()) {\n  } else if (ShadowingModule) {\n    Diags.Report(ShadowingModule->DefinitionLoc, diag::note_previous_definition);"},
[4]={S,1912,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  if (MissingHeader.FileNameLoc.isValid()) {\n  } else if (ShadowingModule) {\n    Diags.Report(ShadowingModule->DefinitionLoc, diag::note_previous_definition);"},
[5]={S,2556,"#endif\n  // Determine if we\'re switching to building a new submodule, and which one.\n  // This does not apply for C++20 modules header units.\n  if (SM && !SM->isHeaderUnit()) {\n    if (SM->getTopLevelModule()->ShadowingModule) {\n      Diag(SM->getTopLevelModule()->ShadowingModule->DefinitionLoc, diag::note_previous_definition);"},
[5]={S,2556,"#endif\n  // Determine if we\'re switching to building a new submodule, and which one.\n  // This does not apply for C++20 modules header units.\n  if (SM && !SM->isHeaderUnit()) {\n    if (SM->getTopLevelModule()->ShadowingModule) {\n      Diag(SM->getTopLevelModule()->ShadowingModule->DefinitionLoc, diag::note_previous_definition);"},
[6]={S,3143,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Finally, if this identifier already had a macro defined for it, verify that\n  // the macro bodies are identical, and issue diagnostics if they are not.\n  if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n    // It is very common for system headers to have tons of macro redefinitions\n    // and for warnings to be disabled in system headers.  If this is the case,\n    // then don\'t bother calling MacroInfo::isIdenticalTo.\n    if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n      // Warn if defining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n      // C++ [cpp.predefined]p4, but allow it as an extension.\n      if (isLanguageDefinedBuiltin(SourceMgr, OtherMI, II->getName()))\n      // Macros must be identical.  This means all tokens and whitespace\n      // separation must be the same.  C99 6.10.3p2.\n      else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) {\n        Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition);"},
[6]={S,3143,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Finally, if this identifier already had a macro defined for it, verify that\n  // the macro bodies are identical, and issue diagnostics if they are not.\n  if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n    // It is very common for system headers to have tons of macro redefinitions\n    // and for warnings to be disabled in system headers.  If this is the case,\n    // then don\'t bother calling MacroInfo::isIdenticalTo.\n    if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n      // Warn if defining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n      // C++ [cpp.predefined]p4, but allow it as an extension.\n      if (isLanguageDefinedBuiltin(SourceMgr, OtherMI, II->getName()))\n      // Macros must be identical.  This means all tokens and whitespace\n      // separation must be the same.  C99 6.10.3p2.\n      else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) {\n        Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition);"},
[7]={v,3047,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl
[7]={w,3047,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl
[56]={"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3840,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(PrevDecl->getDefinition()->getLocation(), diag::note_previous_definition);"},
[56]={"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3840,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(PrevDecl->getDefinition()->getLocation(), diag::note_previous_definition);"},
[57]={Qb,9475,"void ASTReader::finishPendingActions() {\n  while (!PendingIdentifierInfos.empty() || !PendingDeducedFunctionTypes.empty() || !PendingDeducedVarTypes.empty() || !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() || !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() || !PendingUpdateRecords.empty() || !PendingObjCExtensionIvarRedeclarations.empty()) {\n    while (!PendingObjCExtensionIvarRedeclarations.empty()) {\n      if (Ctx.IsEquivalent(ExtensionsPair.first, ExtensionsPair.second)) {\n      } else {\n        for (auto IvarPair : DuplicateIvars) {\n          Diag(IvarPair.second->getLocation(), diag::note_previous_definition);"},
[57]={ec,9475,"void ASTReader::finishPendingActions() {\n  while (!PendingIdentifierInfos.empty() || !PendingDeducedFunctionTypes.empty() || !PendingDeducedVarTypes.empty() || !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() || !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() || !PendingUpdateRecords.empty() || !PendingObjCExtensionIvarRedeclarations.empty()) {\n    while (!PendingObjCExtensionIvarRedeclarations.empty()) {\n      if (Ctx.IsEquivalent(ExtensionsPair.first, ExtensionsPair.second)) {\n      } else {\n        for (auto IvarPair : DuplicateIvars) {\n          Diag(IvarPair.second->getLocation(), diag::note_previous_definition);"},
[58]={"clang/lib/Serialization/ASTReaderDecl.cpp",1349,"void ASTDeclReader::VisitObjCIvarDecl(ObjCIvarDecl *IVD) {\n  if (PrevIvar && PrevIvar != IVD) {\n    if (ParentExt && PrevParentExt) {\n    } else if (ParentExt || PrevParentExt) {\n      Reader.Diag(PrevIvar->getLocation(), diag::note_previous_definition);"},
[58]={"clang/lib/Serialization/ASTReaderDecl.cpp",1349,"void ASTDeclReader::VisitObjCIvarDecl(ObjCIvarDecl *IVD) {\n  if (PrevIvar && PrevIvar != IVD) {\n    if (ParentExt && PrevParentExt) {\n    } else if (ParentExt || PrevParentExt) {\n      Reader.Diag(PrevIvar->getLocation(), diag::note_previous_definition);"},
[59]={"clang/lib/Serialization/ASTReaderDecl.cpp",4314,"/// Given an ObjC interface, goes through the modules and links to the\n/// interface all the categories for it.\nclass ObjCCategoriesVisitor {\n  void add(ObjCCategoryDecl *Cat) {\n    // Check for duplicate categories.\n    if (Cat->getDeclName()) {\n      if (Existing && Reader.getOwningModuleFile(Existing) != Reader.getOwningModuleFile(Cat)) {\n        if (!Ctx.IsEquivalent(Cat, Existing)) {\n          Reader.Diag(Existing->getLocation(), diag::note_previous_definition);"}
[59]={"clang/lib/Serialization/ASTReaderDecl.cpp",4314,"/// Given an ObjC interface, goes through the modules and links to the\n/// interface all the categories for it.\nclass ObjCCategoriesVisitor {\n  void add(ObjCCategoryDecl *Cat) {\n    // Check for duplicate categories.\n    if (Cat->getDeclName()) {\n      if (Existing && Reader.getOwningModuleFile(Existing) != Reader.getOwningModuleFile(Cat)) {\n        if (!Ctx.IsEquivalent(Cat, Existing)) {\n          Reader.Diag(Existing->getLocation(), diag::note_previous_definition);"}
},
[k]={
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:5:10: note: previous definition is here","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:7:9: note: previous definition is here","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:10:10: note: previous definition is here","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:12:28: note: previous definition is here","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:15:10: note: previous definition is here","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:17:24: note: previous definition is here"}
}
}
},
},
["note_previous_exception_handler"]={
["note_previous_exception_handler"]={
[c]="for type A",
[f]="for type A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="for type %0",
[d]="for type %0",
[b]=m,
[e]=p,
[g]="for type (.*?)",
[a]="for type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen."},
[i]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen."},
[j]={{O,4546,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n      if (RD->lookupInBases(CTPB, Paths)) {\n        if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n          Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"},{O,4566,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (!R.second) {\n      Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"}}
[j]={{P,4546,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n      if (RD->lookupInBases(CTPB, Paths)) {\n        if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n          Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"},{P,4566,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (!R.second) {\n      Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"}},
[k]={
["clang/test/SemaCXX/unreachable-catch-clauses.cpp"]={"clang/test/SemaCXX/unreachable-catch-clauses.cpp:11:8: note: for type \'BaseEx &\'","clang/test/SemaCXX/unreachable-catch-clauses.cpp:11:8: note: for type \'BaseEx &\'","clang/test/SemaCXX/unreachable-catch-clauses.cpp:12:8: note: for type \'Ex1 &\'"}
}
},
},
["note_previous_explicit_instantiation"]={
["note_previous_explicit_instantiation"]={
[c]="previous explicit instantiation is here",
[f]="previous explicit instantiation is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous explicit instantiation is here",
[d]="previous explicit instantiation is here",
[b]=m,
[e]=p,
[g]="previous explicit instantiation is here",
[a]="previous explicit instantiation is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[j]={{x,9301,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDefinition:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation), diag::note_previous_explicit_instantiation);"}}
[j]={{y,9301,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDefinition:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation), diag::note_previous_explicit_instantiation);"}},
[k]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:308:20: note: previous explicit instantiation is here"}
}
},
},
["note_previous_field_init"]={
["note_previous_field_init"]={
[c]="previous initialization for field A is here",
[f]="previous initialization for field A is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous initialization for field %0 is here",
[d]="previous initialization for field %0 is here",
[b]=m,
[e]=p,
[g]="previous initialization for field (.*?) is here",
[a]="previous initialization for field (.*?) is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[i]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[j]={{U,2855,"/// 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 (D->isFieldDesignator()) {\n    // C++20 [dcl.init.list]p3:\n    //  The ordered identifiers in the designators of the designated-\n    //  initializer-list shall form a subsequence of the ordered identifiers\n    //  in the direct non-static data members of T.\n    //\n    // Note that this is not a condition on forming the aggregate\n    // initialization, only on actually performing initialization,\n    // so it is not checked in VerifyOnly mode.\n    //\n    // FIXME: This is the only reordering diagnostic we produce, and it only\n    // catches cases where we have a top-level field designator that jumps\n    // backwards. This is the only such case that is reachable in an\n    // otherwise-valid C++20 program, so is the only case that\'s required for\n    // conformance, but for consistency, we should diagnose all the other\n    // cases where a designator takes us backwards too.\n    if (IsFirstDesignator && !VerifyOnly && SemaRef.getLangOpts().CPlusPlus && NextField && (*NextField == RD->field_end() || (*NextField)->getFieldIndex() > Field->getFieldIndex() + 1)) {\n      if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n        if (StructuredList && OldIndex <= StructuredList->getNumInits()) {\n          if (Expr *PrevInit = StructuredList->getInit(OldIndex)) {\n            SemaRef.Diag(PrevInit->getBeginLoc(), diag::note_previous_field_init) << PrevField << PrevInit->getSourceRange();"}}
[j]={{W,2855,"/// 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 (D->isFieldDesignator()) {\n    // C++20 [dcl.init.list]p3:\n    //  The ordered identifiers in the designators of the designated-\n    //  initializer-list shall form a subsequence of the ordered identifiers\n    //  in the direct non-static data members of T.\n    //\n    // Note that this is not a condition on forming the aggregate\n    // initialization, only on actually performing initialization,\n    // so it is not checked in VerifyOnly mode.\n    //\n    // FIXME: This is the only reordering diagnostic we produce, and it only\n    // catches cases where we have a top-level field designator that jumps\n    // backwards. This is the only such case that is reachable in an\n    // otherwise-valid C++20 program, so is the only case that\'s required for\n    // conformance, but for consistency, we should diagnose all the other\n    // cases where a designator takes us backwards too.\n    if (IsFirstDesignator && !VerifyOnly && SemaRef.getLangOpts().CPlusPlus && NextField && (*NextField == RD->field_end() || (*NextField)->getFieldIndex() > Field->getFieldIndex() + 1)) {\n      if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n        if (StructuredList && OldIndex <= StructuredList->getNumInits()) {\n          if (Expr *PrevInit = StructuredList->getInit(OldIndex)) {\n            SemaRef.Diag(PrevInit->getBeginLoc(), diag::note_previous_field_init) << PrevField << PrevInit->getSourceRange();"}},
[k]={
["clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:36:8: note: previous initialization for field \'y\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:66:8: note: previous initialization for field \'y\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:109:13: note: previous initialization for field \'y\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:203:7: note: previous initialization for field \'z\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:206:7: note: previous initialization for field \'y\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:209:7: note: previous initialization for field \'b\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:211:10: note: previous initialization for field \'e\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:213:10: note: previous initialization for field \'d\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:215:10: note: previous initialization for field \'c\' is here","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:216:10: note: previous initialization for field \'b\' is here"}
}
},
},
["note_previous_implicit_declaration"]={
["note_previous_implicit_declaration"]={
[c]="previous implicit declaration is here",
[f]="previous implicit declaration is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous implicit declaration is here",
[d]="previous implicit declaration is here",
[b]=m,
[e]=p,
[g]="previous implicit declaration is here",
[a]="previous implicit declaration is here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{v,3475,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    PrevDiag = diag::note_previous_implicit_declaration;"},{y,17814,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {\n    // Don\'t consider the implicit declaration we generate for explicit\n    // specializations. FIXME: Do not generate these implicit declarations.\n    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization || Prev->getPreviousDecl()) && !Prev->isDefined()) {\n      Diag(Prev->getLocation().isInvalid() ? DelLoc : Prev->getLocation(), Prev->isImplicit() ? diag::note_previous_implicit_declaration : diag::note_previous_declaration);"}}
[j]={{w,3475,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    PrevDiag = diag::note_previous_implicit_declaration;"},{z,17814,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {\n    // Don\'t consider the implicit declaration we generate for explicit\n    // specializations. FIXME: Do not generate these implicit declarations.\n    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization || Prev->getPreviousDecl()) && !Prev->isDefined()) {\n      Diag(Prev->getLocation().isInvalid() ? DelLoc : Prev->getLocation(), Prev->isImplicit() ? diag::note_previous_implicit_declaration : diag::note_previous_declaration);"}},
[k]={
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: note: previous implicit declaration is here"}
}
},
},
["note_previous_initializer"]={
["note_previous_initializer"]={
[c]="previous initialization ...is here...",
[f]="previous initialization ...is here...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous initialization %select{|with side effects }0is here%select{| (side effects will not occur at run time)}0",
[d]="previous initialization %select{|with side effects }0is here%select{| (side effects will not occur at run time)}0",
[b]=m,
[e]=p,
[g]="previous initialization (?:|with side effects )is here(?:| \\(side effects will not occur at run time\\))",
[a]="previous initialization (?:|with side effects )is here(?:| \\(side effects will not occur at run time\\))",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{v,5485,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  S.Diag(findDefaultInitializer(Parent), diag::note_previous_initializer) << 0;"},{v,13252,"/// 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 (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(VDecl->getCanonicalDecl()->getInit()->getExprLoc(), diag::note_previous_initializer) << 0;"},{y,5644,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer) << 0 << PrevInit->getSourceRange();"},{y,5668,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      if (En.first && En.first != Child) {\n        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer) << 0 << En.second->getSourceRange();"},{U,460,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    if (!VerifyOnly) {\n      SemaRef.Diag(OldInit->getBeginLoc(), diag::note_previous_initializer) << (OldInit->HasSideEffects(SemaRef.Context) && FullyOverwritten) << OldInit->getSourceRange();"}}
[j]={{w,5485,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  S.Diag(findDefaultInitializer(Parent), diag::note_previous_initializer) << 0;"},{w,13252,"/// 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 (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(VDecl->getCanonicalDecl()->getInit()->getExprLoc(), diag::note_previous_initializer) << 0;"},{z,5644,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer) << 0 << PrevInit->getSourceRange();"},{z,5668,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      if (En.first && En.first != Child) {\n        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer) << 0 << En.second->getSourceRange();"},{W,460,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    if (!VerifyOnly) {\n      SemaRef.Diag(OldInit->getBeginLoc(), diag::note_previous_initializer) << (OldInit->HasSideEffects(SemaRef.Context) && FullyOverwritten) << OldInit->getSourceRange();"}},
[k]={
["clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp"]={"clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:19:7: note: previous initialization is here","clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:25:15: note: previous initialization is here"}
}
},
},
["note_previous_ms_inheritance"]={
["note_previous_ms_inheritance"]={
[c]="previous inheritance model specified here",
[f]="previous inheritance model specified here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous inheritance model specified here",
[d]="previous inheritance model specified here",
[b]=m,
[e]=p,
[g]="previous inheritance model specified here",
[a]="previous inheritance model specified here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"},
[i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"},
[j]={{u,8070,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_ms_inheritance);"}}
[j]={{v,8070,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_ms_inheritance);"}},
[k]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:299:8: note: previous inheritance model specified here"}
}
},
},
["note_previous_namespace_alias"]={
["note_previous_namespace_alias"]={
[c]="previously defined as an alias for A",
[f]="previously defined as an alias for A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previously defined as an alias for %0",
[d]="previously defined as an alias for %0",
[b]=m,
[e]=p,
[g]="previously defined as an alias for (.*?)",
[a]="previously defined as an alias for (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[j]={{y,13437,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      } else if (isVisible(PrevDecl)) {\n        Diag(AD->getLocation(), diag::note_previous_namespace_alias) << AD->getNamespace();"}}
[j]={{z,13437,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      } else if (isVisible(PrevDecl)) {\n        Diag(AD->getLocation(), diag::note_previous_namespace_alias) << AD->getNamespace();"}},
[k]={
["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:41:13: note: previously defined as an alias for \'A1\'"}
}
},
},
["note_previous_statement"]={
["note_previous_statement"]={
[c]="previous statement is here",
[f]="previous statement is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous statement is here",
[d]="previous statement is here",
[b]=m,
[e]=p,
[g]="previous statement is here",
[a]="previous statement is here",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[j]={{"clang/lib/Parse/ParseStmt.cpp",1443,"struct MisleadingIndentationChecker {\n  void Check() {\n    if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != SM.getPresumedLineNumber(Tok.getLocation()) && (Tok.isNot(tok::identifier) || P.getPreprocessor().LookAhead(0).isNot(tok::colon))) {\n      P.Diag(StmtLoc, diag::note_previous_statement);"}}
[j]={{"clang/lib/Parse/ParseStmt.cpp",1443,"struct MisleadingIndentationChecker {\n  void Check() {\n    if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != SM.getPresumedLineNumber(Tok.getLocation()) && (Tok.isNot(tok::identifier) || P.getPreprocessor().LookAhead(0).isNot(tok::colon))) {\n      P.Diag(StmtLoc, diag::note_previous_statement);"}},
[k]={
["clang/test/Parser/warn-misleading-indentation.cpp"]={"clang/test/Parser/warn-misleading-indentation.cpp:13:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:24:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:37:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:50:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:64:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:89:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:100:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:128:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:153:3: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:175:17: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:220:5: note: previous statement is here","clang/test/Parser/warn-misleading-indentation.cpp:243:2: note: previous statement is here"}
}
},
},
["note_previous_template_specialization"]={
["note_previous_template_specialization"]={
[c]="previous template specialization is here",
[f]="previous template specialization is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous template specialization is here",
[d]="previous template specialization is here",
[b]=m,
[e]=p,
[g]="previous template specialization is here",
[a]="previous template specialization is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[j]={{x,9266,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDefinition:\n    case TSK_ExplicitSpecialization:\n      Diag(PrevDecl->getLocation(), diag::note_previous_template_specialization);"}}
[j]={{y,9266,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDefinition:\n    case TSK_ExplicitSpecialization:\n      Diag(PrevDecl->getLocation(), diag::note_previous_template_specialization);"}},
[k]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:226:23: note: previous template specialization is here","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:255:23: note: previous template specialization is here","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:270:23: note: previous template specialization is here","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:307:23: note: previous template specialization is here","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:314:23: note: previous template specialization is here"}
}
},
},
["note_previous_use"]={
["note_previous_use"]={
[c]="previous use is here",
[f]="previous use is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous use is here",
[d]="previous use is here",
[b]=m,
[e]=p,
[g]="previous use is here",
[a]="previous use is here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{v,16676,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    Diag(Redecl->getLocation(), diag::note_previous_use);"},{v,17247,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // Make sure that this wasn\'t declared as an enum and now used as a\n        // struct or something similar.\n        if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n          Diag(PrevTagDecl->getLocation(), diag::note_previous_use);"},{E,1564,"/// 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) {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{E,1603,"/// 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) {\n  } else {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{x,2009,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n      Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);"},{x,4305,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  // Check the tag kind\n  if (const RecordType *RT = Result->getAs<RecordType>()) {\n    if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition, TagLoc, Id)) {\n      Diag(D->getLocation(), diag::note_previous_use);"},{x,8719,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{x,9964,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TD->getLocation(), diag::note_previous_use);"},{x,9976,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, /*isDefinition*/ false, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{gb,1687,"QualType TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc, ElaboratedTypeKeyword Keyword, NestedNameSpecifierLoc QualifierLoc, QualType T) {\n  if (const TagType *TT = T->getAs<TagType>()) {\n    // TODO: should we even warn on struct/class mismatches for this?  Seems\n    // like it\'s likely to produce a lot of spurious errors.\n    if (Id && Keyword != ETK_None && Keyword != ETK_Typename) {\n      if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/ false, TagLocation, Id)) {\n        SemaRef.Diag(TD->getLocation(), diag::note_previous_use);"}}
[j]={{w,16676,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    Diag(Redecl->getLocation(), diag::note_previous_use);"},{w,17247,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // Make sure that this wasn\'t declared as an enum and now used as a\n        // struct or something similar.\n        if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n          Diag(PrevTagDecl->getLocation(), diag::note_previous_use);"},{G,1564,"/// 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) {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{G,1603,"/// 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) {\n  } else {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{y,2009,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n      Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);"},{y,4305,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  // Check the tag kind\n  if (const RecordType *RT = Result->getAs<RecordType>()) {\n    if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition, TagLoc, Id)) {\n      Diag(D->getLocation(), diag::note_previous_use);"},{y,8719,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{y,9964,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TD->getLocation(), diag::note_previous_use);"},{y,9976,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, /*isDefinition*/ false, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{eb,1687,"QualType TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc, ElaboratedTypeKeyword Keyword, NestedNameSpecifierLoc QualifierLoc, QualType T) {\n  if (const TagType *TT = T->getAs<TagType>()) {\n    // TODO: should we even warn on struct/class mismatches for this?  Seems\n    // like it\'s likely to produce a lot of spurious errors.\n    if (Id && Keyword != ETK_None && Keyword != ETK_Typename) {\n      if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/ false, TagLocation, Id)) {\n        SemaRef.Diag(TD->getLocation(), diag::note_previous_use);"}},
[k]={
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:14:13: note: previous use is here"}
}
},
},
["note_previous_uuid"]={
["note_previous_uuid"]={
[c]="previous uuid specified here",
[f]="previous uuid specified here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous uuid specified here",
[d]="previous uuid specified here",
[b]=m,
[e]=p,
[g]="previous uuid specified here",
[a]="previous uuid specified here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids."},
[i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids."},
[j]={{u,6979,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    if (!UA->getGuid().empty()) {\n      Diag(CI.getLoc(), diag::note_previous_uuid);"}}
[j]={{v,6979,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    if (!UA->getGuid().empty()) {\n      Diag(CI.getLoc(), diag::note_previous_uuid);"}},
[k]={
["clang/test/SemaCXX/ms-uuid.cpp"]={"clang/test/SemaCXX/ms-uuid.cpp:39:18: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:39:18: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:46:18: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:58:2: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:58:2: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:68:18: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:73:2: note: previous uuid specified here","clang/test/SemaCXX/ms-uuid.cpp:81:2: note: previous uuid specified here"}
}
},
},
["note_printf_c_str"]={
["note_printf_c_str"]={
[c]="did you mean to call the A method?",
[f]="did you mean to call the A method?",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="did you mean to call the %0 method?",
[d]="did you mean to call the %0 method?",
[b]=m,
[e]=p,
[g]="did you mean to call the (.*?) method\\?",
[a]="did you mean to call the (.*?) method\\?",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function"},
[i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function"},
[j]={{F,10730,"// Check if a (w)string was passed when a (w)char* was needed, and offer a\n// better diagnostic if so. AT is assumed to be valid.\n// Returns true when a c_str() conversion method is found.\nbool CheckPrintfHandler::checkForCStrMembers(const analyze_printf::ArgType &AT, const Expr *E) {\n  for (MethodSet::iterator MI = Results.begin(), ME = Results.end(); MI != ME; ++MI) {\n    if (Method->getMinRequiredArguments() == 0 && AT.matchesType(S.Context, Method->getReturnType())) {\n      S.Diag(E->getBeginLoc(), diag::note_printf_c_str) << \"c_str()\" << FixItHint::CreateInsertion(EndLoc, \".c_str()\");"}}
[j]={{F,10730,"// Check if a (w)string was passed when a (w)char* was needed, and offer a\n// better diagnostic if so. AT is assumed to be valid.\n// Returns true when a c_str() conversion method is found.\nbool CheckPrintfHandler::checkForCStrMembers(const analyze_printf::ArgType &AT, const Expr *E) {\n  for (MethodSet::iterator MI = Results.begin(), ME = Results.end(); MI != ME; ++MI) {\n    if (Method->getMinRequiredArguments() == 0 && AT.matchesType(S.Context, Method->getReturnType())) {\n      S.Diag(E->getBeginLoc(), diag::note_printf_c_str) << \"c_str()\" << FixItHint::CreateInsertion(EndLoc, \".c_str()\");"}},
[k]={
["clang/test/SemaCXX/vararg-class.cpp"]={"clang/test/SemaCXX/vararg-class.cpp:39:11: note: did you mean to call the c_str() method?"}
}
},
},
["note_prior_template_arg_substitution"]={
["note_prior_template_arg_substitution"]={
[c]="while substituting prior template arguments into ... template parameterA B",
[f]="while substituting prior template arguments into ... template parameterA B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="while substituting prior template arguments into %select{non-type|template}0 template parameter%1 %2",
[d]="while substituting prior template arguments into %select{non-type|template}0 template parameter%1 %2",
[b]=m,
[e]=p,
[g]="while substituting prior template arguments into (?:non\\-type|template) template parameter(.*?) (.*?)",
[a]="while substituting prior template arguments into (?:non\\-type|template) template parameter(.*?) (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e62e6a0191d2",1257966828,"Before checking a template template argument against its corresponding"},
[i]={"e62e6a0191d2",1257966828,"Before checking a template template argument against its corresponding"},
[j]={{gb,897,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::PriorTemplateArgumentSubstitution: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_prior_template_arg_substitution) << isa<TemplateTemplateParmDecl>(Parm) << Name << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[j]={{eb,897,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::PriorTemplateArgumentSubstitution: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_prior_template_arg_substitution) << isa<TemplateTemplateParmDecl>(Parm) << Name << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}},
[k]={
["clang/test/SemaTemplate/instantiate-template-template-parm.cpp"]={"clang/test/SemaTemplate/instantiate-template-template-parm.cpp:31:1: note: while substituting prior template arguments into template template parameter \'X\' [with T = float]"}
}
},
},
["note_private_extern"]={
["note_private_extern"]={
[c]="use __attribute__((visibility(\"hidden\"))) attribute instead",
[f]="use __attribute__((visibility(\"hidden\"))) attribute instead",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use __attribute__((visibility(\"hidden\"))) attribute instead",
[d]="use __attribute__((visibility(\"hidden\"))) attribute instead",
[b]=m,
[e]=p,
[g]="use __attribute__\\(\\(visibility\\(\"hidden\"\\)\\)\\) attribute instead",
[a]="use __attribute__\\(\\(visibility\\(\"hidden\"\\)\\)\\) attribute instead",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f85f33863455",1345239895,"c: privide deprecated warning when __private_extern__ storage"},
[i]={"f85f33863455",1345239895,"c: privide deprecated warning when __private_extern__ storage"},
[j]={{v,13782,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && !Var->isInvalidDecl() && Var->getStorageClass() == SC_PrivateExtern) {\n        Diag(Var->getLocation(), diag::note_private_extern);"}}
[j]={{w,13782,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && !Var->isInvalidDecl() && Var->getStorageClass() == SC_PrivateExtern) {\n        Diag(Var->getLocation(), diag::note_private_extern);"}},
[k]={
["clang/test/Sema/tentative-decls.c"]={"clang/test/Sema/tentative-decls.c:36:24: note: use __attribute__((visibility(\"hidden\"))) attribute instead"}
}
},
},
["note_private_module_fragment"]={
["note_private_module_fragment"]={
[c]="private module fragment begins here",
[f]="private module fragment begins here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="private module fragment begins here",
[d]="private module fragment begins here",
[b]=m,
[e]=p,
[g]="private module fragment begins here",
[a]="private module fragment begins here",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[j]={{yc,1274,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // C++ standard modules. Diagnose cases where a function is declared inline\n  // in the module purview but has no definition before the end of the TU or\n  // the start of a Private Module Fragment (if one is present).\n  if (!PendingInlineFuncDecls.empty()) {\n    for (auto *D : PendingInlineFuncDecls) {\n      if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n        // If we have a PMF it should be at the end of the ModuleScopes.\n        if (DefInPMF && ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n          Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"},{jc,779,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  // C++2a [module.interface]p1:\n  //  An export-declaration shall appear only [...] in the purview of a module\n  //  interface unit. An export-declaration shall not appear directly or\n  //  indirectly within [...] a private-module-fragment.\n  if (!isCurrentModulePurview()) {\n  } else if (!ModuleScopes.back().ModuleInterface) {\n  } else if (ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"}}
[j]={{yc,1274,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // C++ standard modules. Diagnose cases where a function is declared inline\n  // in the module purview but has no definition before the end of the TU or\n  // the start of a Private Module Fragment (if one is present).\n  if (!PendingInlineFuncDecls.empty()) {\n    for (auto *D : PendingInlineFuncDecls) {\n      if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n        // If we have a PMF it should be at the end of the ModuleScopes.\n        if (DefInPMF && ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n          Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"},{gc,779,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  // C++2a [module.interface]p1:\n  //  An export-declaration shall appear only [...] in the purview of a module\n  //  interface unit. An export-declaration shall not appear directly or\n  //  indirectly within [...] a private-module-fragment.\n  if (!isCurrentModulePurview()) {\n  } else if (!ModuleScopes.back().ModuleInterface) {\n  } else if (ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"}},
[k]={
["clang/test/CXX/module/module.interface/p1.cpp"]={"clang/test/CXX/module/module.interface/p1.cpp:36:1: note: private module fragment begins here"}
}
},
},
["note_private_top_level_defined"]={
["note_private_top_level_defined"]={
[c]="module defined here",
[f]="module defined here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="module defined here",
[d]="module defined here",
[b]=m,
[e]=p,
[g]="module defined here",
[a]="module defined here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private"},
[i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private"},
[j]={{gc,2054,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // If the user is requesting Foo.Private and it doesn\'t exist, try to\n    // match Foo_Private and emit a warning asking for the user to write\n    // @import Foo_Private instead. FIXME: remove this when existing clients\n    // migrate off of Foo.Private syntax.\n    if (!Sub && Name == \"Private\" && Module == Module->getTopLevelModule()) {\n      if (Sub) {\n        if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {\n          getDiagnostics().Report(Sub->DefinitionLoc, diag::note_private_top_level_defined);"}}
[j]={{rc,2054,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // If the user is requesting Foo.Private and it doesn\'t exist, try to\n    // match Foo_Private and emit a warning asking for the user to write\n    // @import Foo_Private instead. FIXME: remove this when existing clients\n    // migrate off of Foo.Private syntax.\n    if (!Sub && Name == \"Private\" && Module == Module->getTopLevelModule()) {\n      if (Sub) {\n        if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {\n          getDiagnostics().Report(Sub->DefinitionLoc, diag::note_private_top_level_defined);"}},
[k]={
["clang/test/Modules/implicit-map-dot-private.m"]={"clang/test/Modules/Inputs/implicit-private-canonical/A.framework/Modules/module.private.modulemap:1:18: note: module defined here"}
}
},
},
["note_property_attribute"]={
["note_property_attribute"]={
[c]="property A is declared ... here",
[f]="property A is declared ... here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="property %0 is declared %select{deprecated|unavailable|partial}1 here",
[d]="property %0 is declared %select{deprecated|unavailable|partial}1 here",
[b]=m,
[e]=p,
[g]="property (.*?) is declared (?:deprecated|unavailable|partial) here",
[a]="property (.*?) is declared (?:deprecated|unavailable|partial) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"974c94804986",1348260397,"objective-C: when diagnosing deprecated/unavailable usage of"},
[i]={"974c94804986",1348260397,"objective-C: when diagnosing deprecated/unavailable usage of"},
[j]={{Kb,340,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // Matches \'diag::note_property_attribute\' options."},{Kb,543,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"},{Kb,548,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n  } else if (!UnknownObjCClass) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"}}
[j]={{Vb,340,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // Matches \'diag::note_property_attribute\' options."},{Vb,543,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"},{Vb,548,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n  } else if (!UnknownObjCClass) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"}},
[k]={
["clang/test/SemaObjC/property-noninherited-availability-attr.m"]={"clang/test/SemaObjC/property-noninherited-availability-attr.m:13:15: note: property \'myProperty\' is declared deprecated here","clang/test/SemaObjC/property-noninherited-availability-attr.m:8:15: note: property \'myProtocolProperty\' is declared deprecated here"}
}
},
},
["note_property_declare"]={
["note_property_declare"]={
[c]="property declared here",
[f]="property declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="property declared here",
[d]="property declared here",
[b]=m,
[e]=p,
[g]="property declared here",
[a]="property declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"de8db16a7daa",1257201915,"Property declared in continuation class can only be used to"},
[i]={"de8db16a7daa",1257201915,"Property declared in continuation class can only be used to"},
[j]={{B,5370,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n  for (const auto *CurMethod : ImplD->instance_methods()) {\n    // Do not issue this warning if backing ivar is used somewhere and accessor\n    // implementation makes a self call. This is to prevent false positive in\n    // cases where the ivar is accessed by another method that the accessor\n    // delegates to.\n    if (!IV->isReferenced() || !Checker.InvokedSelfMethod) {\n      Diag(PDecl->getLocation(), diag::note_property_declare);"},{E,402,"/// Check for a mismatch in the atomicity of the given properties.\nstatic void checkAtomicPropertyMismatch(Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) {\n  S.Diag(OldProperty->getLocation(), diag::note_property_declare);"},{E,445,"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  // If we found a property in an extension, complain.\n  if (PIDecl && isa<ObjCCategoryDecl>(PIDecl->getDeclContext())) {\n    Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,467,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // A readonly property declared in the primary class can be refined\n    // by adding a readwrite property within an extension.\n    // Anything else is an error.\n    if (!(PIDecl->isReadOnly() && isReadWrite)) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,477,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // Check for consistency of getters.\n    if (PIDecl->getGetterName() != GetterSel) {\n      // If the getter was written explicitly, complain.\n      if (AttributesAsWritten & ObjCPropertyAttribute::kind_getter) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,493,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    if (ExistingOwnership && NewOwnership != ExistingOwnership) {\n      // If the ownership was written explicitly, complain.\n      if (getOwnershipRule(AttributesAsWritten)) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,507,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // If the redeclaration is \'weak\' but the original property is not,\n    if ((Attributes & ObjCPropertyAttribute::kind_weak) && !(PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_weak) && PIDecl->getType()->getAs<ObjCObjectPointerType>() && PIDecl->getType().getObjCLifetime() == Qualifiers::OCL_None) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,545,"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  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,628,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // Class property and instance property can have the same name.\n  if (ObjCPropertyDecl *prevDecl = ObjCPropertyDecl::findPropertyDecl(DC, PropertyId, ObjCPropertyDecl::getQueryKind(isClassProperty))) {\n    Diag(prevDecl->getLocation(), diag::note_property_declare);"},{E,791,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  S.Diag(property->getLocation(), diag::note_property_declare);"},{E,1128,"/// 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 ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1135,"/// 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(property->getLocation(), diag::note_property_declare);"},{E,1219,"/// 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 (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1239,"/// 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        if (PropertyIvarType.isObjCGCStrong()) {\n          Diag(property->getLocation(), diag::note_property_declare);"},{E,1255,"/// 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          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(property->getLocation(), diag::note_property_declare);"},{E,1289,"/// 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 (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1307,"/// 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(property->getLocation(), diag::note_property_declare);"},{E,1328,"/// 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)) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1483,"/// 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 (property->hasAttr<NSReturnsNotRetainedAttr>() && !getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1681,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  // Readonly properties from protocols can be implemented as \"readwrite\"\n  // with a custom setter name.\n  if (Property->getSetterName() != SuperProperty->getSetterName() && !(SuperProperty->isReadOnly() && isa<ObjCProtocolDecl>(SuperProperty->getDeclContext()))) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1686,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (Property->getGetterName() != SuperProperty->getGetterName()) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1704,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {\n    if (!isObjCPointerConversion(RHSType, LHSType, ConvertedType, IncompatibleObjC) || IncompatibleObjC) {\n      Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1937,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(Prop->getLocation(), diag::note_property_declare);"},{E,1955,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{E,1959,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{E,2021,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    S.Diag(Prop->getLocation(), diag::note_property_declare);"},{E,2200,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (GetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{E,2206,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{E,2251,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{Db,677,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop->getLocation(), diag::note_property_declare);"},{Db,678,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop1->getLocation(), diag::note_property_declare);"},{Db,700,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(prop->getLocation(), diag::note_property_declare);"}}
[j]={{C,5370,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n  for (const auto *CurMethod : ImplD->instance_methods()) {\n    // Do not issue this warning if backing ivar is used somewhere and accessor\n    // implementation makes a self call. This is to prevent false positive in\n    // cases where the ivar is accessed by another method that the accessor\n    // delegates to.\n    if (!IV->isReferenced() || !Checker.InvokedSelfMethod) {\n      Diag(PDecl->getLocation(), diag::note_property_declare);"},{G,402,"/// Check for a mismatch in the atomicity of the given properties.\nstatic void checkAtomicPropertyMismatch(Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) {\n  S.Diag(OldProperty->getLocation(), diag::note_property_declare);"},{G,445,"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  // If we found a property in an extension, complain.\n  if (PIDecl && isa<ObjCCategoryDecl>(PIDecl->getDeclContext())) {\n    Diag(PIDecl->getLocation(), diag::note_property_declare);"},{G,467,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // A readonly property declared in the primary class can be refined\n    // by adding a readwrite property within an extension.\n    // Anything else is an error.\n    if (!(PIDecl->isReadOnly() && isReadWrite)) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{G,477,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // Check for consistency of getters.\n    if (PIDecl->getGetterName() != GetterSel) {\n      // If the getter was written explicitly, complain.\n      if (AttributesAsWritten & ObjCPropertyAttribute::kind_getter) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{G,493,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    if (ExistingOwnership && NewOwnership != ExistingOwnership) {\n      // If the ownership was written explicitly, complain.\n      if (getOwnershipRule(AttributesAsWritten)) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{G,507,"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  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // If the redeclaration is \'weak\' but the original property is not,\n    if ((Attributes & ObjCPropertyAttribute::kind_weak) && !(PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_weak) && PIDecl->getType()->getAs<ObjCObjectPointerType>() && PIDecl->getType().getObjCLifetime() == Qualifiers::OCL_None) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{G,545,"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  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{G,628,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // Class property and instance property can have the same name.\n  if (ObjCPropertyDecl *prevDecl = ObjCPropertyDecl::findPropertyDecl(DC, PropertyId, ObjCPropertyDecl::getQueryKind(isClassProperty))) {\n    Diag(prevDecl->getLocation(), diag::note_property_declare);"},{G,791,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  S.Diag(property->getLocation(), diag::note_property_declare);"},{G,1128,"/// 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 ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{G,1135,"/// 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(property->getLocation(), diag::note_property_declare);"},{G,1219,"/// 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 (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{G,1239,"/// 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        if (PropertyIvarType.isObjCGCStrong()) {\n          Diag(property->getLocation(), diag::note_property_declare);"},{G,1255,"/// 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          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(property->getLocation(), diag::note_property_declare);"},{G,1289,"/// 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 (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{G,1307,"/// 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(property->getLocation(), diag::note_property_declare);"},{G,1328,"/// 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)) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{G,1483,"/// 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 (property->hasAttr<NSReturnsNotRetainedAttr>() && !getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{G,1681,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  // Readonly properties from protocols can be implemented as \"readwrite\"\n  // with a custom setter name.\n  if (Property->getSetterName() != SuperProperty->getSetterName() && !(SuperProperty->isReadOnly() && isa<ObjCProtocolDecl>(SuperProperty->getDeclContext()))) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{G,1686,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (Property->getGetterName() != SuperProperty->getGetterName()) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{G,1704,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {\n    if (!isObjCPointerConversion(RHSType, LHSType, ConvertedType, IncompatibleObjC) || IncompatibleObjC) {\n      Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{G,1937,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(Prop->getLocation(), diag::note_property_declare);"},{G,1955,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{G,1959,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{G,2021,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    S.Diag(Prop->getLocation(), diag::note_property_declare);"},{G,2200,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (GetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{G,2206,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{G,2251,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{Lb,677,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop->getLocation(), diag::note_property_declare);"},{Lb,678,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop1->getLocation(), diag::note_property_declare);"},{Lb,700,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(prop->getLocation(), diag::note_property_declare);"}},
[k]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:60:15: note: property declared here"}
}
},
},
["note_property_synthesize"]={
["note_property_synthesize"]={
[c]="property synthesized here",
[f]="property synthesized here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="property synthesized here",
[d]="property synthesized here",
[b]=m,
[e]=p,
[g]="property synthesized here",
[a]="property synthesized here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f5b993f7b149",1355352505,"[objc] For the ARC error that is emitted when a synthesized property implementation"},
[i]={"f5b993f7b149",1355352505,"[objc] For the ARC error that is emitted when a synthesized property implementation"},
[j]={{E,793,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  if (propertyImplLoc.isValid())\n    S.Diag(propertyImplLoc, diag::note_property_synthesize);"},{E,1009,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  if (AtLoc.isValid())\n    S.Diag(AtLoc, diag::note_property_synthesize);"},{E,1921,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCPropertyImplDecl *PID = IMPDecl->FindPropertyImplIvarDecl(Prop->getIdentifier())) {\n      if (PID->getLocation().isValid())\n        Diag(PID->getLocation(), diag::note_property_synthesize);"}}
[j]={{G,793,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  if (propertyImplLoc.isValid())\n    S.Diag(propertyImplLoc, diag::note_property_synthesize);"},{G,1009,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  if (AtLoc.isValid())\n    S.Diag(AtLoc, diag::note_property_synthesize);"},{G,1921,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCPropertyImplDecl *PID = IMPDecl->FindPropertyImplIvarDecl(Prop->getIdentifier())) {\n      if (PID->getLocation().isValid())\n        Diag(PID->getLocation(), diag::note_property_synthesize);"}},
[k]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:30:13: note: property synthesized here","clang/test/SemaObjC/mrc-weak.m:32:13: note: property synthesized here","clang/test/SemaObjC/mrc-weak.m:35:13: note: property synthesized here","clang/test/SemaObjC/mrc-weak.m:39:13: note: property synthesized here"}
}
},
},
["note_protected_by___block"]={
["note_protected_by___block"]={
[c]="jump bypasses setup of __block variable",
[f]="jump bypasses setup of __block variable",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses setup of __block variable",
[d]="jump bypasses setup of __block variable",
[b]=m,
[e]=p,
[g]="jump bypasses setup of __block variable",
[a]="jump bypasses setup of __block variable",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"9662cd322760",1248034631,"enhance the goto checker to reject jumps across __block variable definitions."},
[i]={"9662cd322760",1248034631,"enhance the goto checker to reject jumps across __block variable definitions."},
[j]={{N,152,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<BlocksAttr>())\n      return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}}
[j]={{O,152,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<BlocksAttr>())\n      return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}},
[k]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:195:15: note: jump bypasses setup of __block variable"}
}
},
},
["note_protected_by_cleanup"]={
["note_protected_by_cleanup"]={
[c]="jump bypasses initialization of variable with __attribute__((cleanup))",
[f]="jump bypasses initialization of variable with __attribute__((cleanup))",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of variable with __attribute__((cleanup))",
[d]="jump bypasses initialization of variable with __attribute__((cleanup))",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of variable with __attribute__\\(\\(cleanup\\)\\)",
[a]="jump bypasses initialization of variable with __attribute__\\(\\(cleanup\\)\\)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,156,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<CleanupAttr>())\n      return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}}
[j]={{O,156,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<CleanupAttr>())\n      return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}},
[k]={
["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:22:5: note: jump bypasses initialization of variable with __attribute__((cleanup))"}
}
},
},
["note_protected_by_consteval_if"]={
["note_protected_by_consteval_if"]={
[c]="jump enters controlled statement of consteval if",
[f]="jump enters controlled statement of consteval if",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump enters controlled statement of consteval if",
[d]="jump enters controlled statement of consteval if",
[b]=m,
[e]=p,
[g]="jump enters controlled statement of consteval if",
[a]="jump enters controlled statement of consteval if",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Gb,1615397021,Cb},
[i]={Mb,1615397021,Ib},
[j]={{N,378,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    if (IS->isConstexpr())\n    else if (IS->isConsteval())\n      Diag = diag::note_protected_by_consteval_if;"}}
[j]={{O,378,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    if (IS->isConstexpr())\n    else if (IS->isConsteval())\n      Diag = diag::note_protected_by_consteval_if;"}},
[k]={
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:52:3: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:52:3: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:52:3: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:52:3: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:75:5: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:75:5: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:68:5: note: jump enters controlled statement of consteval if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:68:5: note: jump enters controlled statement of consteval if"}
}
},
},
["note_protected_by_constexpr_if"]={
["note_protected_by_constexpr_if"]={
[c]="jump enters controlled statement of constexpr if",
[f]="jump enters controlled statement of constexpr if",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump enters controlled statement of constexpr if",
[d]="jump enters controlled statement of constexpr if",
[b]=m,
[e]=p,
[g]="jump enters controlled statement of constexpr if",
[a]="jump enters controlled statement of constexpr if",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."},
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."},
[j]={{N,376,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    if (IS->isConstexpr())\n      Diag = diag::note_protected_by_constexpr_if;"}}
[j]={{O,376,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    if (IS->isConstexpr())\n      Diag = diag::note_protected_by_constexpr_if;"}},
[k]={
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:111:7: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:111:7: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:121:7: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:121:7: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:130:5: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:140:5: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:148:5: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:159:5: note: jump enters controlled statement of constexpr if","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:156:5: note: jump enters controlled statement of constexpr if"}
}
},
},
["note_protected_by_cxx_catch"]={
["note_protected_by_cxx_catch"]={
[c]="jump bypasses initialization of catch block",
[f]="jump bypasses initialization of catch block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of catch block",
[d]="jump bypasses initialization of catch block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of catch block",
[a]="jump bypasses initialization of catch block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[j]={{N,419,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    // Jump from the catch into the try is not allowed either.\n    for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}}
[j]={{O,419,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    // Jump from the catch into the try is not allowed either.\n    for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}},
[k]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:55:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:62:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:55:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:62:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:55:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:62:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:55:5: note: jump bypasses initialization of catch block","clang/test/SemaCXX/exceptions.cpp:62:5: note: jump bypasses initialization of catch block"}
}
},
},
["note_protected_by_cxx_try"]={
["note_protected_by_cxx_try"]={
[c]="jump bypasses initialization of try block",
[f]="jump bypasses initialization of try block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of try block",
[d]="jump bypasses initialization of try block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of try block",
[a]="jump bypasses initialization of try block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[j]={{N,407,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}}
[j]={{O,407,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}},
[k]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:48:3: note: jump bypasses initialization of try block","clang/test/SemaCXX/exceptions.cpp:48:3: note: jump bypasses initialization of try block","clang/test/SemaCXX/exceptions.cpp:48:3: note: jump bypasses initialization of try block","clang/test/SemaCXX/exceptions.cpp:48:3: note: jump bypasses initialization of try block"}
}
},
},
["note_protected_by_if_available"]={
["note_protected_by_if_available"]={
[c]="jump enters controlled statement of if available",
[f]="jump enters controlled statement of if available",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump enters controlled statement of if available",
[d]="jump enters controlled statement of if available",
[b]=m,
[e]=p,
[g]="jump enters controlled statement of if available",
[a]="jump enters controlled statement of if available",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[j]={{N,374,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    unsigned Diag = diag::note_protected_by_if_available;"}}
[j]={{O,374,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    unsigned Diag = diag::note_protected_by_if_available;"}},
[k]={
["clang/test/SemaObjC/unguarded-availability.m"]={"clang/test/SemaObjC/unguarded-availability.m:96:3: note: jump enters controlled statement of if available","clang/test/SemaObjC/unguarded-availability.m:96:3: note: jump enters controlled statement of if available"}
}
},
},
["note_protected_by_non_trivial_c_struct_init"]={
["note_protected_by_non_trivial_c_struct_init"]={
[c]="jump bypasses initialization of variable of non-trivial C struct type",
[f]="jump bypasses initialization of variable of non-trivial C struct type",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of variable of non-trivial C struct type",
[d]="jump bypasses initialization of variable of non-trivial C struct type",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of variable of non\\-trivial C struct type",
[a]="jump bypasses initialization of variable of non\\-trivial C struct type",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[i]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[j]={{N,170,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_nontrivial_c_struct:\n        return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"}}
[j]={{O,170,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_nontrivial_c_struct:\n        return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"}},
[k]={
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:18:12: note: jump bypasses initialization of variable of non-trivial C struct type"}
}
},
},
["note_protected_by_objc_autoreleasepool"]={
["note_protected_by_objc_autoreleasepool"]={
[c]="jump bypasses auto release push of @autoreleasepool block",
[f]="jump bypasses auto release push of @autoreleasepool block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses auto release push of @autoreleasepool block",
[d]="jump bypasses auto release push of @autoreleasepool block",
[b]=m,
[e]=p,
[g]="jump bypasses auto release push of @autoreleasepool block",
[a]="jump bypasses auto release push of @autoreleasepool block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Ec,1308178962,sc},
[i]={Nc,1308178962,Cc},
[j]={{N,550,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAutoreleasePoolStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}
[j]={{O,550,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAutoreleasePoolStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}},
[k]={
["clang/test/SemaObjC/autoreleasepool.m"]={"clang/test/SemaObjC/autoreleasepool.m:12:3: note: jump bypasses auto release push of @autoreleasepool block"}
}
},
},
["note_protected_by_objc_catch"]={
["note_protected_by_objc_catch"]={
[c]="jump bypasses initialization of @catch block",
[f]="jump bypasses initialization of @catch block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of @catch block",
[d]="jump bypasses initialization of @catch block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of @catch block",
[a]="jump bypasses initialization of @catch block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[j]={{N,504,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the catch to the finally or try is not valid.\n    for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}}
[j]={{O,504,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the catch to the finally or try is not valid.\n    for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}},
[k]={
[Jc]={"clang/test/SemaObjC/scope-check.m:44:5: note: jump bypasses initialization of @catch block","clang/test/SemaObjC/scope-check.m:25:5: note: jump bypasses initialization of @catch block","clang/test/SemaObjC/scope-check.m:22:5: note: jump bypasses initialization of @catch block","clang/test/SemaObjC/scope-check.m:11:5: note: jump bypasses initialization of @catch block","clang/test/SemaObjC/scope-check.m:80:5: note: jump bypasses initialization of @catch block"}
}
},
},
["note_protected_by_objc_fast_enumeration"]={
["note_protected_by_objc_fast_enumeration"]={
[c]="jump enters Objective-C fast enumeration loop",
[f]="jump enters Objective-C fast enumeration loop",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump enters Objective-C fast enumeration loop",
[d]="jump enters Objective-C fast enumeration loop",
[b]=m,
[e]=p,
[g]="jump enters Objective\\-C fast enumeration loop",
[a]="jump enters Objective\\-C fast enumeration loop",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3901377c2297",1492624448,"[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops."},
[i]={"3901377c2297",1492624448,"[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops."},
[j]={{N,322,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCForCollectionStmtClass: {\n    unsigned Diag = diag::note_protected_by_objc_fast_enumeration;"}}
[j]={{O,322,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCForCollectionStmtClass: {\n    unsigned Diag = diag::note_protected_by_objc_fast_enumeration;"}},
[k]={
["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:62:3: note: jump enters Objective-C fast enumeration loop","clang/test/SemaObjC/foreach.m:63:5: note: jump enters Objective-C fast enumeration loop","clang/test/SemaObjC/foreach.m:62:3: note: jump enters Objective-C fast enumeration loop","clang/test/SemaObjC/foreach.m:63:5: note: jump enters Objective-C fast enumeration loop"}
}
},
},
["note_protected_by_objc_finally"]={
["note_protected_by_objc_finally"]={
[c]="jump bypasses initialization of @finally block",
[f]="jump bypasses initialization of @finally block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of @finally block",
[d]="jump bypasses initialization of @finally block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of @finally block",
[a]="jump bypasses initialization of @finally block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[j]={{N,515,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the finally to the try or catch is not valid.\n    if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}}
[j]={{O,515,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the finally to the try or catch is not valid.\n    if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}},
[k]={
[Jc]={"clang/test/SemaObjC/scope-check.m:27:5: note: jump bypasses initialization of @finally block","clang/test/SemaObjC/scope-check.m:15:5: note: jump bypasses initialization of @finally block"}
}
},
},
["note_protected_by_objc_strong_init"]={
["note_protected_by_objc_strong_init"]={
[c]="jump bypasses initialization of __strong variable",
[f]="jump bypasses initialization of __strong variable",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of __strong variable",
[d]="jump bypasses initialization of __strong variable",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of __strong variable",
[a]="jump bypasses initialization of __strong variable",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[j]={{N,162,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_strong_lifetime:\n        return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}}
[j]={{O,162,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_strong_lifetime:\n        return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}},
[k]={
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:183:8: note: jump bypasses initialization of __strong variable"}
}
},
},
["note_protected_by_objc_synchronized"]={
["note_protected_by_objc_synchronized"]={
[c]="jump bypasses initialization of @synchronized block",
[f]="jump bypasses initialization of @synchronized block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of @synchronized block",
[d]="jump bypasses initialization of @synchronized block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of @synchronized block",
[a]="jump bypasses initialization of @synchronized block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c70dd5647701",1240293660,"add support for goto checking and @synchronized blocks,"},
[i]={"c70dd5647701",1240293660,"add support for goto checking and @synchronized blocks,"},
[j]={{N,536,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtSynchronizedStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}}
[j]={{O,536,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtSynchronizedStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}},
[k]={
[Jc]={"clang/test/SemaObjC/scope-check.m:49:3: note: jump bypasses initialization of @synchronized block"}
}
},
},
["note_protected_by_objc_try"]={
["note_protected_by_objc_try"]={
[c]="jump bypasses initialization of @try block",
[f]="jump bypasses initialization of @try block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of @try block",
[d]="jump bypasses initialization of @try block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of @try block",
[a]="jump bypasses initialization of @try block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,493,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Recursively walk the AST for the @try part.\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}}
[j]={{O,493,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Recursively walk the AST for the @try part.\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}},
[k]={
[Jc]={"clang/test/SemaObjC/scope-check.m:32:3: note: jump bypasses initialization of @try block","clang/test/SemaObjC/scope-check.m:32:3: note: jump bypasses initialization of @try block","clang/test/SemaObjC/scope-check.m:9:3: note: jump bypasses initialization of @try block"}
}
},
},
["note_protected_by_objc_weak_init"]={
["note_protected_by_objc_weak_init"]={
[c]="jump bypasses initialization of __weak variable",
[f]="jump bypasses initialization of __weak variable",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of __weak variable",
[d]="jump bypasses initialization of __weak variable",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of __weak variable",
[a]="jump bypasses initialization of __weak variable",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[j]={{N,166,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_weak_lifetime:\n        return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}
[j]={{O,166,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_weak_lifetime:\n        return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}},
[k]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:46:13: note: jump bypasses initialization of __weak variable"}
}
},
},
["note_protected_by_seh_except"]={
["note_protected_by_seh_except"]={
[c]="jump bypasses initialization of __except block",
[f]="jump bypasses initialization of __except block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of __except block",
[d]="jump bypasses initialization of __except block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of __except block",
[a]="jump bypasses initialization of __except block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[j]={{N,443,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}}
[j]={{O,443,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}},
[k]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:460:5: note: jump bypasses initialization of __except block","clang/test/SemaCXX/scope-check.cpp:527:5: note: jump bypasses initialization of __except block","clang/test/SemaCXX/scope-check.cpp:563:5: note: jump bypasses initialization of __except block"}
}
},
},
["note_protected_by_seh_finally"]={
["note_protected_by_seh_finally"]={
[c]="jump bypasses initialization of __finally block",
[f]="jump bypasses initialization of __finally block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of __finally block",
[d]="jump bypasses initialization of __finally block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of __finally block",
[a]="jump bypasses initialization of __finally block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[j]={{N,450,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n    } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"},{N,940,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_protected_by_seh_finally) {"}}
[j]={{O,450,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n    } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"},{O,940,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_protected_by_seh_finally) {"}},
[k]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:476:5: note: jump bypasses initialization of __finally block","clang/test/SemaCXX/scope-check.cpp:543:5: note: jump bypasses initialization of __finally block","clang/test/SemaCXX/scope-check.cpp:573:5: note: jump bypasses initialization of __finally block"}
}
},
},
["note_protected_by_seh_try"]={
["note_protected_by_seh_try"]={
[c]="jump bypasses initialization of __try block",
[f]="jump bypasses initialization of __try block",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of __try block",
[d]="jump bypasses initialization of __try block",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of __try block",
[a]="jump bypasses initialization of __try block",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[j]={{N,432,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}}
[j]={{O,432,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}},
[k]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:452:3: note: jump bypasses initialization of __try block","clang/test/SemaCXX/scope-check.cpp:468:3: note: jump bypasses initialization of __try block","clang/test/SemaCXX/scope-check.cpp:532:3: note: jump bypasses initialization of __try block","clang/test/SemaCXX/scope-check.cpp:548:3: note: jump bypasses initialization of __try block"}
}
},
},
["note_protected_by_variable_init"]={
["note_protected_by_variable_init"]={
[c]="jump bypasses variable initialization",
[f]="jump bypasses variable initialization",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses variable initialization",
[d]="jump bypasses variable initialization",
[b]=m,
[e]=p,
[g]="jump bypasses variable initialization",
[a]="jump bypasses variable initialization",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"30d0cfda354e",1267477193,"Implement jump checking for initialized c++ variables, implementing"},
[i]={"30d0cfda354e",1267477193,"Implement jump checking for initialized c++ variables, implementing"},
[j]={{N,198,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      InDiag = diag::note_protected_by_variable_init;"},{N,846,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}}
[j]={{O,198,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      InDiag = diag::note_protected_by_variable_init;"},{O,846,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}},
[k]={
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:113:13: note: jump bypasses variable initialization"}
}
},
},
["note_protected_by_variable_non_pod"]={
["note_protected_by_variable_non_pod"]={
[c]="jump bypasses initialization of non-POD variable",
[f]="jump bypasses initialization of non-POD variable",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of non-POD variable",
[d]="jump bypasses initialization of non-POD variable",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of non\\-POD variable",
[a]="jump bypasses initialization of non\\-POD variable",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[i]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[j]={{N,210,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n          else if (!Ctor->getParent()->isPOD())\n            InDiag = diag::note_protected_by_variable_non_pod;"},{N,854,"static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) { return S.getLangOpts().CPlusPlus11 && InDiagNote == diag::note_protected_by_variable_non_pod; }"}}
[j]={{O,210,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n          else if (!Ctor->getParent()->isPOD())\n            InDiag = diag::note_protected_by_variable_non_pod;"},{O,854,"static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) { return S.getLangOpts().CPlusPlus11 && InDiagNote == diag::note_protected_by_variable_non_pod; }"}},
[k]={
["clang/test/CXX/stmt.stmt/stmt.dcl/p3.cpp"]={"clang/test/CXX/stmt.stmt/stmt.dcl/p3.cpp:50:5: note: jump bypasses initialization of non-POD variable"}
}
},
},
["note_protected_by_variable_nontriv_destructor"]={
["note_protected_by_variable_nontriv_destructor"]={
[c]="jump bypasses variable with a non-trivial destructor",
[f]="jump bypasses variable with a non-trivial destructor",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses variable with a non-trivial destructor",
[d]="jump bypasses variable with a non-trivial destructor",
[b]=m,
[e]=p,
[g]="jump bypasses variable with a non\\-trivial destructor",
[a]="jump bypasses variable with a non\\-trivial destructor",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1778b030c0dc",1308108214,"Properly implement C++0x [stmt.dcl]p3, which requires a scope to be"},
[i]={"1778b030c0dc",1308108214,"Properly implement C++0x [stmt.dcl]p3, which requires a scope to be"},
[j]={{N,208,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n            InDiag = diag::note_protected_by_variable_nontriv_destructor;"},{N,847,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}}
[j]={{O,208,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n            InDiag = diag::note_protected_by_variable_nontriv_destructor;"},{O,847,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}},
[k]={
["clang/test/CXX/stmt.stmt/stmt.dcl/p3-0x.cpp"]={"clang/test/CXX/stmt.stmt/stmt.dcl/p3-0x.cpp:39:7: note: jump bypasses variable with a non-trivial destructor","clang/test/CXX/stmt.stmt/stmt.dcl/p3-0x.cpp:34:5: note: jump bypasses variable with a non-trivial destructor"}
}
},
},
["note_protected_by_vla"]={
["note_protected_by_vla"]={
[c]="jump bypasses initialization of variable length array",
[f]="jump bypasses initialization of variable length array",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of variable length array",
[d]="jump bypasses initialization of variable length array",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of variable length array",
[a]="jump bypasses initialization of variable length array",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,149,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->getType()->isVariablyModifiedType())\n      InDiag = diag::note_protected_by_vla;"}}
[j]={{O,149,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->getType()->isVariablyModifiedType())\n      InDiag = diag::note_protected_by_vla;"}},
[k]={
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:95:7: note: jump bypasses initialization of variable length array","clang/test/Sema/vla.c:120:8: note: jump bypasses initialization of variable length array","clang/test/Sema/vla.c:108:8: note: jump bypasses initialization of variable length array"}
}
},
},
["note_protected_by_vla_type_alias"]={
["note_protected_by_vla_type_alias"]={
[c]="jump bypasses initialization of VLA type alias",
[f]="jump bypasses initialization of VLA type alias",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of VLA type alias",
[d]="jump bypasses initialization of VLA type alias",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of VLA type alias",
[a]="jump bypasses initialization of VLA type alias",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."},
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."},
[j]={{N,224,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (TD->getUnderlyingType()->isVariablyModifiedType())\n      return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}}
[j]={{O,224,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (TD->getUnderlyingType()->isVariablyModifiedType())\n      return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}},
[k]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:48:11: note: jump bypasses initialization of VLA type alias"}
}
},
},
["note_protected_by_vla_typedef"]={
["note_protected_by_vla_typedef"]={
[c]="jump bypasses initialization of VLA typedef",
[f]="jump bypasses initialization of VLA typedef",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="jump bypasses initialization of VLA typedef",
[d]="jump bypasses initialization of VLA typedef",
[b]=m,
[e]=p,
[g]="jump bypasses initialization of VLA typedef",
[a]="jump bypasses initialization of VLA typedef",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,223,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (TD->getUnderlyingType()->isVariablyModifiedType())\n      return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}}
[j]={{O,223,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (TD->getUnderlyingType()->isVariablyModifiedType())\n      return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}},
[k]={
[Jc]={"clang/test/SemaObjC/scope-check.m:88:17: note: jump bypasses initialization of VLA typedef"}
}
},
},
["note_protocol_decl"]={
["note_protocol_decl"]={
[c]="protocol is declared here",
[f]="protocol is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="protocol is declared here",
[d]="protocol is declared here",
[b]=m,
[e]=p,
[g]="protocol is declared here",
[a]="protocol is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method"},
[i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method"},
[j]={{u,6133,"static void handleObjCRequiresSuperAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (const auto *PDecl = dyn_cast_or_null<ObjCProtocolDecl>(DC)) {\n    S.Diag(PDecl->getLocation(), diag::note_protocol_decl);"}}
[j]={{v,6133,"static void handleObjCRequiresSuperAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (const auto *PDecl = dyn_cast_or_null<ObjCProtocolDecl>(DC)) {\n    S.Diag(PDecl->getLocation(), diag::note_protocol_decl);"}},
[k]={
["clang/test/SemaObjC/super-dealloc-attribute.m"]={"clang/test/SemaObjC/super-dealloc-attribute.m:11:11: note: protocol is declared here"}
}
},
},
["note_protocol_decl_undefined"]={
["note_protocol_decl_undefined"]={
[c]="protocol A has no definition",
[f]="protocol A has no definition",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="protocol %0 has no definition",
[d]="protocol %0 has no definition",
[b]=m,
[e]=p,
[g]="protocol (.*?) has no definition",
[a]="protocol (.*?) has no definition",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols"},
[i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols"},
[j]={{B,1352,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n  for (const IdentifierLocPair &Pair : ProtocolId) {\n    if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n      Diag(UndefinedProtocol->getLocation(), diag::note_protocol_decl_undefined) << UndefinedProtocol;"},{B,1489,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n  auto resolvedAsProtocols = [&] {\n    for (unsigned i = 0, n = protocols.size(); i != n; ++i) {\n      if (warnOnIncompleteProtocols && NestedProtocolHasNoDefinition(proto, forwardDecl)) {\n        Diag(forwardDecl->getLocation(), diag::note_protocol_decl_undefined) << forwardDecl;"}}
[j]={{C,1352,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n  for (const IdentifierLocPair &Pair : ProtocolId) {\n    if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n      Diag(UndefinedProtocol->getLocation(), diag::note_protocol_decl_undefined) << UndefinedProtocol;"},{C,1489,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n  auto resolvedAsProtocols = [&] {\n    for (unsigned i = 0, n = protocols.size(); i != n; ++i) {\n      if (warnOnIncompleteProtocols && NestedProtocolHasNoDefinition(proto, forwardDecl)) {\n        Diag(forwardDecl->getLocation(), diag::note_protocol_decl_undefined) << forwardDecl;"}},
[k]={
["clang/test/SemaObjC/class-def-test-1.m"]={"clang/test/SemaObjC/class-def-test-1.m:3:11: note: protocol \'SUPER\' has no definition"}
}
},
},
["note_protocol_method"]={
["note_protocol_method"]={
[c]="protocol method is here",
[f]="protocol method is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="protocol method is here",
[d]="protocol method is here",
[b]=m,
[e]=p,
[g]="protocol method is here",
[a]="protocol method is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d2a713e41bd3",1443648462,"Don\'t inherit availability information when implementing a protocol requirement."},
[i]={"d2a713e41bd3",1443648462,"Don\'t inherit availability information when implementing a protocol requirement."},
[j]={{u,2548,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          if (AMK == AMK_Override)\n          else\n            Diag(CI.getLoc(), diag::note_protocol_method);"}}
[j]={{v,2548,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          if (AMK == AMK_Override)\n          else\n            Diag(CI.getLoc(), diag::note_protocol_method);"}},
[k]={
["clang/test/SemaObjC/override-opt-prop-availability.m"]={"clang/test/SemaObjC/override-opt-prop-availability.m:19:42: note: protocol method is here","clang/test/SemaObjC/override-opt-prop-availability.m:5:50: note: protocol method is here","clang/test/SemaObjC/override-opt-prop-availability.m:5:50: note: protocol method is here","clang/test/SemaObjC/override-opt-prop-availability.m:13:60: note: protocol method is here"}
}
},
},
["note_protocol_property_declare"]={
["note_protocol_property_declare"]={
[c]="it could also be property ... declared here",
[f]="it could also be property ... declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="it could also be property %select{of type %1|without attribute \'%1\'|with attribute \'%1\'|with getter %1|with setter %1}0 declared here",
[d]="it could also be property %select{of type %1|without attribute \'%1\'|with attribute \'%1\'|with getter %1|with setter %1}0 declared here",
[b]=m,
[e]=p,
[g]="it could also be property (?:of type (.*?)|without attribute \'(.*?)\'|with attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) declared here",
[a]="it could also be property (?:of type (.*?)|without attribute \'(.*?)\'|with attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple"},
[i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple"},
[j]={{E,990,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  for (const auto &Note : Mismatches) {\n    auto Diag = S.Diag(Note.Prop->getLocation(), diag::note_protocol_property_declare) << Note.Kind;"}}
[j]={{G,990,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  for (const auto &Note : Mismatches) {\n    auto Diag = S.Diag(Note.Prop->getLocation(), diag::note_protocol_property_declare) << Note.Kind;"}},
[k]={
["clang/test/SemaObjC/property-ambiguous-synthesis.m"]={"clang/test/SemaObjC/property-ambiguous-synthesis.m:5:23: note: it could also be property of type \'id\' declared here","clang/test/SemaObjC/property-ambiguous-synthesis.m:5:23: note: it could also be property of type \'id\' declared here","clang/test/SemaObjC/property-ambiguous-synthesis.m:15:17: note: it could also be property of type \'short\' declared here","clang/test/SemaObjC/property-ambiguous-synthesis.m:10:18: note: it could also be property of type \'double\' declared here"}
}
},
},
["note_pure_qualified_call_kext"]={
["note_pure_qualified_call_kext"]={
[c]="qualified call to A::B is treated as a virtual call to C due to -fapple-kext",
[f]="qualified call to A::B is treated as a virtual call to C due to -fapple-kext",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="qualified call to %0::%1 is treated as a virtual call to %1 due to -fapple-kext",
[d]="qualified call to %0::%1 is treated as a virtual call to %1 due to -fapple-kext",
[b]=m,
[e]=p,
[g]="qualified call to (.*?)\\:\\:(.*?) is treated as a virtual call to (.*?) due to \\-fapple\\-kext",
[a]="qualified call to (.*?)\\:\\:(.*?) is treated as a virtual call to (.*?) due to \\-fapple\\-kext",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ccb373852758",1436916970,"[Sema] Don\'t emit \"pure virtual\" warning for fully qualified calls."},
[i]={"ccb373852758",1436916970,"[Sema] Don\'t emit \"pure virtual\" warning for fully qualified calls."},
[j]={{D,14926,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      if (getLangOpts().AppleKext)\n        Diag(MemExpr->getBeginLoc(), diag::note_pure_qualified_call_kext) << MD->getParent() << MD->getDeclName();"}}
[j]={{E,14926,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      if (getLangOpts().AppleKext)\n        Diag(MemExpr->getBeginLoc(), diag::note_pure_qualified_call_kext) << MD->getParent() << MD->getDeclName();"}},
[k]={
["clang/test/SemaCXX/warn-pure-virtual-kext.cpp"]={"clang/test/SemaCXX/warn-pure-virtual-kext.cpp:6:9: note: qualified call to \'A\'::\'f\' is treated as a virtual call to \'f\' due to -fapple-kext","clang/test/SemaCXX/warn-pure-virtual-kext.cpp:13:10: note: qualified call to \'TA<int>\'::\'f\' is treated as a virtual call to \'f\' due to -fapple-kext"}
}
},
},
["note_pure_virtual_function"]={
["note_pure_virtual_function"]={
[c]="unimplemented pure virtual method A in B",
[f]="unimplemented pure virtual method A in B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="unimplemented pure virtual method %0 in %1",
[d]="unimplemented pure virtual method %0 in %1",
[b]=m,
[e]=p,
[g]="unimplemented pure virtual method (.*?) in (.*?)",
[a]="unimplemented pure virtual method (.*?) in (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."},
[i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."},
[j]={{y,5985,"void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {\n  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n    for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n      Diag(SO->second.front().Method->getLocation(), diag::note_pure_virtual_function) << SO->second.front().Method->getDeclName() << RD->getDeclName();"}}
[j]={{z,5985,"void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {\n  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n    for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n      Diag(SO->second.front().Method->getLocation(), diag::note_pure_virtual_function) << SO->second.front().Method->getDeclName() << RD->getDeclName();"}},
[k]={
["clang/test/CXX/class.derived/class.abstract/p2.cpp"]={"clang/test/CXX/class.derived/class.abstract/p2.cpp:10:16: note: unimplemented pure virtual method \'f\' in \'A\'"}
}
},
},
["note_raii_guard_add_name"]={
["note_raii_guard_add_name"]={
[c]="add a variable name to declare a A initialized with B",
[f]="add a variable name to declare a A initialized with B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="add a variable name to declare a %0 initialized with %1",
[d]="add a variable name to declare a %0 initialized with %1",
[b]=m,
[e]=p,
[g]="add a variable name to declare a (.*?) initialized with (.*?)",
[a]="add a variable name to declare a (.*?) initialized with (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[j]={{hb,4026,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  if (!RD || !RD->hasDefinition() || RD->hasNonTrivialDestructor())\n    S.Diag(Paren.Loc, diag::note_raii_guard_add_name) << FixItHint::CreateInsertion(Paren.Loc, \" varname\") << T << D.getIdentifier();"}}
[j]={{cb,4026,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  if (!RD || !RD->hasDefinition() || RD->hasNonTrivialDestructor())\n    S.Diag(Paren.Loc, diag::note_raii_guard_add_name) << FixItHint::CreateInsertion(Paren.Loc, \" varname\") << T << D.getIdentifier();"}},
[k]={
["clang/test/Parser/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:204:20: note: add a variable name to declare a \'typename T::A\' initialized with \'parens\'"}
}
},
},
["note_receiver_class_declared"]={
["note_receiver_class_declared"]={
[c]="receiver is instance of class declared here",
[f]="receiver is instance of class declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="receiver is instance of class declared here",
[d]="receiver is instance of class declared here",
[b]=m,
[e]=p,
[g]="receiver is instance of class declared here",
[a]="receiver is instance of class declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"773df4a11fab",1368573857,"Objective-C [diagnostics] [QOI], when method is not"},
[i]={"773df4a11fab",1368573857,"Objective-C [diagnostics] [QOI], when method is not"},
[j]={{nb,1771,"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().DebuggerSupport) {\n      // Find the class to which we are sending this message.\n      if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n        if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n          Diag(ThisClass->getLocation(), diag::note_receiver_class_declared);"}}
[j]={{sb,1771,"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().DebuggerSupport) {\n      // Find the class to which we are sending this message.\n      if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n        if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n          Diag(ThisClass->getLocation(), diag::note_receiver_class_declared);"}},
[k]={
["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:3:12: note: receiver is instance of class declared here"}
}
},
},
["note_receiver_expr_here"]={
["note_receiver_expr_here"]={
[c]="receiver expression is here",
[f]="receiver expression is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="receiver expression is here",
[d]="receiver expression is here",
[b]=m,
[e]=p,
[g]="receiver expression is here",
[a]="receiver expression is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"19c2e2fab2e9",1408491557,"Objective-C [qoi]. Provide fix-it hint when sending"},
[i]={"19c2e2fab2e9",1408491557,"Objective-C [qoi]. Provide fix-it hint when sending"},
[j]={{nb,1774,"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().DebuggerSupport) {\n      // Find the class to which we are sending this message.\n      if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n        if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n          if (!RecRange.isInvalid())\n            if (ThisClass->lookupClassMethod(Sel))\n              Diag(RecRange.getBegin(), diag::note_receiver_expr_here) << FixItHint::CreateReplacement(RecRange, ThisClass->getNameAsString());"}}
[j]={{sb,1774,"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().DebuggerSupport) {\n      // Find the class to which we are sending this message.\n      if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n        if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n          if (!RecRange.isInvalid())\n            if (ThisClass->lookupClassMethod(Sel))\n              Diag(RecRange.getBegin(), diag::note_receiver_expr_here) << FixItHint::CreateReplacement(RecRange, ThisClass->getNameAsString());"}},
[k]={
["clang/test/FixIt/fixit-class-method-messaging.m"]={"clang/test/FixIt/fixit-class-method-messaging.m:18:5: note: receiver expression is here","clang/test/FixIt/fixit-class-method-messaging.m:21:4: note: receiver expression is here","clang/test/FixIt/fixit-class-method-messaging.m:24:11: note: receiver expression is here"}
}
},
},
["note_receiver_is_id"]={
["note_receiver_is_id"]={
[c]="receiver is treated with \'id\' type for purpose of method lookup",
[f]="receiver is treated with \'id\' type for purpose of method lookup",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="receiver is treated with \'id\' type for purpose of method lookup",
[d]="receiver is treated with \'id\' type for purpose of method lookup",
[b]=m,
[e]=p,
[g]="receiver is treated with \'id\' type for purpose of method lookup",
[a]="receiver is treated with \'id\' type for purpose of method lookup",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and"},
[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and"},
[j]={{nb,3074,"/// 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)) {\n          Diag(Receiver ? Receiver->getBeginLoc() : SuperLoc, diag::note_receiver_is_id);"}}
[j]={{sb,3074,"/// 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)) {\n          Diag(Receiver ? Receiver->getBeginLoc() : SuperLoc, diag::note_receiver_is_id);"}},
[k]={
["clang/test/SemaObjC/receiver-forward-class.m"]={"clang/test/SemaObjC/receiver-forward-class.m:15:11: note: receiver is treated with \'id\' type for purpose of method lookup"}
}
},
},
["note_recursive_default_argument_used_here"]={
["note_recursive_default_argument_used_here"]={
[c]="default argument used here",
[f]="default argument used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="default argument used here",
[d]="default argument used here",
[b]=m,
[e]=p,
[g]="default argument used here",
[a]="default argument used here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,6032,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(CallLoc, diag::note_recursive_default_argument_used_here);"}}
[j]={{D,6032,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(CallLoc, diag::note_recursive_default_argument_used_here);"}},
[k]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:29: note: default argument used here"}
}
},
},
["note_redefinition_include_same_file"]={
["note_redefinition_include_same_file"]={
[c]="\'A\' included multiple times, additional include site here",
[f]="\'A\' included multiple times, additional include site here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' included multiple times, additional include site here",
[d]="\'%0\' included multiple times, additional include site here",
[b]=m,
[e]=p,
[g]="\'(.*?)\' included multiple times, additional include site here",
[a]="\'(.*?)\' included multiple times, additional include site here",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[j]={{v,4786,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n      } else {\n        Diag(IncLoc, diag::note_redefinition_include_same_file) << HdrFilename.str();"}}
[j]={{w,4786,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n      } else {\n        Diag(IncLoc, diag::note_redefinition_include_same_file) << HdrFilename.str();"}},
[k]={
["clang/test/Sema/redefinition-same-header.c"]={"clang/test/Sema/redefinition-same-header.c:11:10: note: \'build/tools/clang/test/Sema/Output/redefinition-same-header.c.tmp/a.h\' included multiple times, additional include site here","clang/test/Sema/redefinition-same-header.c:12:10: note: \'build/tools/clang/test/Sema/Output/redefinition-same-header.c.tmp/a.h\' included multiple times, additional include site here"}
}
},
},
["note_redefinition_modules_same_file"]={
["note_redefinition_modules_same_file"]={
[c]="\'A\' included multiple times, additional include site in header from module \'B\'",
[f]="\'A\' included multiple times, additional include site in header from module \'B\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="\'%0\' included multiple times, additional include site in header from module \'%1\'",
[d]="\'%0\' included multiple times, additional include site in header from module \'%1\'",
[b]=m,
[e]=p,
[g]="\'(.*?)\' included multiple times, additional include site in header from module \'(.*?)\'",
[a]="\'(.*?)\' included multiple times, additional include site in header from module \'(.*?)\'",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[j]={{v,4780,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n        Diag(IncLoc, diag::note_redefinition_modules_same_file) << HdrFilename.str() << Mod->getFullModuleName();"}}
[j]={{w,4780,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n        Diag(IncLoc, diag::note_redefinition_modules_same_file) << HdrFilename.str() << Mod->getFullModuleName();"}},
[k]={
["clang/test/Modules/redefinition-same-header.m"]={"clang/test/Modules/Inputs/SameHeader/B.h:3:10: note: \'clang/test/Modules/Inputs/SameHeader/C.h\' included multiple times, additional include site in header from module \'X.B\'"}
}
},
},
["note_ref_or_ptr_member_declared_here"]={
["note_ref_or_ptr_member_declared_here"]={
[c]="... member declared here",
[f]="... member declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{reference|pointer}0 member declared here",
[d]="%select{reference|pointer}0 member declared here",
[b]=m,
[e]=p,
[g]="(?:reference|pointer) member declared here",
[a]="(?:reference|pointer) member declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[j]={{U,8174,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          if (IsGslPtrInitWithGslTempOwner) {\n            Diag(ExtendingDecl->getLocation(), diag::note_ref_or_ptr_member_declared_here) << true;"},{U,8229,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here) << (unsigned)IsPointer;"}}
[j]={{W,8174,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          if (IsGslPtrInitWithGslTempOwner) {\n            Diag(ExtendingDecl->getLocation(), diag::note_ref_or_ptr_member_declared_here) << true;"},{W,8229,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here) << (unsigned)IsPointer;"}},
[k]={
["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:12:12: note: pointer member declared here"}
}
},
},
["note_refconst_member_not_initialized"]={
["note_refconst_member_not_initialized"]={
[c]="... member A will never be initialized",
[f]="... member A will never be initialized",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{const|reference}0 member %1 will never be initialized",
[d]="%select{const|reference}0 member %1 will never be initialized",
[b]=m,
[e]=p,
[g]="(?:const|reference) member (.*?) will never be initialized",
[a]="(?:const|reference) member (.*?) will never be initialized",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors"},
[i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors"},
[j]={{y,6933,"/// 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  // If this is not an aggregate type and has no user-declared constructor,\n  // complain about any non-static data members of reference or const scalar\n  // type, since they will never get initializers.\n  if (!Record->isInvalidDecl() && !Record->isDependentType() && !Record->isAggregate() && !Record->hasUserDeclaredConstructor() && !Record->isLambda()) {\n    for (const auto *F : Record->fields()) {\n      if (F->getType()->isReferenceType() || (F->getType().isConstQualified() && F->getType()->isScalarType())) {\n        Diag(F->getLocation(), diag::note_refconst_member_not_initialized) << F->getType()->isReferenceType() << F->getDeclName();"}}
[j]={{z,6933,"/// 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  // If this is not an aggregate type and has no user-declared constructor,\n  // complain about any non-static data members of reference or const scalar\n  // type, since they will never get initializers.\n  if (!Record->isInvalidDecl() && !Record->isDependentType() && !Record->isAggregate() && !Record->hasUserDeclaredConstructor() && !Record->isLambda()) {\n    for (const auto *F : Record->fields()) {\n      if (F->getType()->isReferenceType() || (F->getType().isConstQualified() && F->getType()->isScalarType())) {\n        Diag(F->getLocation(), diag::note_refconst_member_not_initialized) << F->getType()->isReferenceType() << F->getDeclName();"}},
[k]={
["clang/test/SemaTemplate/instantiation-backtrace.cpp"]={"clang/test/SemaTemplate/instantiation-backtrace.cpp:36:7: note: reference member \'t\' will never be initialized"}
}
},
},
["note_reference_is_return_value"]={
["note_reference_is_return_value"]={
[c]="A returns a reference",
[f]="A returns a reference",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 returns a reference",
[d]="%0 returns a reference",
[b]=m,
[e]=p,
[g]="(.*?) returns a reference",
[a]="(.*?) returns a reference",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c1888e0c6e62",1403997937,"Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to"},
[i]={"c1888e0c6e62",1403997937,"Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to"},
[j]={{F,15412,"// Helper function for Sema::DiagnoseAlwaysNonNullPointer.\n// Returns true when emitting a warning about taking the address of a reference.\nstatic bool CheckForReference(Sema &SemaRef, const Expr *E, const PartialDiagnostic &PD) {\n  // If possible, point to location of function.\n  if (FD) {\n    SemaRef.Diag(FD->getLocation(), diag::note_reference_is_return_value) << FD;"}}
[j]={{F,15412,"// Helper function for Sema::DiagnoseAlwaysNonNullPointer.\n// Returns true when emitting a warning about taking the address of a reference.\nstatic bool CheckForReference(Sema &SemaRef, const Expr *E, const PartialDiagnostic &PD) {\n  // If possible, point to location of function.\n  if (FD) {\n    SemaRef.Diag(FD->getLocation(), diag::note_reference_is_return_value) << FD;"}},
[k]={
["clang/test/SemaCXX/warn-undefined-bool-conversion.cpp"]={"clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:40:8: note: \'get_int\' returns a reference","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:40:8: note: \'get_int\' returns a reference","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:40:8: note: \'get_int\' returns a reference","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:44:17: note: \'stat\' returns a reference","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:44:17: note: \'stat\' returns a reference","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:44:17: note: \'stat\' returns a reference",kc,kc,kc,kc,kc,kc}
}
},
},
["note_referenced_type_template"]={
["note_referenced_type_template"]={
[c]="... template declared here",
[f]="... template declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{class|type alias}0 template declared here",
[d]="%select{class|type alias}0 template declared here",
[b]=m,
[e]=p,
[g]="(?:class|type alias) template declared here",
[a]="(?:class|type alias) template declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{x,5045,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n    Diag(Temp->getLocation(), diag::note_referenced_type_template) << 0;"}}
[j]={{y,5045,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n    Diag(Temp->getLocation(), diag::note_referenced_type_template) << 0;"}},
[k]={
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:57:25: note: class template declared here"}
}
},
},
["note_reinterpret_updowncast_use_static"]={
["note_reinterpret_updowncast_use_static"]={
[c]="use \'static_cast\' to adjust the pointer correctly while ...",
[f]="use \'static_cast\' to adjust the pointer correctly while ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use \'static_cast\' to adjust the pointer correctly while %select{upcasting|downcasting}0",
[d]="use \'static_cast\' to adjust the pointer correctly while %select{upcasting|downcasting}0",
[b]=m,
[e]=p,
[g]="use \'static_cast\' to adjust the pointer correctly while (?:upcasting|downcasting)",
[a]="use \'static_cast\' to adjust the pointer correctly while (?:upcasting|downcasting)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are"},
[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are"},
[j]={{mb,1076,"/// Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is not used as upcast\n/// or downcast between respective pointers or references.\nstatic void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr, QualType DestType, SourceRange OpRange) {\n  Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static) << int(ReinterpretKind) << FixItHint::CreateReplacement(BeginLoc, \"static_cast\");"}}
[j]={{nb,1076,"/// Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is not used as upcast\n/// or downcast between respective pointers or references.\nstatic void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr, QualType DestType, SourceRange OpRange) {\n  Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static) << int(ReinterpretKind) << FixItHint::CreateReplacement(BeginLoc, \"static_cast\");"}},
[k]={
["clang/test/SemaCXX/warn-reinterpret-base-class.cpp"]={"clang/test/SemaCXX/warn-reinterpret-base-class.cpp:123:10: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:128:10: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:133:10: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:156:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:161:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:166:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:186:10: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:191:10: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:196:10: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:201:10: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:206:10: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:226:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:231:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:236:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:241:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:246:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:273:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:278:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:284:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:291:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:299:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:303:9: note: use \'static_cast\' to adjust the pointer correctly while downcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:310:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:316:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:326:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:330:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:335:9: note: use \'static_cast\' to adjust the pointer correctly while upcasting"}
}
},
},
["note_related_result_type_explicit"]={
["note_related_result_type_explicit"]={
[c]="... method is explicitly declared \'instancetype\'...",
[f]="... method is explicitly declared \'instancetype\'...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{overridden|current}0 method is explicitly declared \'instancetype\'%select{| and is expected to return an instance of its class type}0",
[d]="%select{overridden|current}0 method is explicitly declared \'instancetype\'%select{| and is expected to return an instance of its class type}0",
[b]=m,
[e]=p,
[g]="(?:overridden|current) method is explicitly declared \'instancetype\'(?:| and is expected to return an instance of its class type)",
[a]="(?:overridden|current) method is explicitly declared \'instancetype\'(?:| and is expected to return an instance of its class type)",
[a]=l,
[g]=m,
[e]="Related Result Type Issue",
[h]="Related Result Type Issue",
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[j]={{nb,1672,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n  // Look for a method overridden by this method which explicitly uses\n  // \'instancetype\'.\n  if (const ObjCMethodDecl *overridden = findExplicitInstancetypeDeclarer(MD, Context.getObjCInstanceType())) {\n    Diag(loc, diag::note_related_result_type_explicit) << /*current method*/ 1 << range;"}}
[j]={{sb,1672,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n  // Look for a method overridden by this method which explicitly uses\n  // \'instancetype\'.\n  if (const ObjCMethodDecl *overridden = findExplicitInstancetypeDeclarer(MD, Context.getObjCInstanceType())) {\n    Diag(loc, diag::note_related_result_type_explicit) << /*current method*/ 1 << range;"}},
[k]={
["clang/test/SemaObjCXX/instancetype.mm"]={"clang/test/SemaObjCXX/instancetype.mm:8:4: note: current method is explicitly declared \'instancetype\' and is expected to return an instance of its class type","clang/test/SemaObjCXX/instancetype.mm:167:4: note: current method is explicitly declared \'instancetype\' and is expected to return an instance of its class type","clang/test/SemaObjCXX/instancetype.mm:10:4: note: current method is explicitly declared \'instancetype\' and is expected to return an instance of its class type","clang/test/SemaObjCXX/instancetype.mm:193:4: note: current method is explicitly declared \'instancetype\' and is expected to return an instance of its class type","clang/test/SemaObjCXX/instancetype.mm:196:4: note: current method is explicitly declared \'instancetype\' and is expected to return an instance of its class type"}
}
},
},
["note_related_result_type_family"]={
["note_related_result_type_family"]={
[c]="... method is part of the \'...\' method family...",
[f]="... method is part of the \'...\' method family...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{overridden|current}0 method is part of the \'%select{|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self}1\' method family%select{| and is expected to return an instance of its class type}0",
[d]="%select{overridden|current}0 method is part of the \'%select{|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self}1\' method family%select{| and is expected to return an instance of its class type}0",
[b]=m,
[e]=p,
[g]="(?:overridden|current) method is part of the \'(?:|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self)\' method family(?:| and is expected to return an instance of its class type)",
[a]="(?:overridden|current) method is part of the \'(?:|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self)\' method family(?:| and is expected to return an instance of its class type)",
[a]=l,
[g]=m,
[e]="Related Result Type Issue",
[h]="Related Result Type Issue",
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[j]={{B,177,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n      Diag(Overridden->getLocation(), diag::note_related_result_type_family) << /*overridden method*/ 0 << Family;"},{nb,1680,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n  // Otherwise, if we have an interesting method family, note that.\n  // This should always trigger if the above didn\'t.\n  if (ObjCMethodFamily family = MD->getMethodFamily())\n    Diag(MD->getLocation(), diag::note_related_result_type_family) << /*current method*/ 1 << family;"}}
[j]={{C,177,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n      Diag(Overridden->getLocation(), diag::note_related_result_type_family) << /*overridden method*/ 0 << Family;"},{sb,1680,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n  // Otherwise, if we have an interesting method family, note that.\n  // This should always trigger if the above didn\'t.\n  if (ObjCMethodFamily family = MD->getMethodFamily())\n    Diag(MD->getLocation(), diag::note_related_result_type_family) << /*current method*/ 1 << family;"}},
[k]={
["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:85:1: note: overridden method is part of the \'init\' method family","clang/test/SemaObjC/related-result-type-inference.m:85:1: note: overridden method is part of the \'init\' method family","clang/test/SemaObjC/related-result-type-inference.m:102:1: note: overridden method is part of the \'new\' method family","clang/test/SemaObjC/related-result-type-inference.m:106:1: note: overridden method is part of the \'alloc\' method family","clang/test/SemaObjC/related-result-type-inference.m:120:1: note: overridden method is part of the \'init\' method family"}
}
},
},
["note_related_result_type_inferred"]={
["note_related_result_type_inferred"]={
[c]="... method A is assumed to return an instance of its receiver type (B)",
[f]="... method A is assumed to return an instance of its receiver type (B)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{class|instance}0 method %1 is assumed to return an instance of its receiver type (%2)",
[d]="%select{class|instance}0 method %1 is assumed to return an instance of its receiver type (%2)",
[b]=m,
[e]=p,
[g]="(?:class|instance) method (.*?) is assumed to return an instance of its receiver type \\((.*?)\\)",
[a]="(?:class|instance) method (.*?) is assumed to return an instance of its receiver type \\((.*?)\\)",
[a]=l,
[g]=m,
[e]="Related Result Type Issue",
[h]="Related Result Type Issue",
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[j]={{nb,1706,"void Sema::EmitRelatedResultTypeNote(const Expr *E) {\n  Diag(Method->getLocation(), diag::note_related_result_type_inferred) << Method->isInstanceMethod() << Method->getSelector() << MsgSend->getType();"}}
[j]={{sb,1706,"void Sema::EmitRelatedResultTypeNote(const Expr *E) {\n  Diag(Method->getLocation(), diag::note_related_result_type_inferred) << Method->isInstanceMethod() << Method->getSelector() << MsgSend->getType();"}},
[k]={
["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:11:1: note: instance method \'retain\' is assumed to return an instance of its receiver type (\'NSArray *\')"}
}
},
},
["note_related_result_type_overridden"]={
["note_related_result_type_overridden"]={
[c]="overridden method returns an instance of its class type",
[f]="overridden method returns an instance of its class type",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="overridden method returns an instance of its class type",
[d]="overridden method returns an instance of its class type",
[b]=m,
[e]=p,
[g]="overridden method returns an instance of its class type",
[a]="overridden method returns an instance of its class type",
[a]=l,
[g]=m,
[e]="Related Result Type Issue",
[h]="Related Result Type Issue",
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[j]={{B,182,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n    else\n      Diag(Overridden->getLocation(), diag::note_related_result_type_overridden);"}}
[j]={{C,182,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n    else\n      Diag(Overridden->getLocation(), diag::note_related_result_type_overridden);"}},
[k]={
["clang/test/SemaObjCXX/instancetype.mm"]={"clang/test/SemaObjCXX/instancetype.mm:24:1: note: overridden method returns an instance of its class type","clang/test/SemaObjCXX/instancetype.mm:25:1: note: overridden method returns an instance of its class type","clang/test/SemaObjCXX/instancetype.mm:197:1: note: overridden method returns an instance of its class type"}
}
},
},
["note_remove_abs"]={
["note_remove_abs"]={
[c]="remove the call to \'A\' since unsigned values cannot be negative",
[f]="remove the call to \'A\' since unsigned values cannot be negative",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="remove the call to \'%0\' since unsigned values cannot be negative",
[d]="remove the call to \'%0\' since unsigned values cannot be negative",
[b]=m,
[e]=p,
[g]="remove the call to \'(.*?)\' since unsigned values cannot be negative",
[a]="remove the call to \'(.*?)\' since unsigned values cannot be negative",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[j]={{F,12026,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // Unsigned types cannot be negative.  Suggest removing the absolute value\n  // function call.\n  if (ArgType->isUnsignedIntegerType()) {\n    Diag(Call->getExprLoc(), diag::note_remove_abs) << FunctionName << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange());"}}
[j]={{F,12026,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // Unsigned types cannot be negative.  Suggest removing the absolute value\n  // function call.\n  if (ArgType->isUnsignedIntegerType()) {\n    Diag(Call->getExprLoc(), diag::note_remove_abs) << FunctionName << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange());"}},
[k]={
["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:15:9: note: remove the call to \'abs\' since unsigned values cannot be negative"}
}
},
},
["note_remove_max_call"]={
["note_remove_max_call"]={
[c]="remove call to max function and unsigned zero argument",
[f]="remove call to max function and unsigned zero argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="remove call to max function and unsigned zero argument",
[d]="remove call to max function and unsigned zero argument",
[b]=m,
[e]=p,
[g]="remove call to max function and unsigned zero argument",
[a]="remove call to max function and unsigned zero argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max"},
[i]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max"},
[j]={{F,12144,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n  Diag(Call->getExprLoc(), diag::note_remove_max_call) << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange()) << FixItHint::CreateRemoval(RemovalRange);"}}
[j]={{F,12144,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n  Diag(Call->getExprLoc(), diag::note_remove_max_call) << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange()) << FixItHint::CreateRemoval(RemovalRange);"}},
[k]={
["clang/test/SemaCXX/warn-max-unsigned-zero.cpp"]={"clang/test/SemaCXX/warn-max-unsigned-zero.cpp:10:12: note: remove call to max function and unsigned zero argument","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:15:12: note: remove call to max function and unsigned zero argument","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:20:12: note: remove call to max function and unsigned zero argument","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:25:12: note: remove call to max function and unsigned zero argument","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:41:10: note: remove call to max function and unsigned zero argument"}
}
},
},
["note_remove_move"]={
["note_remove_move"]={
[c]="remove std::move call here",
[f]="remove std::move call here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="remove std::move call here",
[d]="remove std::move call here",
[b]=m,
[e]=p,
[g]="remove std\\:\\:move call here",
[a]="remove std\\:\\:move call here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."},
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."},
[j]={{U,8439,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n  S.Diag(CE->getBeginLoc(), diag::note_remove_move) << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) << FixItHint::CreateRemoval(SourceRange(RParen, RParen));"}}
[j]={{W,8439,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n  S.Diag(CE->getBeginLoc(), diag::note_remove_move) << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) << FixItHint::CreateRemoval(SourceRange(RParen, RParen));"}},
[k]={
["clang/test/SemaCXX/warn-redundant-move.cpp"]={"clang/test/SemaCXX/warn-redundant-move.cpp:82:10: note: remove std::move call here","clang/test/SemaCXX/warn-redundant-move.cpp:96:12: note: remove std::move call here"}
}
},
},
["note_remove_parens_for_variable_declaration"]={
["note_remove_parens_for_variable_declaration"]={
[c]="remove parentheses to silence this warning",
[f]="remove parentheses to silence this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="remove parentheses to silence this warning",
[d]="remove parentheses to silence this warning",
[b]=m,
[e]=p,
[g]="remove parentheses to silence this warning",
[a]="remove parentheses to silence this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[j]={{hb,4034,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  S.Diag(Paren.Loc, diag::note_remove_parens_for_variable_declaration) << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}}
[j]={{cb,4034,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  S.Diag(Paren.Loc, diag::note_remove_parens_for_variable_declaration) << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}},
[k]={
["clang/test/Parser/cxx0x-condition.cpp"]={"clang/test/Parser/cxx0x-condition.cpp:17:8: note: remove parentheses to silence this warning","clang/test/Parser/cxx0x-condition.cpp:21:8: note: remove parentheses to silence this warning"}
}
},
},
["note_replace_abs_function"]={
["note_replace_abs_function"]={
[c]="use function \'A\' instead",
[f]="use function \'A\' instead",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use function \'%0\' instead",
[d]="use function \'%0\' instead",
[b]=m,
[e]=p,
[g]="use function \'(.*?)\' instead",
[a]="use function \'(.*?)\' instead",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[j]={{F,11980,"// If the replacement is valid, emit a note with replacement function.\n// Additionally, suggest including the proper header if not already included.\nstatic void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) {\n  S.Diag(Loc, diag::note_replace_abs_function) << FunctionName << FixItHint::CreateReplacement(Range, FunctionName);"}}
[j]={{F,11980,"// If the replacement is valid, emit a note with replacement function.\n// Additionally, suggest including the proper header if not already included.\nstatic void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) {\n  S.Diag(Loc, diag::note_replace_abs_function) << FunctionName << FixItHint::CreateReplacement(Range, FunctionName);"}},
[k]={
["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:31:9: note: use function \'fabs\' instead"}
}
},
},
["note_replace_equals_default_to_delete"]={
["note_replace_equals_default_to_delete"]={
[c]="replace \'default\' with \'delete\'",
[f]="replace \'default\' with \'delete\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="replace \'default\' with \'delete\'",
[d]="replace \'default\' with \'delete\'",
[b]=m,
[e]=p,
[g]="replace \'default\' with \'delete\'",
[a]="replace \'default\' with \'delete\'",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{y,7778,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        if (ShouldDeleteForTypeMismatch) {\n        } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr,\n          Diag(DefaultLoc, diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(DefaultLoc, \"delete\");"},{y,8919,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // If we want to delete the function, then do so; there\'s nothing else to\n  // check in that case.\n  if (Info.Deleted) {\n    if (!inTemplateInstantiation() && !FD->isImplicit()) {\n      if (FD->getDefaultLoc().isValid())\n        Diag(FD->getDefaultLoc(), diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(FD->getDefaultLoc(), \"delete\");"}}
[j]={{z,7778,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        if (ShouldDeleteForTypeMismatch) {\n        } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr,\n          Diag(DefaultLoc, diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(DefaultLoc, \"delete\");"},{z,8919,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // If we want to delete the function, then do so; there\'s nothing else to\n  // check in that case.\n  if (Info.Deleted) {\n    if (!inTemplateInstantiation() && !FD->isImplicit()) {\n      if (FD->getDefaultLoc().isValid())\n        Diag(FD->getDefaultLoc(), diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(FD->getDefaultLoc(), \"delete\");"}},
[k]={
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:46:23: note: replace \'default\' with \'delete\'"}
}
},
},
["note_rewriting_operator_as_spaceship"]={
["note_rewriting_operator_as_spaceship"]={
[c]="while rewriting comparison as call to \'operator<=>\' declared here",
[f]="while rewriting comparison as call to \'operator<=>\' declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="while rewriting comparison as call to \'operator<=>\' declared here",
[d]="while rewriting comparison as call to \'operator<=>\' declared here",
[b]=m,
[e]=p,
[g]="while rewriting comparison as call to \'operator\\<\\=\\>\' declared here",
[a]="while rewriting comparison as call to \'operator\\<\\=\\>\' declared here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{gb,992,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RewritingOperatorAsSpaceship:\n      Diags.Report(Active->Entity->getLocation(), diag::note_rewriting_operator_as_spaceship);"}}
[j]={{eb,992,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RewritingOperatorAsSpaceship:\n      Diags.Report(Active->Entity->getLocation(), diag::note_rewriting_operator_as_spaceship);"}},
[k]={
["clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p3-2a.cpp:14:8: note: while rewriting comparison as call to \'operator<=>\' declared here"}
}
},
},
["note_riscv_repeated_interrupt_attribute"]={
["note_riscv_repeated_interrupt_attribute"]={
[c]="repeated RISC-V \'interrupt\' attribute is here",
[f]="repeated RISC-V \'interrupt\' attribute is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="repeated RISC-V \'interrupt\' attribute is here",
[d]="repeated RISC-V \'interrupt\' attribute is here",
[b]=m,
[e]=p,
[g]="repeated RISC\\-V \'interrupt\' attribute is here",
[a]="repeated RISC\\-V \'interrupt\' attribute is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"},
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"},
[j]={{u,7754,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn about repeated attributes.\n  if (const auto *A = D->getAttr<RISCVInterruptAttr>()) {\n    S.Diag(A->getLocation(), diag::note_riscv_repeated_interrupt_attribute);"}}
[j]={{v,7754,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn about repeated attributes.\n  if (const auto *A = D->getAttr<RISCVInterruptAttr>()) {\n    S.Diag(A->getLocation(), diag::note_riscv_repeated_interrupt_attribute);"}},
[k]={
["clang/test/Sema/riscv-interrupt-attr.c"]={"clang/test/Sema/riscv-interrupt-attr.c:41:16: note: repeated RISC-V \'interrupt\' attribute is here","clang/test/Sema/riscv-interrupt-attr.c:44:16: note: repeated RISC-V \'interrupt\' attribute is here"}
}
},
},
["note_safe_buffer_usage_suggestions_disabled"]={
["note_safe_buffer_usage_suggestions_disabled"]={
[c]="pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions",
[f]="pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions",
[d]="pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions",
[b]=m,
[e]=p,
[g]="pass \\-fsafe\\-buffer\\-usage\\-suggestions to receive code hardening suggestions",
[a]="pass \\-fsafe\\-buffer\\-usage\\-suggestions to receive code hardening suggestions",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{I,2217,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n    } else {\n      if (SuggestSuggestions) {\n        S.Diag(Loc, diag::note_safe_buffer_usage_suggestions_disabled);"}}
[j]={{J,2217,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n    } else {\n      if (SuggestSuggestions) {\n        S.Diag(Loc, diag::note_safe_buffer_usage_suggestions_disabled);"}},
[k]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-suggestions-flag.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-suggestions-flag.cpp:52:3: note: pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions","clang/test/SemaCXX/warn-unsafe-buffer-usage-suggestions-flag.cpp:57:3: note: pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions","clang/test/SemaCXX/warn-unsafe-buffer-usage-suggestions-flag.cpp:62:3: note: pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions"}
}
},
},
["note_second_module_difference"]={
["note_second_module_difference"]={
[c]="in second definition, possible difference is here",
[f]="in second definition, possible difference is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in second definition, possible difference is here",
[d]="in second definition, possible difference is here",
[b]=m,
[e]=p,
[g]="in second definition, possible difference is here",
[a]="in second definition, possible difference is here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted."},
[i]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted."},
[j]={{"clang/lib/AST/ODRDiagsEmitter.cpp",666,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  if (DR.SecondDecl) {\n    Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference) << DR.SecondDecl->getSourceRange();"}}
[j]={{"clang/lib/AST/ODRDiagsEmitter.cpp",666,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  if (DR.SecondDecl) {\n    Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference) << DR.SecondDecl->getSourceRange();"}}
},
},
["note_sentinel_here"]={
["note_sentinel_here"]={
[c]="... has been explicitly marked sentinel here",
[f]="... has been explicitly marked sentinel here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{function|method|block}0 has been explicitly marked sentinel here",
[d]="%select{function|method|block}0 has been explicitly marked sentinel here",
[b]=m,
[e]=p,
[g]="(?:function|method|block) has been explicitly marked sentinel here",
[a]="(?:function|method|block) has been explicitly marked sentinel here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"},
[i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"},
[j]={{C,474,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // If there aren\'t enough arguments for all the formal parameters,\n  // the sentinel, and the args after the sentinel, complain.\n  if (Args.size() < numFormalParams + numArgsAfterSentinel + 1) {\n    Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"},{C,505,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"}}
[j]={{D,474,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // If there aren\'t enough arguments for all the formal parameters,\n  // the sentinel, and the args after the sentinel, complain.\n  if (Args.size() < numFormalParams + numArgsAfterSentinel + 1) {\n    Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"},{D,505,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"}},
[k]={
["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:8:1: note: method has been explicitly marked sentinel here","clang/test/SemaObjC/method-sentinel-attr.m:10:1: note: method has been explicitly marked sentinel here","clang/test/SemaObjC/method-sentinel-attr.m:11:1: note: method has been explicitly marked sentinel here","clang/test/SemaObjC/method-sentinel-attr.m:12:1: note: method has been explicitly marked sentinel here","clang/test/SemaObjC/method-sentinel-attr.m:17:1: note: method has been explicitly marked sentinel here"}
}
},
},
["note_shadow_field"]={
["note_shadow_field"]={
[c]="declared here",
[f]="declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="declared here",
[d]="declared here",
[b]=m,
[e]=p,
[g]="declared here",
[a]="declared here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"},
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"},
[j]={{y,3393,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n  for (const auto &P : Paths) {\n    if (AS_none != CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {\n      Diag(BaseField->getLocation(), diag::note_shadow_field);"}}
[j]={{z,3393,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n  for (const auto &P : Paths) {\n    if (AS_none != CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {\n      Diag(BaseField->getLocation(), diag::note_shadow_field);"}}
},
},
["note_silence_aligned_allocation_unavailable"]={
["note_silence_aligned_allocation_unavailable"]={
[c]="if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic",
[f]="if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic",
[d]="if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic",
[b]=m,
[e]=p,
[g]="if you supply your own aligned allocation functions, use \\-faligned\\-allocation to silence this diagnostic",
[a]="if you supply your own aligned allocation functions, use \\-faligned\\-allocation to silence this diagnostic",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"751381db5a39",1534866864,"[clang][NFC] Fix typo in the name of a note"},
[i]={"751381db5a39",1534866864,"[clang][NFC] Fix typo in the name of a note"},
[j]={{Ub,1971,"// 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::note_silence_aligned_allocation_unavailable);"}}
[j]={{dc,1971,"// 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::note_silence_aligned_allocation_unavailable);"}},
[k]={
["clang/test/SemaCXX/unavailable_aligned_allocation.cpp"]={"clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:54:3: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:59:3: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:140:16: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:173:13: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:174:3: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:175:7: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:176:3: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:177:7: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:178:3: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic"}
}
},
},
["note_single_arg_concept_specialization_constraint_evaluated_to_false"]={
["note_single_arg_concept_specialization_constraint_evaluated_to_false"]={
[c]="... A does not satisfy B",
[f]="... A does not satisfy B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{and|because}0 %1 does not satisfy %2",
[d]="%select{and|because}0 %1 does not satisfy %2",
[b]=m,
[e]=p,
[g]="(?:and|because) (.*?) does not satisfy (.*?)",
[a]="(?:and|because) (.*?) does not satisfy (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",1102,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n  } else if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(SubstExpr)) {\n    if (CSE->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n      S.Diag(CSE->getSourceRange().getBegin(), diag::note_single_arg_concept_specialization_constraint_evaluated_to_false) << (int)First << CSE->getTemplateArgsAsWritten()->arguments()[0].getArgument() << CSE->getNamedConcept();"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",1102,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n  } else if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(SubstExpr)) {\n    if (CSE->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n      S.Diag(CSE->getSourceRange().getBegin(), diag::note_single_arg_concept_specialization_constraint_evaluated_to_false) << (int)First << CSE->getTemplateArgsAsWritten()->arguments()[0].getArgument() << CSE->getNamedConcept();"}},
[k]={
["clang/test/CXX/temp/temp.constr/temp.constr.decl/p3.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/p3.cpp:24:10: note: because \'int\' does not satisfy \'False\'"}
}
},
},
["note_specialized_decl"]={
["note_specialized_decl"]={
[c]="attempt to specialize declaration here",
[f]="attempt to specialize declaration here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="attempt to specialize declaration here",
[d]="attempt to specialize declaration here",
[b]=m,
[e]=p,
[g]="attempt to specialize declaration here",
[a]="attempt to specialize declaration here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5c0405d48454",1254954940,"Type checking for specializations of member functions of class"},
[i]={"5c0405d48454",1254954940,"Type checking for specializations of member functions of class"},
[j]={{x,9717,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Instantiation->getLocation(), diag::note_specialized_decl);"}}
[j]={{y,9717,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Instantiation->getLocation(), diag::note_specialized_decl);"}},
[k]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:10:8: note: attempt to specialize declaration here"}
}
},
},
["note_specialized_entity"]={
["note_specialized_entity"]={
[c]="explicitly specialized declaration is here",
[f]="explicitly specialized declaration is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="explicitly specialized declaration is here",
[d]="explicitly specialized declaration is here",
[b]=m,
[e]=p,
[g]="explicitly specialized declaration is here",
[a]="explicitly specialized declaration is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[i]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[j]={{x,8420,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"},{x,8456,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"}}
[j]={{y,8420,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"},{y,8456,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"}},
[k]={
["clang/test/SemaTemplate/ext_ms_template_spec.cpp"]={"clang/test/SemaTemplate/ext_ms_template_spec.cpp:6:7: note: explicitly specialized declaration is here","clang/test/SemaTemplate/ext_ms_template_spec.cpp:9:7: note: explicitly specialized declaration is here","clang/test/SemaTemplate/ext_ms_template_spec.cpp:12:10: note: explicitly specialized declaration is here","clang/test/SemaTemplate/ext_ms_template_spec.cpp:13:8: note: explicitly specialized declaration is here"}
}
},
},
["note_static_for_internal_linkage"]={
["note_static_for_internal_linkage"]={
[c]="declare \'static\' if the ... is not intended to be used outside of this translation unit",
[f]="declare \'static\' if the ... is not intended to be used outside of this translation unit",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="declare \'static\' if the %select{variable|function}0 is not intended to be used outside of this translation unit",
[d]="declare \'static\' if the %select{variable|function}0 is not intended to be used outside of this translation unit",
[b]=m,
[e]=p,
[g]="declare \'static\' if the (?:variable|function) is not intended to be used outside of this translation unit",
[a]="declare \'static\' if the (?:variable|function) is not intended to be used outside of this translation unit",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}"},
[i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}"},
[j]={{v,14079,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Warn about externally-visible variables being defined without a\n  // prior declaration.  We only want to do this for global\n  // declarations, but we also specifically need to avoid doing it for\n  // class members because the linkage of an anonymous class can\n  // change if it\'s later given a typedef name.\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {\n    if (!prev) {\n      Diag(var->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* variable */ 0;"},{v,15717,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        if (PossiblePrototype) {\n        } else {\n          Diag(FD->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* function */ 1 << (FD->getStorageClass() == SC_None ? FixItHint::CreateInsertion(findBeginLoc(), \"static \") : FixItHint{});"}}
[j]={{w,14079,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Warn about externally-visible variables being defined without a\n  // prior declaration.  We only want to do this for global\n  // declarations, but we also specifically need to avoid doing it for\n  // class members because the linkage of an anonymous class can\n  // change if it\'s later given a typedef name.\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {\n    if (!prev) {\n      Diag(var->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* variable */ 0;"},{w,15717,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        if (PossiblePrototype) {\n        } else {\n          Diag(FD->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* function */ 1 << (FD->getStorageClass() == SC_None ? FixItHint::CreateInsertion(findBeginLoc(), \"static \") : FixItHint{});"}},
[k]={
["clang/test/SemaCXX/warn-everthing.cpp"]={"clang/test/SemaCXX/warn-everthing.cpp:11:1: note: declare \'static\' if the function is not intended to be used outside of this translation unit"}
}
},
},
["note_string_plus_scalar_silence"]={
["note_string_plus_scalar_silence"]={
[c]="use array indexing to silence this warning",
[f]="use array indexing to silence this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use array indexing to silence this warning",
[d]="use array indexing to silence this warning",
[b]=m,
[e]=p,
[g]="use array indexing to silence this warning",
[a]="use array indexing to silence this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings."},
[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings."},
[j]={{C,11642,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{C,11677,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n  } else\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"},{C,11692,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{C,11701,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n  } else {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"}}
[j]={{D,11642,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{D,11677,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n  } else\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"},{D,11692,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{D,11701,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n  } else {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"}},
[k]={
["clang/test/Sema/string-plus-char.c"]={"clang/test/Sema/string-plus-char.c:6:16: note: use array indexing to silence this warning","clang/test/Sema/string-plus-char.c:11:20: note: use array indexing to silence this warning","clang/test/Sema/string-plus-char.c:13:28: note: use array indexing to silence this warning","clang/test/Sema/string-plus-char.c:15:13: note: use array indexing to silence this warning","clang/test/Sema/string-plus-char.c:18:16: note: use array indexing to silence this warning","clang/test/Sema/string-plus-char.c:20:20: note: use array indexing to silence this warning","clang/test/Sema/string-plus-char.c:24:23: note: use array indexing to silence this warning"}
}
},
},
["note_strlcpycat_wrong_size"]={
["note_strlcpycat_wrong_size"]={
[c]="change size argument to be the size of the destination",
[f]="change size argument to be the size of the destination",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="change size argument to be the size of the destination",
[d]="change size argument to be the size of the destination",
[b]=m,
[e]=p,
[g]="change size argument to be the size of the destination",
[a]="change size argument to be the size of the destination",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i..."},
[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i..."},
[j]={{F,12712,"// Warn if the user has made the \'size\' argument to strlcpy or strlcat\n// be the size of the source, instead of the destination.\nvoid Sema::CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName) {\n  Diag(OriginalSizeArg->getBeginLoc(), diag::note_strlcpycat_wrong_size) << FixItHint::CreateReplacement(OriginalSizeArg->getSourceRange(), OS.str());"}}
[j]={{F,12712,"// Warn if the user has made the \'size\' argument to strlcpy or strlcat\n// be the size of the source, instead of the destination.\nvoid Sema::CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName) {\n  Diag(OriginalSizeArg->getBeginLoc(), diag::note_strlcpycat_wrong_size) << FixItHint::CreateReplacement(OriginalSizeArg->getSourceRange(), OS.str());"}},
[k]={
["clang/test/Sema/warn-strlcpycat-size.c"]={"clang/test/Sema/warn-strlcpycat-size.c:22:19: note: change size argument to be the size of the destination","clang/test/Sema/warn-strlcpycat-size.c:23:19: note: change size argument to be the size of the destination","clang/test/Sema/warn-strlcpycat-size.c:24:19: note: change size argument to be the size of the destination","clang/test/Sema/warn-strlcpycat-size.c:25:22: note: change size argument to be the size of the destination","clang/test/Sema/warn-strlcpycat-size.c:26:29: note: change size argument to be the size of the destination","clang/test/Sema/warn-strlcpycat-size.c:54:19: note: change size argument to be the size of the destination"}
}
},
},
["note_strncat_wrong_size"]={
["note_strncat_wrong_size"]={
[c]="change the argument to be the free space in the destination buffer minus the terminating null byte",
[f]="change the argument to be the free space in the destination buffer minus the terminating null byte",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="change the argument to be the free space in the destination buffer minus the terminating null byte",
[d]="change the argument to be the free space in the destination buffer minus the terminating null byte",
[b]=m,
[e]=p,
[g]="change the argument to be the free space in the destination buffer minus the terminating null byte",
[a]="change the argument to be the free space in the destination buffer minus the terminating null byte",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"},
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"},
[j]={{F,12816,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//  strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  Diag(SL, diag::note_strncat_wrong_size) << FixItHint::CreateReplacement(SR, OS.str());"}}
[j]={{F,12816,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//  strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  Diag(SL, diag::note_strncat_wrong_size) << FixItHint::CreateReplacement(SR, OS.str());"}},
[k]={
["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:33:22: note: change the argument to be the free space in the destination buffer minus the terminating null byte","clang/test/Sema/warn-strncat-size.c:35:22: note: change the argument to be the free space in the destination buffer minus the terminating null byte","clang/test/Sema/warn-strncat-size.c:37:48: note: change the argument to be the free space in the destination buffer minus the terminating null byte","clang/test/Sema/warn-strncat-size.c:39:52: note: change the argument to be the free space in the destination buffer minus the terminating null byte","clang/test/Sema/warn-strncat-size.c:41:29: note: change the argument to be the free space in the destination buffer minus the terminating null byte","clang/test/Sema/warn-strncat-size.c:43:22: note: change the argument to be the free space in the destination buffer minus the terminating null byte","clang/test/Sema/warn-strncat-size.c:70:19: note: change the argument to be the free space in the destination buffer minus the terminating null byte"}
}
},
},
["note_struct_class_suggestion"]={
["note_struct_class_suggestion"]={
[c]="did you mean ... here?",
[f]="did you mean ... here?",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="did you mean %select{struct|interface|class}0 here?",
[d]="did you mean %select{struct|interface|class}0 here?",
[b]=m,
[e]=p,
[g]="did you mean (?:struct|interface|class) here\\?",
[a]="did you mean (?:struct|interface|class) here\\?",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."},
[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."},
[j]={{v,16656,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (isDefinition) {\n    for (const TagDecl *I : Previous->redecls()) {\n      if (I->getTagKind() != NewTag) {\n        Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(NewTag) << FixItHint::CreateReplacement(I->getInnerLocStart(), TypeWithKeyword::getTagTypeKindName(NewTag));"},{v,16680,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    // If there is a previous definition, suggest a fix-it.\n    if (PrevDef) {\n      Diag(NewTagLoc, diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(Redecl->getTagKind()) << FixItHint::CreateReplacement(SourceRange(NewTagLoc), TypeWithKeyword::getTagTypeKindName(Redecl->getTagKind()));"}}
[j]={{w,16656,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (isDefinition) {\n    for (const TagDecl *I : Previous->redecls()) {\n      if (I->getTagKind() != NewTag) {\n        Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(NewTag) << FixItHint::CreateReplacement(I->getInnerLocStart(), TypeWithKeyword::getTagTypeKindName(NewTag));"},{w,16680,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    // If there is a previous definition, suggest a fix-it.\n    if (PrevDef) {\n      Diag(NewTagLoc, diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(Redecl->getTagKind()) << FixItHint::CreateReplacement(SourceRange(NewTagLoc), TypeWithKeyword::getTagTypeKindName(Redecl->getTagKind()));"}},
[k]={
["clang/test/SemaCXX/struct-class-redecl.cpp"]={"clang/test/SemaCXX/struct-class-redecl.cpp:7:22: note: did you mean class here?","clang/test/SemaCXX/struct-class-redecl.cpp:21:1: note: did you mean struct here?","clang/test/SemaCXX/struct-class-redecl.cpp:20:1: note: did you mean struct here?","clang/test/SemaCXX/struct-class-redecl.cpp:32:1: note: did you mean class here?","clang/test/SemaCXX/struct-class-redecl.cpp:27:1: note: did you mean class here?","clang/test/SemaCXX/struct-class-redecl.cpp:40:1: note: did you mean struct here?","clang/test/SemaCXX/struct-class-redecl.cpp:52:1: note: did you mean struct here?","clang/test/SemaCXX/struct-class-redecl.cpp:54:19: note: did you mean struct here?"}
}
},
},
["note_substituted_constraint_expr_is_ill_formed"]={
["note_substituted_constraint_expr_is_ill_formed"]={
[c]="because substituted constraint expression is ill-formedA",
[f]="because substituted constraint expression is ill-formedA",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="because substituted constraint expression is ill-formed%0",
[d]="because substituted constraint expression is ill-formed%0",
[b]=m,
[e]=p,
[g]="because substituted constraint expression is ill\\-formed(.*?)",
[a]="because substituted constraint expression is ill\\-formed(.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",1576,"template <typename SubstitutionDiagnostic> static void diagnoseUnsatisfiedConstraintExpr(Sema &S, const Expr *E, const llvm::PointerUnion<Expr *, SubstitutionDiagnostic *> &Record, bool First = true) {\n  if (auto *Diag = Record.template dyn_cast<SubstitutionDiagnostic *>()) {\n    S.Diag(Diag->first, diag::note_substituted_constraint_expr_is_ill_formed) << Diag->second;"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",1576,"template <typename SubstitutionDiagnostic> static void diagnoseUnsatisfiedConstraintExpr(Sema &S, const Expr *E, const llvm::PointerUnion<Expr *, SubstitutionDiagnostic *> &Record, bool First = true) {\n  if (auto *Diag = Record.template dyn_cast<SubstitutionDiagnostic *>()) {\n    S.Diag(Diag->first, diag::note_substituted_constraint_expr_is_ill_formed) << Diag->second;"}},
[k]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/function-templates.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/function-templates.cpp:26:36: note: because substituted constraint expression is ill-formed: invalid operands to binary expression (\'A\' and \'A\')","clang/test/CXX/temp/temp.constr/temp.constr.constr/function-templates.cpp:32:39: note: because substituted constraint expression is ill-formed: invalid operands to binary expression (\'A\' and \'A\')"}
}
},
},
["note_suggest_disabling_all_checkers"]={
["note_suggest_disabling_all_checkers"]={
[c]="use -analyzer-disable-all-checks to disable all static analyzer checkers",
[f]="use -analyzer-disable-all-checks to disable all static analyzer checkers",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use -analyzer-disable-all-checks to disable all static analyzer checkers",
[d]="use -analyzer-disable-all-checks to disable all static analyzer checkers",
[b]=m,
[e]=p,
[g]="use \\-analyzer\\-disable\\-all\\-checks to disable all static analyzer checkers",
[a]="use \\-analyzer\\-disable\\-all\\-checks to disable all static analyzer checkers",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"d5478fdd8f05",1409342498,"Add an option to silence all analyzer warnings."},
[i]={"d5478fdd8f05",1409342498,"Add an option to silence all analyzer warnings."},
[j]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",179,"#endif\n  // Parse \'-analyzer-checker\' and \'-analyzer-disable-checker\' options from the\n  // command line.\n  for (const std::pair<std::string, bool> &Opt : AnOpts.CheckersAndPackages) {\n    if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n      Diags.Report(diag::note_suggest_disabling_all_checkers);"}}
[j]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",179,"#endif\n  // Parse \'-analyzer-checker\' and \'-analyzer-disable-checker\' options from the\n  // command line.\n  for (const std::pair<std::string, bool> &Opt : AnOpts.CheckersAndPackages) {\n    if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n      Diags.Report(diag::note_suggest_disabling_all_checkers);"}}
},
},
["note_suggest_parens_for_macro"]={
["note_suggest_parens_for_macro"]={
[c]="parentheses are required around macro argument containing braced initializer list",
[f]="parentheses are required around macro argument containing braced initializer list",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="parentheses are required around macro argument containing braced initializer list",
[d]="parentheses are required around macro argument containing braced initializer list",
[b]=m,
[e]=p,
[g]="parentheses are required around macro argument containing braced initializer list",
[a]="parentheses are required around macro argument containing braced initializer list",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a"},
[i]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a"},
[j]={{wc,955,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    DiagnosticBuilder DB = Diag(MacroName, diag::note_suggest_parens_for_macro);"}}
[j]={{Vc,955,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    DiagnosticBuilder DB = Diag(MacroName, diag::note_suggest_parens_for_macro);"}},
[k]={
["clang/test/Lexer/update_consecutive_macro_crash.cpp"]={"clang/test/Lexer/update_consecutive_macro_crash.cpp:14:3: note: parentheses are required around macro argument containing braced initializer list"}
}
},
},
["note_suppress_ctad_maybe_unsupported"]={
["note_suppress_ctad_maybe_unsupported"]={
[c]="add a deduction guide to suppress this warning",
[f]="add a deduction guide to suppress this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="add a deduction guide to suppress this warning",
[d]="add a deduction guide to suppress this warning",
[b]=m,
[e]=p,
[g]="add a deduction guide to suppress this warning",
[a]="add a deduction guide to suppress this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."},
[i]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."},
[j]={{U,10919,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // Warn if CTAD was used on a type that does not have any user-defined\n  // deduction guides.\n  if (!FoundDeductionGuide) {\n    Diag(Template->getLocation(), diag::note_suppress_ctad_maybe_unsupported);"}}
[j]={{W,10919,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // Warn if CTAD was used on a type that does not have any user-defined\n  // deduction guides.\n  if (!FoundDeductionGuide) {\n    Diag(Template->getLocation(), diag::note_suppress_ctad_maybe_unsupported);"}},
[k]={
["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:452:8: note: add a deduction guide to suppress this warning","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:471:8: note: add a deduction guide to suppress this warning","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:480:8: note: add a deduction guide to suppress this warning"}
}
},
},
["note_suppressed_class_declare"]={
["note_suppressed_class_declare"]={
[c]="class with specified objc_requires_property_definitions attribute is declared here",
[f]="class with specified objc_requires_property_definitions attribute is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="class with specified objc_requires_property_definitions attribute is declared here",
[d]="class with specified objc_requires_property_definitions attribute is declared here",
[b]=m,
[e]=p,
[g]="class with specified objc_requires_property_definitions attribute is declared here",
[a]="class with specified objc_requires_property_definitions attribute is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"783ffde6d3f0",1325718973,"objc: When issuing warning for missing synthesis for"},
[i]={"783ffde6d3f0",1325718973,"objc: When issuing warning for missing synthesis for"},
[j]={{E,2026,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    if (S.LangOpts.ObjCDefaultSynthProperties && S.LangOpts.ObjCRuntime.isNonFragile())\n      if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl))\n        if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs())\n          S.Diag(RID->getLocation(), diag::note_suppressed_class_declare);"}}
[j]={{G,2026,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    if (S.LangOpts.ObjCDefaultSynthProperties && S.LangOpts.ObjCRuntime.isNonFragile())\n      if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl))\n        if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs())\n          S.Diag(RID->getLocation(), diag::note_suppressed_class_declare);"}},
[k]={
["clang/test/SemaObjC/default-synthesize-3.m"]={"clang/test/SemaObjC/default-synthesize-3.m:7:12: note: class with specified objc_requires_property_definitions attribute is declared here","clang/test/SemaObjC/default-synthesize-3.m:7:12: note: class with specified objc_requires_property_definitions attribute is declared here","clang/test/SemaObjC/default-synthesize-3.m:16:12: note: class with specified objc_requires_property_definitions attribute is declared here","clang/test/SemaObjC/default-synthesize-3.m:16:12: note: class with specified objc_requires_property_definitions attribute is declared here","clang/test/SemaObjC/default-synthesize-3.m:16:12: note: class with specified objc_requires_property_definitions attribute is declared here"}
}
},
},
["note_surrounding_namespace_ends_here"]={
["note_surrounding_namespace_ends_here"]={
[c]="surrounding namespace with visibility attribute ends here",
[f]="surrounding namespace with visibility attribute ends here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="surrounding namespace with visibility attribute ends here",
[d]="surrounding namespace with visibility attribute ends here",
[b]=m,
[e]=p,
[g]="surrounding namespace with visibility attribute ends here",
[a]="surrounding namespace with visibility attribute ends here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[j]={{sb,1380,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(EndLoc, diag::note_surrounding_namespace_ends_here);"}}
[j]={{wb,1380,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(EndLoc, diag::note_surrounding_namespace_ends_here);"}},
[k]={
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:10:1: note: surrounding namespace with visibility attribute ends here"}
}
},
},
["note_surrounding_namespace_starts_here"]={
["note_surrounding_namespace_starts_here"]={
[c]="surrounding namespace with visibility attribute starts here",
[f]="surrounding namespace with visibility attribute starts here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="surrounding namespace with visibility attribute starts here",
[d]="surrounding namespace with visibility attribute starts here",
[b]=m,
[e]=p,
[g]="surrounding namespace with visibility attribute starts here",
[a]="surrounding namespace with visibility attribute starts here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[j]={{sb,1,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(Back->second, diag::note_surrounding_namespace_starts_here);"}}
[j]={{wb,1,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(Back->second, diag::note_surrounding_namespace_starts_here);"}},
[k]={
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:3:11: note: surrounding namespace with visibility attribute starts here"}
}
},
},
["note_suspicious_bzero_size_silence"]={
["note_suspicious_bzero_size_silence"]={
[c]="parenthesize the second argument to silence",
[f]="parenthesize the second argument to silence",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="parenthesize the second argument to silence",
[d]="parenthesize the second argument to silence",
[b]=m,
[e]=p,
[g]="parenthesize the second argument to silence",
[a]="parenthesize the second argument to silence",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[j]={{F,12394,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n      S.Diag(DiagLoc, diag::note_suspicious_bzero_size_silence);"}}
[j]={{F,12394,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n      S.Diag(DiagLoc, diag::note_suspicious_bzero_size_silence);"}},
[k]={
["clang/test/Sema/transpose-memset.c"]={"clang/test/Sema/transpose-memset.c:29:14: note: parenthesize the second argument to silence","clang/test/Sema/transpose-memset.c:30:19: note: parenthesize the second argument to silence","clang/test/Sema/transpose-memset.c:51:3: note: parenthesize the second argument to silence","clang/test/Sema/transpose-memset.c:62:26: note: parenthesize the second argument to silence"}
}
},
},
["note_suspicious_sizeof_memset_silence"]={
["note_suspicious_sizeof_memset_silence"]={
[c]="... to silence",
[f]="... to silence",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{parenthesize the third argument|cast the second argument to \'int\'}0 to silence",
[d]="%select{parenthesize the third argument|cast the second argument to \'int\'}0 to silence",
[b]=m,
[e]=p,
[g]="(?:parenthesize the third argument|cast the second argument to \'int\') to silence",
[a]="(?:parenthesize the third argument|cast the second argument to \'int\') to silence",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[j]={{F,12397,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n    } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n      S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 0;"},{F,12410,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // If the second argument to a memset is a sizeof expression and the third\n  // isn\'t, this is also likely an error. This should catch\n  // \'memset(buf, sizeof(buf), 0xff)\'.\n  if (BId == Builtin::BImemset && doesExprLikelyComputeSize(Call->getArg(1)) && !doesExprLikelyComputeSize(Call->getArg(2))) {\n    S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 1;"}}
[j]={{F,12397,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n    } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n      S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 0;"},{F,12410,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // If the second argument to a memset is a sizeof expression and the third\n  // isn\'t, this is also likely an error. This should catch\n  // \'memset(buf, sizeof(buf), 0xff)\'.\n  if (BId == Builtin::BImemset && doesExprLikelyComputeSize(Call->getArg(1)) && !doesExprLikelyComputeSize(Call->getArg(2))) {\n    S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 1;"}},
[k]={
["clang/test/Sema/transpose-memset.c"]={"clang/test/Sema/transpose-memset.c:12:32: note: parenthesize the third argument to silence","clang/test/Sema/transpose-memset.c:13:17: note: cast the second argument to \'int\' to silence","clang/test/Sema/transpose-memset.c:14:32: note: parenthesize the third argument to silence","clang/test/Sema/transpose-memset.c:15:28: note: parenthesize the third argument to silence","clang/test/Sema/transpose-memset.c:16:15: note: cast the second argument to \'int\' to silence","clang/test/Sema/transpose-memset.c:17:28: note: parenthesize the third argument to silence","clang/test/Sema/transpose-memset.c:18:15: note: cast the second argument to \'int\' to silence","clang/test/Sema/transpose-memset.c:19:15: note: cast the second argument to \'int\' to silence","clang/test/Sema/transpose-memset.c:20:15: note: cast the second argument to \'int\' to silence","clang/test/Sema/transpose-memset.c:38:17: note: cast the second argument to \'int\' to silence","clang/test/Sema/transpose-memset.c:51:3: note: parenthesize the third argument to silence","clang/test/Sema/transpose-memset.c:61:30: note: parenthesize the third argument to silence"}
}
},
},
["note_switch_conversion"]={
["note_switch_conversion"]={
[c]="conversion to ... type A",
[f]="conversion to ... type A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="conversion to %select{integral|enumeration}0 type %1",
[d]="conversion to %select{integral|enumeration}0 type %1",
[b]=m,
[e]=p,
[g]="conversion to (?:integral|enumeration) type (.*?)",
[a]="conversion to (?:integral|enumeration) type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[i]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[j]={{O,1056,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{O,1067,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}}
[j]={{P,1056,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{P,1067,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}},
[k]={
["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:5:12: note: conversion to integral type \'int\'"}
}
},
},
["note_tail_call_required"]={
["note_tail_call_required"]={
[c]="tail call required by A attribute here",
[f]="tail call required by A attribute here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="tail call required by %0 attribute here",
[d]="tail call required by %0 attribute here",
[b]=m,
[e]=p,
[g]="tail call required by (.*?) attribute here",
[a]="tail call required by (.*?) attribute here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[j]={{O,687,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,745,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,781,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,801,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,859,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"}}
[j]={{P,687,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{P,745,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{P,781,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{P,801,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{P,859,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"}},
[k]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:19:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:25:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:31:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:40:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:47:7: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:86:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:135:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:139:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:149:7: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:156:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:162:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:174:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:185:7: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:192:7: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:211:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:233:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:240:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:252:5: note: tail call required by \'musttail\' attribute here","clang/test/SemaCXX/attr-musttail.cpp:110:5: note: tail call required by \'musttail\' attribute here"}
}
},
},
["note_template_arg_internal_object"]={
["note_template_arg_internal_object"]={
[c]="non-type template argument refers to ... here",
[f]="non-type template argument refers to ... here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="non-type template argument refers to %select{function|object}0 here",
[d]="non-type template argument refers to %select{function|object}0 here",
[b]=m,
[e]=p,
[g]="non\\-type template argument refers to (?:function|object) here",
[a]="non\\-type template argument refers to (?:function|object) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,6875,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"},{x,6880,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"}}
[j]={{y,6875,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"},{y,6880,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"}},
[k]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:167:31: note: non-type template argument refers to function here"}
}
},
},
["note_template_arg_refers_here"]={
["note_template_arg_refers_here"]={
[c]="non-type template argument refers here",
[f]="non-type template argument refers here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="non-type template argument refers here",
[d]="non-type template argument refers here",
[b]=m,
[e]=p,
[g]="non\\-type template argument refers here",
[a]="non\\-type template argument refers here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,6864,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_refers_here);"},{x,6898,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Var->getLocation(), diag::note_template_arg_refers_here);"},{x,7099,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  S.Diag(DRE->getDecl()->getLocation(), diag::note_template_arg_refers_here);"}}
[j]={{y,6864,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_refers_here);"},{y,6898,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Var->getLocation(), diag::note_template_arg_refers_here);"},{y,7099,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  S.Diag(DRE->getDecl()->getLocation(), diag::note_template_arg_refers_here);"}},
[k]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:19:18: note: non-type template argument refers here"}
}
},
},
["note_template_arg_refers_here_func"]={
["note_template_arg_refers_here_func"]={
[c]="template argument refers to function template A, here",
[f]="template argument refers to function template A, here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="template argument refers to function template %0, here",
[d]="template argument refers to function template %0, here",
[b]=m,
[e]=p,
[g]="template argument refers to function template (.*?), here",
[a]="template argument refers to function template (.*?), here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,7774,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++0x [temp.arg.template]p1:\n  //  A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //  id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    Diag(Template->getLocation(), diag::note_template_arg_refers_here_func) << Template;"}}
[j]={{y,7774,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++0x [temp.arg.template]p1:\n  //  A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //  id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    Diag(Template->getLocation(), diag::note_template_arg_refers_here_func) << Template;"}}
},
},
["note_template_class_explicit_specialization_was_here"]={
["note_template_class_explicit_specialization_was_here"]={
[c]="class template A was explicitly specialized here",
[f]="class template A was explicitly specialized here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="class template %0 was explicitly specialized here",
[d]="class template %0 was explicitly specialized here",
[b]=m,
[e]=p,
[g]="class template (.*?) was explicitly specialized here",
[a]="class template (.*?) was explicitly specialized here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[j]={{y,6661,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  if (BaseTemplateSpec->isExplicitSpecialization()) {\n    Diag(BaseTemplateSpec->getLocation(), diag::note_template_class_explicit_specialization_was_here) << BaseTemplateSpec;"}}
[j]={{z,6661,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  if (BaseTemplateSpec->isExplicitSpecialization()) {\n    Diag(BaseTemplateSpec->getLocation(), diag::note_template_class_explicit_specialization_was_here) << BaseTemplateSpec;"}},
[k]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:451:20: note: class template \'ExplicitlySpecializedTemplate<int>\' was explicitly specialized here"}
}
},
},
["note_template_class_instantiation_here"]={
["note_template_class_instantiation_here"]={
[c]="in instantiation of template class A requested here",
[f]="in instantiation of template class A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of template class %q0 requested here",
[d]="in instantiation of template class %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of template class (.*?) requested here",
[a]="in instantiation of template class (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{gb,766,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        if (isa<ClassTemplateSpecializationDecl>(Record))\n          DiagID = diag::note_template_class_instantiation_here;"}}
[j]={{eb,766,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        if (isa<ClassTemplateSpecializationDecl>(Record))\n          DiagID = diag::note_template_class_instantiation_here;"}},
[k]={
["clang/test/SemaTemplate/instantiate-typedef.cpp"]={"clang/test/SemaTemplate/instantiate-typedef.cpp:14:1: note: in instantiation of template class \'add_pointer<int &>\' requested here"}
}
},
},
["note_template_class_instantiation_was_here"]={
["note_template_class_instantiation_was_here"]={
[c]="class template A was instantiated here",
[f]="class template A was instantiated here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="class template %0 was instantiated here",
[d]="class template %0 was instantiated here",
[b]=m,
[e]=p,
[g]="class template (.*?) was instantiated here",
[a]="class template (.*?) was instantiated here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[j]={{y,6665,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  if (BaseTemplateSpec->isExplicitSpecialization()) {\n  } else {\n    Diag(BaseTemplateSpec->getPointOfInstantiation(), diag::note_template_class_instantiation_was_here) << BaseTemplateSpec;"}}
[j]={{z,6665,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  if (BaseTemplateSpec->isExplicitSpecialization()) {\n  } else {\n    Diag(BaseTemplateSpec->getPointOfInstantiation(), diag::note_template_class_instantiation_was_here) << BaseTemplateSpec;"}},
[k]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:461:17: note: class template \'ExplicitlyInstantiatedTemplate<int>\' was instantiated here"}
}
},
},
["note_template_decl_here"]={
["note_template_decl_here"]={
[c]="template is declared here",
[f]="template is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="template is declared here",
[d]="template is declared here",
[b]=m,
[e]=p,
[g]="template is declared here",
[a]="template is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{v,5863,"/// Retrieves the declaration name from a parsed unqualified-id.\nDeclarationNameInfo Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {\n  case UnqualifiedIdKind::IK_DeductionGuideName: {\n    if (!Template || !isa<ClassTemplateDecl>(Template)) {\n      if (Template)\n        Diag(Template->getLocation(), diag::note_template_decl_here);"},{y,11238,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [temp.deduct.guide]p3:\n  //  A deduction-gide shall be declared in the same scope as the\n  //  corresponding class template.\n  if (!CurContext->getRedeclContext()->Equals(GuidedTemplateDecl->getDeclContext()->getRedeclContext())) {\n    Diag(GuidedTemplateDecl->getLocation(), diag::note_template_decl_here);"},{U,10578,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  if (!Template) {\n    if (auto *TD = TemplateName.getAsTemplateDecl())\n      Diag(TD->getLocation(), diag::note_template_decl_here);"},{x,857,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Note = diag::note_template_decl_here;"},{x,4426,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n  S.Diag(Template->getLocation(), diag::note_template_decl_here);"},{x,4902,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  if (TemplateDecl *TD = Name.getAsTemplateDecl()) {\n    Diag(TD->getLocation(), diag::note_template_decl_here) << TD->getTemplateParameters()->getSourceRange();"},{x,5874,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(TD->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,5941,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,6170,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,11135,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::Found:\n    // C++ [dcl.type.simple]p2:\n    //  A type-specifier of the form\n    //    typename[opt] nested-name-specifier[opt] template-name\n    //  is a placeholder for a deduced class type [...].\n    if (getLangOpts().CPlusPlus17) {\n      if (auto *TD = getAsTypeTemplateDecl(Result.getFoundDecl())) {\n        if (!DeducedTSTContext) {\n          Diag(TD->getLocation(), diag::note_template_decl_here);"},{hb,3739,"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      if (auto *TD = TN.getAsTemplateDecl())\n        SemaRef.Diag(TD->getLocation(), diag::note_template_decl_here);"}}
[j]={{w,5863,"/// Retrieves the declaration name from a parsed unqualified-id.\nDeclarationNameInfo Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {\n  case UnqualifiedIdKind::IK_DeductionGuideName: {\n    if (!Template || !isa<ClassTemplateDecl>(Template)) {\n      if (Template)\n        Diag(Template->getLocation(), diag::note_template_decl_here);"},{z,11238,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [temp.deduct.guide]p3:\n  //  A deduction-gide shall be declared in the same scope as the\n  //  corresponding class template.\n  if (!CurContext->getRedeclContext()->Equals(GuidedTemplateDecl->getDeclContext()->getRedeclContext())) {\n    Diag(GuidedTemplateDecl->getLocation(), diag::note_template_decl_here);"},{W,10578,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  if (!Template) {\n    if (auto *TD = TemplateName.getAsTemplateDecl())\n      Diag(TD->getLocation(), diag::note_template_decl_here);"},{y,857,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Note = diag::note_template_decl_here;"},{y,4426,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n  S.Diag(Template->getLocation(), diag::note_template_decl_here);"},{y,4902,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  if (TemplateDecl *TD = Name.getAsTemplateDecl()) {\n    Diag(TD->getLocation(), diag::note_template_decl_here) << TD->getTemplateParameters()->getSourceRange();"},{y,5874,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(TD->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{y,5941,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{y,6170,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{y,11135,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::Found:\n    // C++ [dcl.type.simple]p2:\n    //  A type-specifier of the form\n    //    typename[opt] nested-name-specifier[opt] template-name\n    //  is a placeholder for a deduced class type [...].\n    if (getLangOpts().CPlusPlus17) {\n      if (auto *TD = getAsTypeTemplateDecl(Result.getFoundDecl())) {\n        if (!DeducedTSTContext) {\n          Diag(TD->getLocation(), diag::note_template_decl_here);"},{cb,3739,"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      if (auto *TD = TN.getAsTemplateDecl())\n        SemaRef.Diag(TD->getLocation(), diag::note_template_decl_here);"}},
[k]={
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:5:26: note: template is declared here"}
}
},
},
["note_template_declared_here"]={
["note_template_declared_here"]={
[c]="... A declared here",
[f]="... A declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{function template|class template|variable template|type alias template|template template parameter}0 %1 declared here",
[d]="%select{function template|class template|variable template|type alias template|template template parameter}0 %1 declared here",
[b]=m,
[e]=p,
[g]="(?:function template|class template|variable template|type alias template|template template parameter) (.*?) declared here",
[a]="(?:function template|class template|variable template|type alias template|template template parameter) (.*?) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[j]={{x,3620,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (TemplateDecl *Template = Name.getAsTemplateDecl()) {\n    Diag(Template->getLocation(), diag::note_template_declared_here) << (isa<FunctionTemplateDecl>(Template) ? 0 : isa<ClassTemplateDecl>(Template) ? 1 : isa<VarTemplateDecl>(Template) ? 2 : isa<TypeAliasTemplateDecl>(Template) ? 3 : 4) << Template->getDeclName();"},{x,3636,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (OverloadedTemplateStorage *OST = Name.getAsOverloadedTemplate()) {\n    for (OverloadedTemplateStorage::iterator I = OST->begin(), IEnd = OST->end(); I != IEnd; ++I)\n      Diag((*I)->getLocation(), diag::note_template_declared_here) << 0 << (*I)->getDeclName();"},{x,10559,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    // Check the new variable specialization against the parsed input.\n    if (PrevTemplate && !Context.hasSameType(Prev->getType(), R)) {\n      Diag(PrevTemplate->getLocation(), diag::note_template_declared_here) << 2 << PrevTemplate->getDeclName();"}}
[j]={{y,3620,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (TemplateDecl *Template = Name.getAsTemplateDecl()) {\n    Diag(Template->getLocation(), diag::note_template_declared_here) << (isa<FunctionTemplateDecl>(Template) ? 0 : isa<ClassTemplateDecl>(Template) ? 1 : isa<VarTemplateDecl>(Template) ? 2 : isa<TypeAliasTemplateDecl>(Template) ? 3 : 4) << Template->getDeclName();"},{y,3636,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (OverloadedTemplateStorage *OST = Name.getAsOverloadedTemplate()) {\n    for (OverloadedTemplateStorage::iterator I = OST->begin(), IEnd = OST->end(); I != IEnd; ++I)\n      Diag((*I)->getLocation(), diag::note_template_declared_here) << 0 << (*I)->getDeclName();"},{y,10559,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    // Check the new variable specialization against the parsed input.\n    if (PrevTemplate && !Context.hasSameType(Prev->getType(), R)) {\n      Diag(PrevTemplate->getLocation(), diag::note_template_declared_here) << 2 << PrevTemplate->getDeclName();"}},
[k]={
["clang/test/SemaTemplate/alias-nested-nontag.cpp"]={"clang/test/SemaTemplate/alias-nested-nontag.cpp:3:22: note: type alias template \'Id\' declared here"}
}
},
},
["note_template_default_arg_checking"]={
["note_template_default_arg_checking"]={
[c]="while checking a default template argument used here",
[f]="while checking a default template argument used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="while checking a default template argument used here",
[d]="while checking a default template argument used here",
[b]=m,
[e]=p,
[g]="while checking a default template argument used here",
[a]="while checking a default template argument used here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"84d49a2085bb",1257976463,"Improve diagnostics when a default template argument does not match"},
[i]={"84d49a2085bb",1257976463,"Improve diagnostics when a default template argument does not match"},
[j]={{gb,917,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultTemplateArgumentChecking: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_default_arg_checking) << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[j]={{eb,917,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultTemplateArgumentChecking: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_default_arg_checking) << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}},
[k]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:39:4: note: while checking a default template argument used here"}
}
},
},
["note_template_enum_def_here"]={
["note_template_enum_def_here"]={
[c]="in instantiation of enumeration A requested here",
[f]="in instantiation of enumeration A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of enumeration %q0 requested here",
[d]="in instantiation of enumeration %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of enumeration (.*?) requested here",
[a]="in instantiation of enumeration (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"4b38ded66a55",1331766790,"Instantiating a class template should not instantiate the definition of any"},
[i]={"4b38ded66a55",1331766790,"Instantiating a class template should not instantiate the definition of any"},
[j]={{gb,787,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_enum_def_here) << ED << Active->InstantiationRange;"}}
[j]={{eb,787,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_enum_def_here) << ED << Active->InstantiationRange;"}},
[k]={
["clang/test/CXX/temp/temp.spec/temp.explicit/p8.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p8.cpp:36:17: note: in instantiation of enumeration \'X1<int>::E\' requested here","clang/test/CXX/temp/temp.spec/temp.explicit/p8.cpp:40:17: note: in instantiation of enumeration \'X1<char>::E\' requested here"}
}
},
},
["note_template_exception_spec_instantiation_here"]={
["note_template_exception_spec_instantiation_here"]={
[c]="in instantiation of exception specification for A requested here",
[f]="in instantiation of exception specification for A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of exception specification for %0 requested here",
[d]="in instantiation of exception specification for %0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of exception specification for (.*?) requested here",
[a]="in instantiation of exception specification for (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f623c962600b",1334624280,"Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it."},
[i]={"f623c962600b",1334624280,"Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it."},
[j]={{gb,933,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExceptionSpecInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_exception_spec_instantiation_here) << cast<FunctionDecl>(Active->Entity) << Active->InstantiationRange;"}}
[j]={{eb,933,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExceptionSpecInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_exception_spec_instantiation_here) << cast<FunctionDecl>(Active->Entity) << Active->InstantiationRange;"}},
[k]={
["clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp"]={Gb,Gb,Gb,Gb,Gb,Gb,Gb,Gb,Gb,"clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp:12:17: note: in instantiation of exception specification for \'go\' requested here"}
}
},
},
["note_template_kw_refers_to_non_template"]={
["note_template_kw_refers_to_non_template"]={
[c]="declared as a non-template here",
[f]="declared as a non-template here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="declared as a non-template here",
[d]="declared as a non-template here",
[b]=m,
[e]=p,
[g]="declared as a non\\-template here",
[a]="declared as a non\\-template here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"7981004eb7bd",1526006588,"Improve diagnostics and error recovery for template name lookup."},
[i]={"7981004eb7bd",1526006588,"Improve diagnostics and error recovery for template name lookup."},
[j]={{x,562,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (Found.empty()) {\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n    if (ExampleLookupResult && RequiredTemplate) {\n      Diag(ExampleLookupResult->getUnderlyingDecl()->getLocation(), diag::note_template_kw_refers_to_non_template) << Found.getLookupName();"}}
[j]={{y,562,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (Found.empty()) {\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n    if (ExampleLookupResult && RequiredTemplate) {\n      Diag(ExampleLookupResult->getUnderlyingDecl()->getLocation(), diag::note_template_kw_refers_to_non_template) << Found.getLookupName();"}},
[k]={
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:18:10: note: declared as a non-template here"}
}
},
},
["note_template_member_class_here"]={
["note_template_member_class_here"]={
[c]="in instantiation of member class A requested here",
[f]="in instantiation of member class A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of member class %q0 requested here",
[d]="in instantiation of member class %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of member class (.*?) requested here",
[a]="in instantiation of member class (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only"},
[i]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only"},
[j]={{gb,764,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        unsigned DiagID = diag::note_template_member_class_here;"}}
[j]={{eb,764,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        unsigned DiagID = diag::note_template_member_class_here;"}},
[k]={
["clang/test/SemaCXX/base-class-ambiguity-check.cpp"]={"clang/test/SemaCXX/base-class-ambiguity-check.cpp:19:20: note: in instantiation of member class \'Foo2<int>::Derived\' requested here"}
}
},
},
["note_template_member_function_here"]={
["note_template_member_function_here"]={
[c]="in instantiation of member function A requested here",
[f]="in instantiation of member function A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of member function %q0 requested here",
[d]="in instantiation of member function %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of member function (.*?) requested here",
[a]="in instantiation of member function (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"8567358cc9e0",1242666117,"When instantiating the definition of a member function of a class"},
[i]={"8567358cc9e0",1242666117,"When instantiating the definition of a member function of a class"},
[j]={{gb,774,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n        if (Function->getPrimaryTemplate())\n        else\n          DiagID = diag::note_template_member_function_here;"}}
[j]={{eb,774,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n        if (Function->getPrimaryTemplate())\n        else\n          DiagID = diag::note_template_member_function_here;"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:39:42: note: in instantiation of member function \'bogus_override_if_virtual<(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:22:12)>::bogus_override_if_virtual\' requested here"}
}
},
},
["note_template_nontype_parm_different_type"]={
["note_template_nontype_parm_different_type"]={
[c]="template non-type parameter has a different type A in template argument",
[f]="template non-type parameter has a different type A in template argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="template non-type parameter has a different type %0 in template argument",
[d]="template non-type parameter has a different type %0 in template argument",
[b]=m,
[e]=p,
[g]="template non\\-type parameter has a different type (.*?) in template argument",
[a]="template non\\-type parameter has a different type (.*?) in template argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,8081,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            NextDiag = diag::note_template_nontype_parm_different_type;"}}
[j]={{y,8081,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            NextDiag = diag::note_template_nontype_parm_different_type;"}},
[k]={
["clang/test/SemaTemplate/instantiate-template-template-parm.cpp"]={"clang/test/SemaTemplate/instantiate-template-template-parm.cpp:23:13: note: template non-type parameter has a different type \'int\' in template argument","clang/test/SemaTemplate/instantiate-template-template-parm.cpp:43:15: note: template non-type parameter has a different type \'long\' in template argument"}
}
},
},
["note_template_nontype_parm_prev_declaration"]={
["note_template_nontype_parm_prev_declaration"]={
[c]="previous non-type template parameter with type A is here",
[f]="previous non-type template parameter with type A is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous non-type template parameter with type %0 is here",
[d]="previous non-type template parameter with type %0 is here",
[b]=m,
[e]=p,
[g]="previous non\\-type template parameter with type (.*?) is here",
[a]="previous non\\-type template parameter with type (.*?) is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,8087,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          S.Diag(OldNTTP->getLocation(), diag::note_template_nontype_parm_prev_declaration) << OldNTTP->getType();"}}
[j]={{y,8087,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          S.Diag(OldNTTP->getLocation(), diag::note_template_nontype_parm_prev_declaration) << OldNTTP->getType();"}},
[k]={
["clang/test/SemaTemplate/instantiate-template-template-parm.cpp"]={"clang/test/SemaTemplate/instantiate-template-template-parm.cpp:26:21: note: previous non-type template parameter with type \'long\' is here","clang/test/SemaTemplate/instantiate-template-template-parm.cpp:34:23: note: previous non-type template parameter with type \'int\' is here"}
}
},
},
["note_template_nsdmi_here"]={
["note_template_nsdmi_here"]={
[c]="in instantiation of default member initializer A requested here",
[f]="in instantiation of default member initializer A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of default member initializer %q0 requested here",
[d]="in instantiation of default member initializer %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of default member initializer (.*?) requested here",
[a]="in instantiation of default member initializer (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d60b82f93eee",1416267405,"Handle use of default member initializers before end of outermost class"},
[i]={"d60b82f93eee",1416267405,"Handle use of default member initializers before end of outermost class"},
[j]={{gb,792,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_nsdmi_here) << FD << Active->InstantiationRange;"}}
[j]={{eb,792,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_nsdmi_here) << FD << Active->InstantiationRange;"}},
[k]={
["clang/test/SemaTemplate/instantiate-sizeof.cpp"]={"clang/test/SemaTemplate/instantiate-sizeof.cpp:19:3: note: in instantiation of default member initializer \'M<S>::m\' requested here"}
}
},
},
["note_template_param_different_kind"]={
["note_template_param_different_kind"]={
[c]="template parameter has a different kind in template argument",
[f]="template parameter has a different kind in template argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="template parameter has a different kind in template argument",
[d]="template parameter has a different kind in template argument",
[b]=m,
[e]=p,
[g]="template parameter has a different kind in template argument",
[a]="template parameter has a different kind in template argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,8019,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        NextDiag = diag::note_template_param_different_kind;"}}
[j]={{y,8019,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        NextDiag = diag::note_template_param_different_kind;"}},
[k]={
["clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp:25:19: note: template parameter has a different kind in template argument","clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp:25:19: note: template parameter has a different kind in template argument","clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp:22:24: note: template parameter has a different kind in template argument","clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp:23:23: note: template parameter has a different kind in template argument","clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp:25:19: note: template parameter has a different kind in template argument","clang/test/SemaTemplate/temp_arg_template_cxx1z.cpp:23:13: note: template parameter has a different kind in template argument"}
}
},
},
["note_template_param_here"]={
["note_template_param_here"]={
[c]="template parameter is declared here",
[f]="template parameter is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="template parameter is declared here",
[d]="template parameter is declared here",
[b]=m,
[e]=p,
[g]="template parameter is declared here",
[a]="template parameter is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{"clang/lib/Sema/SemaLambda.cpp",1382,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(TP->getLocation(), diag::note_template_param_here);"},{x,900,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  Diag(PrevDecl->getLocation(), diag::note_template_param_here);"},{x,5257,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5286,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5733,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5753,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5974,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag((*Param)->getLocation(), diag::note_template_param_here);"},{x,6583,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6609,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6619,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6631,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6672,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6690,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6833,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6841,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6850,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6890,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6911,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6918,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6940,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6947,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7063,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7174,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    } else {\n      if (Result == TDK_AlreadyDiagnosed) {\n      } else if (Result != TDK_Success) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7184,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (ParamType.isNull()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7220,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // FIXME: When Param is a reference, should we check that Arg is an lvalue?\n  if (CTAK == CTAK_Deduced && (ParamType->isReferenceType() ? !Context.hasSameType(ParamType.getNonReferenceType(), Arg->getType()) : !Context.hasSameUnqualifiedType(ParamType, Arg->getType()))) {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7485,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7523,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7569,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      // Complain if an unsigned parameter received a negative value.\n      if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7584,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      if (RequiredBits > AllowedBits) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7706,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,8565,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    if (ParamUseRange.isValid()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here) << (IsDefaultArgument ? ParamUseRange : SourceRange()) << ParamUseRange;"}}
[j]={{"clang/lib/Sema/SemaLambda.cpp",1382,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(TP->getLocation(), diag::note_template_param_here);"},{y,900,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  Diag(PrevDecl->getLocation(), diag::note_template_param_here);"},{y,5257,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{y,5286,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{y,5733,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{y,5753,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{y,5974,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag((*Param)->getLocation(), diag::note_template_param_here);"},{y,6583,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6609,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6619,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6631,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6672,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6690,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6833,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6841,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6850,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6890,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6911,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6918,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6940,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,6947,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7063,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7174,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    } else {\n      if (Result == TDK_AlreadyDiagnosed) {\n      } else if (Result != TDK_Success) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7184,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (ParamType.isNull()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7220,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // FIXME: When Param is a reference, should we check that Arg is an lvalue?\n  if (CTAK == CTAK_Deduced && (ParamType->isReferenceType() ? !Context.hasSameType(ParamType.getNonReferenceType(), Arg->getType()) : !Context.hasSameUnqualifiedType(ParamType, Arg->getType()))) {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7485,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7523,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7569,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      // Complain if an unsigned parameter received a negative value.\n      if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7584,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      if (RequiredBits > AllowedBits) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{y,7706,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{y,8565,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    if (ParamUseRange.isValid()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here) << (IsDefaultArgument ? ParamUseRange : SourceRange()) << ParamUseRange;"}},
[k]={
["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:3:14: note: template parameter is declared here"}
}
},
},
["note_template_param_list_different_arity"]={
["note_template_param_list_different_arity"]={
[c]="... template parameters in template template argument",
[f]="... template parameters in template template argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{too few|too many}0 template parameters in template template argument",
[d]="%select{too few|too many}0 template parameters in template template argument",
[b]=m,
[e]=p,
[g]="(?:too few|too many) template parameters in template template argument",
[a]="(?:too few|too many) template parameters in template template argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,8168,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (TemplateArgLoc.isValid()) {\n    NextDiag = diag::note_template_param_list_different_arity;"}}
[j]={{y,8168,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (TemplateArgLoc.isValid()) {\n    NextDiag = diag::note_template_param_list_different_arity;"}},
[k]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:2:1: note: too few template parameters in template template argument"}
}
},
},
["note_template_param_prev_default_arg"]={
["note_template_param_prev_default_arg"]={
[c]="previous default template argument defined here",
[f]="previous default template argument defined here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous default template argument defined here",
[d]="previous default template argument defined here",
[b]=m,
[e]=p,
[g]="previous default template argument defined here",
[a]="previous default template argument defined here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,3042,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);"},{x,3061,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n    } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n      Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);"}}
[j]={{y,3042,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);"},{y,3061,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n    } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n      Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);"}},
[k]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:7:21: note: previous default template argument defined here","clang/test/CXX/temp/temp.param/p12.cpp:15:34: note: previous default template argument defined here","clang/test/CXX/temp/temp.param/p12.cpp:25:18: note: previous default template argument defined here"}
}
},
},
["note_template_param_prev_default_arg_in_other_module"]={
["note_template_param_prev_default_arg_in_other_module"]={
[c]="previous default template argument defined in module A",
[f]="previous default template argument defined in module A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous default template argument defined in module %0",
[d]="previous default template argument defined in module %0",
[b]=m,
[e]=p,
[g]="previous default template argument defined in module (.*?)",
[a]="previous default template argument defined in module (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{x,3050,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg_in_other_module) << PrevModuleName;"}}
[j]={{y,3050,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg_in_other_module) << PrevModuleName;"}}
},
},
["note_template_parameter_pack_here"]={
["note_template_parameter_pack_here"]={
[c]="previous ... parameter... declared here",
[f]="previous ... parameter... declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous %select{template type|non-type template|template template}0 parameter%select{| pack}1 declared here",
[d]="previous %select{template type|non-type template|template template}0 parameter%select{| pack}1 declared here",
[b]=m,
[e]=p,
[g]="previous (?:template type|non\\-type template|template template) parameter(?:| pack) declared here",
[a]="previous (?:template type|non\\-type template|template template) parameter(?:| pack) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[j]={{x,8050,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_parameter_pack_here) << ParamKind << Old->isParameterPack();"}}
[j]={{y,8050,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_parameter_pack_here) << ParamKind << Old->isParameterPack();"}},
[k]={
["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:8:22: note: previous template type parameter pack declared here","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:11:19: note: previous template type parameter declared here","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:17:31: note: previous template type parameter pack declared here","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:20:28: note: previous template type parameter declared here","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:23:17: note: previous non-type template parameter pack declared here","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:26:33: note: previous template template parameter declared here"}
}
},
},
["note_template_parameter_pack_non_pack"]={
["note_template_parameter_pack_non_pack"]={
[c]="... parameter... does not match ... parameter... in template argument",
[f]="... parameter... does not match ... parameter... in template argument",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{template type|non-type template|template template}0 parameter%select{| pack}1 does not match %select{template type|non-type template|template template}0 parameter%select{ pack|}1 in template argument",
[d]="%select{template type|non-type template|template template}0 parameter%select{| pack}1 does not match %select{template type|non-type template|template template}0 parameter%select{ pack|}1 in template argument",
[b]=m,
[e]=p,
[g]="(?:template type|non\\-type template|template template) parameter(?:| pack) does not match (?:template type|non\\-type template|template template) parameter(?: pack|) in template argument",
[a]="(?:template type|non\\-type template|template template) parameter(?:| pack) does not match (?:template type|non\\-type template|template template) parameter(?: pack|) in template argument",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[j]={{x,8042,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        NextDiag = diag::note_template_parameter_pack_non_pack;"}}
[j]={{y,8042,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        NextDiag = diag::note_template_parameter_pack_non_pack;"}}
},
},
["note_template_prev_declaration"]={
["note_template_prev_declaration"]={
[c]="previous template ... is here",
[f]="previous template ... is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous template %select{declaration|template parameter}0 is here",
[d]="previous template %select{declaration|template parameter}0 is here",
[b]=m,
[e]=p,
[g]="previous template (?:declaration|template parameter) is here",
[a]="previous template (?:declaration|template parameter) is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{y,604,"/// 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++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n        Diag(PrevForDefaultArgs->getLocation(), diag::note_template_prev_declaration) << false;"},{x,8023,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch);"},{x,8135,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(OldC ? OldC->getBeginLoc() : Old->getBeginLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"},{x,8174,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  S.Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch) << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());"},{x,8277,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    auto Diagnose = [&] {\n      Diag(OldRC ? OldRC->getBeginLoc() : Old->getTemplateLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"}}
[j]={{z,604,"/// 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++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n        Diag(PrevForDefaultArgs->getLocation(), diag::note_template_prev_declaration) << false;"},{y,8023,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch);"},{y,8135,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(OldC ? OldC->getBeginLoc() : Old->getBeginLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"},{y,8174,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  S.Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch) << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());"},{y,8277,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    auto Diagnose = [&] {\n      Diag(OldRC ? OldRC->getBeginLoc() : Old->getTemplateLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"}},
[k]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:35:10: note: previous template template parameter is here"}
}
},
},
["note_template_recursion_depth"]={
["note_template_recursion_depth"]={
[c]="use -ftemplate-depth=N to increase recursive template instantiation depth",
[f]="use -ftemplate-depth=N to increase recursive template instantiation depth",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use -ftemplate-depth=N to increase recursive template instantiation depth",
[d]="use -ftemplate-depth=N to increase recursive template instantiation depth",
[b]=m,
[e]=p,
[g]="use \\-ftemplate\\-depth\\=N to increase recursive template instantiation depth",
[a]="use \\-ftemplate\\-depth\\=N to increase recursive template instantiation depth",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{gb,726,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth) << SemaRef.getLangOpts().InstantiationDepth;"}}
[j]={{eb,726,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth) << SemaRef.getLangOpts().InstantiationDepth;"}},
[k]={
["clang/test/SemaCXX/invalid-requirement-requires-expr.cpp"]={"clang/test/SemaCXX/invalid-requirement-requires-expr.cpp:18:16: note: use -ftemplate-depth=N to increase recursive template instantiation depth"}
}
},
},
["note_template_requirement_instantiation_here"]={
["note_template_requirement_instantiation_here"]={
[c]="in instantiation of requirement here",
[f]="in instantiation of requirement here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of requirement here",
[d]="in instantiation of requirement here",
[b]=m,
[e]=p,
[g]="in instantiation of requirement here",
[a]="in instantiation of requirement here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{gb,940,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_instantiation_here) << Active->InstantiationRange;"}}
[j]={{eb,940,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_instantiation_here) << Active->InstantiationRange;"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:47:42: note: in instantiation of requirement here"}
}
},
},
["note_template_requirement_params_instantiation_here"]={
["note_template_requirement_params_instantiation_here"]={
[c]="in instantiation of requirement parameters here",
[f]="in instantiation of requirement parameters here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of requirement parameters here",
[d]="in instantiation of requirement parameters here",
[b]=m,
[e]=p,
[g]="in instantiation of requirement parameters here",
[a]="in instantiation of requirement parameters here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{gb,945,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementParameterInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_params_instantiation_here) << Active->InstantiationRange;"}}
[j]={{eb,945,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementParameterInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_params_instantiation_here) << Active->InstantiationRange;"}}
},
},
["note_template_static_data_member_def_here"]={
["note_template_static_data_member_def_here"]={
[c]="in instantiation of static data member A requested here",
[f]="in instantiation of static data member A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of static data member %q0 requested here",
[d]="in instantiation of static data member %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of static data member (.*?) requested here",
[a]="in instantiation of static data member (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"a6ef8f0813d5",1248467683,"Template instantiation for static data members that are defined out-of-line."},
[i]={"a6ef8f0813d5",1248467683,"Template instantiation for static data members that are defined out-of-line."},
[j]={{gb,781,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}}
[j]={{eb,781,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}},
[k]={
["clang/test/SemaTemplate/instantiate-scope.cpp"]={"clang/test/SemaTemplate/instantiate-scope.cpp:29:12: note: in instantiation of static data member \'X<void>::n\' requested here"}
}
},
},
["note_template_type_alias_instantiation_here"]={
["note_template_type_alias_instantiation_here"]={
[c]="in instantiation of template type alias A requested here",
[f]="in instantiation of template type alias A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of template type alias %0 requested here",
[d]="in instantiation of template type alias %0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of template type alias (.*?) requested here",
[a]="in instantiation of template type alias (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[j]={{gb,796,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n      } else {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_type_alias_instantiation_here) << cast<TypeAliasTemplateDecl>(D) << Active->InstantiationRange;"}}
[j]={{eb,796,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n      } else {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_type_alias_instantiation_here) << cast<TypeAliasTemplateDecl>(D) << Active->InstantiationRange;"}},
[k]={
["clang/test/CXX/temp/temp.decls/temp.alias/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.alias/p3.cpp:7:11: note: in instantiation of template type alias \'B\' requested here"}
}
},
},
["note_template_unnamed_type_here"]={
["note_template_unnamed_type_here"]={
[c]="unnamed type used in template argument was declared here",
[f]="unnamed type used in template argument was declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="unnamed type used in template argument was declared here",
[d]="unnamed type used in template argument was declared here",
[b]=m,
[e]=p,
[g]="unnamed type used in template argument was declared here",
[a]="unnamed type used in template argument was declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{x,6469,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);"}}
[j]={{y,6469,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);"}},
[k]={
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:9:1: note: unnamed type used in template argument was declared here"}
}
},
},
["note_template_variable_def_here"]={
["note_template_variable_def_here"]={
[c]="in instantiation of variable template specialization A requested here",
[f]="in instantiation of variable template specialization A requested here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in instantiation of variable template specialization %q0 requested here",
[d]="in instantiation of variable template specialization %q0 requested here",
[b]=m,
[e]=p,
[g]="in instantiation of variable template specialization (.*?) requested here",
[a]="in instantiation of variable template specialization (.*?) requested here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"dbd65779649e",1376511302,"Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static da..."},
[i]={"dbd65779649e",1376511302,"Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static da..."},
[j]={{gb,782,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}}
[j]={{eb,782,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}},
[k]={
["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:6:10: note: in instantiation of variable template specialization \'b<>\' requested here"}
}
},
},
["note_thread_warning_in_fun"]={
["note_thread_warning_in_fun"]={
[c]="thread warning in function A",
[f]="thread warning in function A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="thread warning in function %0",
[d]="thread warning in function %0",
[b]=m,
[e]=p,
[g]="thread warning in function (.*?)",
[a]="thread warning in function (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."},
[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."},
[j]={{I,1796,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes() const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{I,1807,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{I,1821,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note1, const PartialDiagnosticAt &Note2) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"}}
[j]={{J,1796,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes() const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{J,1807,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{J,1821,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note1, const PartialDiagnosticAt &Note2) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"}},
[k]={
["clang/test/SemaCXX/warn-thread-safety-verbose.cpp"]={"clang/test/SemaCXX/warn-thread-safety-verbose.cpp:30:16: note: thread warning in function \'test1\'","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:34:16: note: thread warning in function \'test2\'","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:38:16: note: thread warning in function \'test3\'","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:42:16: note: thread warning in function \'test4\'","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:46:16: note: thread warning in function \'test5\'","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:52:16: note: thread warning in function \'test6\'","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:58:16: note: thread warning in function \'test7\'"}
}
},
},
["note_throw_in_dtor"]={
["note_throw_in_dtor"]={
[c]="... has a ... exception specification",
[f]="... has a ... exception specification",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{destructor|deallocator}0 has a %select{non-throwing|implicit non-throwing}1 exception specification",
[d]="%select{destructor|deallocator}0 has a %select{non-throwing|implicit non-throwing}1 exception specification",
[b]=m,
[e]=p,
[g]="(?:destructor|deallocator) has a (?:non\\-throwing|implicit non\\-throwing) exception specification",
[a]="(?:destructor|deallocator) has a (?:non\\-throwing|implicit non\\-throwing) exception specification",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[j]={{I,365,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n      if (const auto *Ty = FD->getTypeSourceInfo()->getType()->getAs<FunctionProtoType>())\n        S.Diag(FD->getLocation(), diag::note_throw_in_dtor) << !isa<CXXDestructorDecl>(FD) << !Ty->hasExceptionSpec() << FD->getExceptionSpecSourceRange();"}}
[j]={{J,365,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n      if (const auto *Ty = FD->getTypeSourceInfo()->getType()->getAs<FunctionProtoType>())\n        S.Diag(FD->getLocation(), diag::note_throw_in_dtor) << !isa<CXXDestructorDecl>(FD) << !Ty->hasExceptionSpec() << FD->getExceptionSpecSourceRange();"}},
[k]={
["clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp"]={"clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:5:15: note: destructor has a implicit non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:14:3: note: destructor has a implicit non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:42:15: note: destructor has a implicit non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:47:3: note: destructor has a non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:52:3: note: destructor has a non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:104:6: note: deallocator has a non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:140:3: note: destructor has a non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:80:3: note: destructor has a implicit non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:93:3: note: destructor has a implicit non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:100:3: note: destructor has a non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:121:3: note: destructor has a non-throwing exception specification","clang/test/SemaCXX/warn-throw-out-noexcept-func.cpp:127:3: note: destructor has a non-throwing exception specification"}
}
},
},
["note_throw_in_function"]={
["note_throw_in_function"]={
[c]="function declared non-throwing here",
[f]="function declared non-throwing here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="function declared non-throwing here",
[d]="function declared non-throwing here",
[b]=m,
[e]=p,
[g]="function declared non\\-throwing here",
[a]="function declared non\\-throwing here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[j]={{I,369,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n    } else\n      S.Diag(FD->getLocation(), diag::note_throw_in_function) << FD->getExceptionSpecSourceRange();"}}
[j]={{J,369,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n    } else\n      S.Diag(FD->getLocation(), diag::note_throw_in_function) << FD->getExceptionSpecSourceRange();"}},
[k]={
["clang/test/CXX/except/except.spec/p11.cpp"]={"clang/test/CXX/except/except.spec/p11.cpp:4:6: note: function declared non-throwing here","clang/test/CXX/except/except.spec/p11.cpp:7:6: note: function declared non-throwing here"}
}
},
},
["note_throw_underaligned_obj"]={
["note_throw_underaligned_obj"]={
[c]="required alignment of type A (B bytes) is larger than the supported alignment of C++ exception objects on this target (C bytes)",
[f]="required alignment of type A (B bytes) is larger than the supported alignment of C++ exception objects on this target (C bytes)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="required alignment of type %0 (%1 bytes) is larger than the supported alignment of C++ exception objects on this target (%2 bytes)",
[d]="required alignment of type %0 (%1 bytes) is larger than the supported alignment of C++ exception objects on this target (%2 bytes)",
[b]=m,
[e]=p,
[g]="required alignment of type (.*?) \\((.*?) bytes\\) is larger than the supported alignment of C\\+\\+ exception objects on this target \\((.*?) bytes\\)",
[a]="required alignment of type (.*?) \\((.*?) bytes\\) is larger than the supported alignment of C\\+\\+ exception objects on this target \\((.*?) bytes\\)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on"},
[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on"},
[j]={{Ub,1092,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // Under the Itanium C++ ABI, memory for the exception object is allocated by\n  // the runtime with no ability for the compiler to request additional\n  // alignment. Warn if the exception type requires alignment beyond the minimum\n  // guaranteed by the target C++ runtime.\n  if (Context.getTargetInfo().getCXXABI().isItaniumFamily()) {\n    if (ExnObjAlign < TypeAlign) {\n      Diag(ThrowLoc, diag::note_throw_underaligned_obj) << Ty << (unsigned)TypeAlign.getQuantity() << (unsigned)ExnObjAlign.getQuantity();"}}
[j]={{dc,1092,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // Under the Itanium C++ ABI, memory for the exception object is allocated by\n  // the runtime with no ability for the compiler to request additional\n  // alignment. Warn if the exception type requires alignment beyond the minimum\n  // guaranteed by the target C++ runtime.\n  if (Context.getTargetInfo().getCXXABI().isItaniumFamily()) {\n    if (ExnObjAlign < TypeAlign) {\n      Diag(ThrowLoc, diag::note_throw_underaligned_obj) << Ty << (unsigned)TypeAlign.getQuantity() << (unsigned)ExnObjAlign.getQuantity();"}},
[k]={
["clang/test/SemaCXX/warn-overaligned-type-thrown.cpp"]={"clang/test/SemaCXX/warn-overaligned-type-thrown.cpp:53:3: note: required alignment of type \'Overaligned3\' (64 bytes) is larger than the supported alignment of C++ exception objects on this target (16 bytes)"}
}
},
},
["note_total_sloc_usage"]={
["note_total_sloc_usage"]={
[c]="AB in local locations, BB in locations loaded from AST files, for a total of CB (D% of available space)",
[f]="AB in local locations, BB in locations loaded from AST files, for a total of CB (D% of available space)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0B in local locations, %1B in locations loaded from AST files, for a total of %2B (%3%% of available space)",
[d]="%0B in local locations, %1B in locations loaded from AST files, for a total of %2B (%3%% of available space)",
[b]=m,
[e]=p,
[g]="(.*?)B in local locations, (.*?)B in locations loaded from AST files, for a total of (.*?)B \\((.*?)% of available space\\)",
[a]="(.*?)B in local locations, (.*?)B in locations loaded from AST files, for a total of (.*?)B \\((.*?)% of available space\\)",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[j]={{"clang/lib/Basic/SourceManager.cpp",2305,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  Diag.Report(SourceLocation(), diag::note_total_sloc_usage) << LocalUsage << LoadedUsage << (LocalUsage + LoadedUsage) << UsagePercent;"}}
[j]={{"clang/lib/Basic/SourceManager.cpp",2305,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  Diag.Report(SourceLocation(), diag::note_total_sloc_usage) << LocalUsage << LoadedUsage << (LocalUsage + LoadedUsage) << UsagePercent;"}},
[k]={
["clang/test/Misc/sloc-usage.cpp"]={"note: 15501B in local locations, 0B in locations loaded from AST files, for a total of 15501B (0% of available space)"}
}
},
},
["note_transparent_union_first_field_size_align"]={
["note_transparent_union_first_field_size_align"]={
[c]="... of first field is A bits",
[f]="... of first field is A bits",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{alignment|size}0 of first field is %1 bits",
[d]="%select{alignment|size}0 of first field is %1 bits",
[b]=m,
[e]=p,
[g]="(?:alignment|size) of first field is (.*?) bits",
[a]="(?:alignment|size) of first field is (.*?) bits",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"},
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"},
[j]={{u,4270,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (; Field != FieldEnd; ++Field) {\n    // FIXME: this isn\'t fully correct; we also need to test whether the\n    // members of the union would all have the same calling convention as the\n    // first member of the union. Checking just the size and alignment isn\'t\n    // sufficient (consider structs passed on the stack instead of in registers\n    // as an example).\n    if (S.Context.getTypeSize(FieldType) != FirstSize || S.Context.getTypeAlign(FieldType) > FirstAlign) {\n      S.Diag(FirstField->getLocation(), diag::note_transparent_union_first_field_size_align) << isSize << FirstBits;"}}
[j]={{v,4270,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (; Field != FieldEnd; ++Field) {\n    // FIXME: this isn\'t fully correct; we also need to test whether the\n    // members of the union would all have the same calling convention as the\n    // first member of the union. Checking just the size and alignment isn\'t\n    // sufficient (consider structs passed on the stack instead of in registers\n    // as an example).\n    if (S.Context.getTypeSize(FieldType) != FirstSize || S.Context.getTypeAlign(FieldType) > FirstAlign) {\n      S.Diag(FirstField->getLocation(), diag::note_transparent_union_first_field_size_align) << isSize << FirstBits;"}},
[k]={
["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:82:19: note: alignment of first field is 32 bits","clang/test/Sema/transparent-union.c:87:19: note: alignment of first field is 32 bits","clang/test/Sema/transparent-union.c:92:8: note: size of first field is 8 bits","clang/test/Sema/transparent-union.c:97:8: note: size of first field is 8 bits","clang/test/Sema/transparent-union.c:123:3: note: alignment of first field is 32 bits"}
}
},
},
["note_type_being_defined"]={
["note_type_being_defined"]={
[c]="definition of A is not complete until the closing \'}\'",
[f]="definition of A is not complete until the closing \'}\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="definition of %0 is not complete until the closing \'}\'",
[d]="definition of %0 is not complete until the closing \'}\'",
[b]=m,
[e]=p,
[g]="definition of (.*?) is not complete until the closing \'\\}\'",
[a]="definition of (.*?) is not complete until the closing \'\\}\'",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{hb,9247,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the type was a forward declaration of a class/struct/union\n  // type, produce a note.\n  if (Tag && !Tag->isInvalidDecl() && !Tag->getLocation().isInvalid())\n    Diag(Tag->getLocation(), Tag->isBeingDefined() ? diag::note_type_being_defined : diag::note_forward_declaration) << Context.getTagDeclType(Tag);"}}
[j]={{cb,9247,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the type was a forward declaration of a class/struct/union\n  // type, produce a note.\n  if (Tag && !Tag->isInvalidDecl() && !Tag->getLocation().isInvalid())\n    Diag(Tag->getLocation(), Tag->isBeingDefined() ? diag::note_type_being_defined : diag::note_forward_declaration) << Context.getTagDeclType(Tag);"}},
[k]={
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:14:10: note: definition of \'test0::A\' is not complete until the closing \'}\'"}
}
},
},
["note_type_incomplete"]={
["note_type_incomplete"]={
[c]="A is incomplete",
[f]="A is incomplete",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 is incomplete",
[d]="%0 is incomplete",
[b]=m,
[e]=p,
[g]="(.*?) is incomplete",
[a]="(.*?) is incomplete",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ffa7dc379f2e",1422480686,"PR 17456"},
[i]={"ffa7dc379f2e",1422480686,"PR 17456"},
[j]={{mb,547,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclFrom->isCompleteDefinition())\n        S.Diag(DeclFrom->getLocation(), diag::note_type_incomplete) << DeclFrom;"},{mb,550,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclTo->isCompleteDefinition())\n        S.Diag(DeclTo->getLocation(), diag::note_type_incomplete) << DeclTo;"}}
[j]={{nb,547,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclFrom->isCompleteDefinition())\n        S.Diag(DeclFrom->getLocation(), diag::note_type_incomplete) << DeclFrom;"},{nb,550,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclTo->isCompleteDefinition())\n        S.Diag(DeclTo->getLocation(), diag::note_type_incomplete) << DeclTo;"}},
[k]={
["clang/test/CXX/temp/temp.param/p15-cxx0x.cpp"]={"clang/test/CXX/temp/temp.param/p15-cxx0x.cpp:2:30: note: \'X<X<X<int>>>\' is incomplete"}
}
},
},
["note_type_requirement_substitution_error"]={
["note_type_requirement_substitution_error"]={
[c]="... \'A\' would be invalid: B",
[f]="... \'A\' would be invalid: B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[d]="%select{and|because}0 \'%1\' would be invalid: %2",
[b]=m,
[e]=p,
[g]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[a]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",994,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",994,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
},
},
["note_type_requirement_unknown_substitution_error"]={
["note_type_requirement_unknown_substitution_error"]={
[c]="... \'A\' would be invalid",
[f]="... \'A\' would be invalid",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{and|because}0 \'%1\' would be invalid",
[d]="%select{and|because}0 \'%1\' would be invalid",
[b]=m,
[e]=p,
[g]="(?:and|because) \'(.*?)\' would be invalid",
[a]="(?:and|because) \'(.*?)\' would be invalid",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",998,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",998,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
},
},
["note_typecheck_assign_const"]={
["note_typecheck_assign_const"]={
[c]=Xb,
[f]=mc,
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{function %1 which returns const-qualified type %2 declared here|variable %1 declared const here|%select{non-|}1static data member %2 declared const here|member function %q1 is declared const here|%select{|nested }1data member %2 declared const here}0",
[d]="%select{function %1 which returns const-qualified type %2 declared here|variable %1 declared const here|%select{non-|}1static data member %2 declared const here|member function %q1 is declared const here|%select{|nested }1data member %2 declared const here}0",
[b]=m,
[e]=p,
[g]="(?:function (.*?) which returns const\\-qualified type (.*?) declared here|variable (.*?) declared const here|(?:non\\-|)static data member (.*?) declared const here|member function (.*?) is declared const here|(?:|nested )data member (.*?) declared const here)",
[a]="(?:function (.*?) which returns const\\-qualified type (.*?) declared here|variable (.*?) declared const here|(?:non\\-|)static data member (.*?) declared const here|member function (.*?) is declared const here|(?:|nested )data member (.*?) declared const here)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"af7d76c7204c",1428717193,"Improve the error message for assigning to read-only variables."},
[i]={"af7d76c7204c",1428717193,"Improve the error message for assigning to read-only variables."},
[j]={{C,14114,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << false /*static*/ << Field << Field->getType() << Field->getSourceRange();"},{C,14144,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << true /*static*/ << VDecl << VDecl->getType() << VDecl->getSourceRange();"},{C,14158,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      S.Diag(FD->getReturnTypeSourceRange().getBegin(), diag::note_typecheck_assign_const) << ConstFunction << FD << FD->getReturnType() << FD->getReturnTypeSourceRange();"},{C,14171,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstVariable << VD << VD->getType() << VD->getSourceRange();"},{C,14186,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          S.Diag(MD->getLocation(), diag::note_typecheck_assign_const) << ConstMethod << MD << MD->getSourceRange();"},{C,14280,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      if (FieldTy.isConstQualified()) {\n        S.Diag(Field->getLocation(), diag::note_typecheck_assign_const) << NestedConstMember << IsNested << Field << FieldTy << Field->getSourceRange();"}}
[j]={{D,14114,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << false /*static*/ << Field << Field->getType() << Field->getSourceRange();"},{D,14144,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << true /*static*/ << VDecl << VDecl->getType() << VDecl->getSourceRange();"},{D,14158,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      S.Diag(FD->getReturnTypeSourceRange().getBegin(), diag::note_typecheck_assign_const) << ConstFunction << FD << FD->getReturnType() << FD->getReturnTypeSourceRange();"},{D,14171,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstVariable << VD << VD->getType() << VD->getSourceRange();"},{D,14186,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          S.Diag(MD->getLocation(), diag::note_typecheck_assign_const) << ConstMethod << MD << MD->getSourceRange();"},{D,14280,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      if (FieldTy.isConstQualified()) {\n        S.Diag(Field->getLocation(), diag::note_typecheck_assign_const) << NestedConstMember << IsNested << Field << FieldTy << Field->getSourceRange();"}},
[k]={
["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:3:15: note: variable \'x\' declared const here"}
}
},
},
["note_typecheck_invalid_operands_converted"]={
["note_typecheck_invalid_operands_converted"]={
[c]="... operand was implicitly converted to type A",
[f]="... operand was implicitly converted to type A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{first|second}0 operand was implicitly converted to type %1",
[d]="%select{first|second}0 operand was implicitly converted to type %1",
[b]=m,
[e]=p,
[g]="(?:first|second) operand was implicitly converted to type (.*?)",
[a]="(?:first|second) operand was implicitly converted to type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1ef7554efd1a",1530131434,"DR1687: When overload resolution selects a built-in operator, implicit"},
[i]={"1ef7554efd1a",1530131434,"DR1687: When overload resolution selects a built-in operator, implicit"},
[j]={{C,10637,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // If a user-defined conversion was applied to either of the operands prior\n  // to applying the built-in operator rules, tell the user about it.\n  if (OrigLHS.Conversion) {\n    Diag(OrigLHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 0 << LHS.get()->getType();"},{C,10658,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (OrigRHS.Conversion) {\n    Diag(OrigRHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 1 << RHS.get()->getType();"}}
[j]={{D,10637,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // If a user-defined conversion was applied to either of the operands prior\n  // to applying the built-in operator rules, tell the user about it.\n  if (OrigLHS.Conversion) {\n    Diag(OrigLHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 0 << LHS.get()->getType();"},{D,10658,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (OrigRHS.Conversion) {\n    Diag(OrigRHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 1 << RHS.get()->getType();"}},
[k]={
["clang/test/CXX/over/over.built/p16.cpp"]={Xb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'",Xb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'",Xb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'",Xb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'","clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",Rb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",Rb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",Rb,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",Rb,Xb,Xb,Xb,Xb,Rb,Rb,Rb,Rb}
}
},
},
["note_typecheck_member_reference_suggestion"]={
["note_typecheck_member_reference_suggestion"]={
[c]="did you mean to use \'.\' instead?",
[f]="did you mean to use \'.\' instead?",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="did you mean to use \'.\' instead?",
[d]="did you mean to use \'.\' instead?",
[b]=m,
[e]=p,
[g]="did you mean to use \'\\.\' instead\\?",
[a]="did you mean to use \'\\.\' instead\\?",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"bad7fb09b2d1",1373918094,"Move the \"->\" to \".\" fixit from r186128 into a separate note since"},
[i]={"bad7fb09b2d1",1373918094,"Move the \"->\" to \".\" fixit from r186128 into a separate note since"},
[j]={{D,15278,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  case OR_No_Viable_Function: {\n    if (CandidateSet.empty()) {\n      if (BaseType->isRecordType() && !BaseType->isPointerType()) {\n        Diag(OpLoc, diag::note_typecheck_member_reference_suggestion) << FixItHint::CreateReplacement(OpLoc, \".\");"}}
[j]={{E,15278,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  case OR_No_Viable_Function: {\n    if (CandidateSet.empty()) {\n      if (BaseType->isRecordType() && !BaseType->isPointerType()) {\n        Diag(OpLoc, diag::note_typecheck_member_reference_suggestion) << FixItHint::CreateReplacement(OpLoc, \".\");"}},
[k]={
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:200:6: note: did you mean to use \'.\' instead?"}
}
},
},
["note_typedef_for_linkage_here"]={
["note_typedef_for_linkage_here"]={
[c]="type is given name A for linkage purposes by this ... declaration",
[f]="type is given name A for linkage purposes by this ... declaration",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="type is given name %0 for linkage purposes by this %select{typedef|alias}1 declaration",
[d]="type is given name %0 for linkage purposes by this %select{typedef|alias}1 declaration",
[b]=m,
[e]=p,
[g]="type is given name (.*?) for linkage purposes by this (?:typedef|alias) declaration",
[a]="type is given name (.*?) for linkage purposes by this (?:typedef|alias) declaration",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{v,5033,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    Diag(NewTD->getLocation(), diag::note_typedef_for_linkage_here) << NewTD << isa<TypeAliasDecl>(NewTD);"}}
[j]={{w,5033,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    Diag(NewTD->getLocation(), diag::note_typedef_for_linkage_here) << NewTD << isa<TypeAliasDecl>(NewTD);"}},
[k]={
["clang/test/SemaCXX/warn-unused-local-typedef.cpp"]={"clang/test/SemaCXX/warn-unused-local-typedef.cpp:113:5: note: type is given name \'A\' for linkage purposes by this typedef declaration","clang/test/SemaCXX/warn-unused-local-typedef.cpp:116:9: note: type is given name \'A2\' for linkage purposes by this alias declaration"}
}
},
},
["note_typename_member_refers_here"]={
["note_typename_member_refers_here"]={
[c]="referenced member A is declared here",
[f]="referenced member A is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="referenced member %0 is declared here",
[d]="referenced member %0 is declared here",
[b]=m,
[e]=p,
[g]="referenced member (.*?) is declared here",
[a]="referenced member (.*?) is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{x,11170,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  if (Referenced)\n    Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}}
[j]={{y,11170,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  if (Referenced)\n    Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:12:23: note: referenced member \'type\' is declared here"}
}
},
},
["note_typename_refers_here"]={
["note_typename_refers_here"]={
[c]="referenced A is declared here",
[f]="referenced A is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="referenced %0 is declared here",
[d]="referenced %0 is declared here",
[b]=m,
[e]=p,
[g]="referenced (.*?) is declared here",
[a]="referenced (.*?) is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"},
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"},
[j]={{x,11171,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  if (Referenced)\n    Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}}
[j]={{y,11171,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  if (Referenced)\n    Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:32:7: note: referenced \'C\' is declared here"}
}
},
},
["note_ucn_four_not_eight"]={
["note_ucn_four_not_eight"]={
[c]="did you mean to use \'\\u\'?",
[f]="did you mean to use \'\\u\'?",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="did you mean to use \'\\u\'?",
[d]="did you mean to use \'\\u\'?",
[b]=m,
[e]=p,
[g]="did you mean to use \'\\\\u\'\\?",
[a]="did you mean to use \'\\\\u\'\\?",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234."},
[i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234."},
[j]={{kb,3344,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!Delimited && Count != NumHexDigits) {\n    if (Diagnose) {\n      // If the user wrote \\U1234, suggest a fixit to \\u.\n      if (Count == 4 && NumHexDigits == 8) {\n        Diag(KindLoc, diag::note_ucn_four_not_eight) << FixItHint::CreateReplacement(URange, \"u\");"}}
[j]={{lb,3344,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!Delimited && Count != NumHexDigits) {\n    if (Diagnose) {\n      // If the user wrote \\U1234, suggest a fixit to \\u.\n      if (Count == 4 && NumHexDigits == 8) {\n        Diag(KindLoc, diag::note_ucn_four_not_eight) << FixItHint::CreateReplacement(URange, \"u\");"}},
[k]={
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:114:20: note: did you mean to use \'\\u\'?"}
}
},
},
["note_unguarded_available_silence"]={
["note_unguarded_available_silence"]={
[c]="enclose A in ... check to silence this warning",
[f]="enclose A in ... check to silence this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="enclose %0 in %select{an @available|a __builtin_available}1 check to silence this warning",
[d]="enclose %0 in %select{an @available|a __builtin_available}1 check to silence this warning",
[b]=m,
[e]=p,
[g]="enclose (.*?) in (?:an @available|a __builtin_available) check to silence this warning",
[a]="enclose (.*?) in (?:an @available|a __builtin_available) check to silence this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[j]={{Kb,788,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    auto FixitDiag = SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence) << Range << D << (SemaRef.getLangOpts().ObjC ? /*@available*/ 0 : /*__builtin_available*/ 1);"}}
[j]={{Vb,788,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    auto FixitDiag = SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence) << Range << D << (SemaRef.getLangOpts().ObjC ? /*@available*/ 0 : /*__builtin_available*/ 1);"}},
[k]={
["clang/test/Sema/availability-guard-format.mm"]={"clang/test/Sema/availability-guard-format.mm:10:10: note: enclose \'method_bar\' in an @available check to silence this warning"}
}
},
},
["note_unimplemented_constexpr_lambda_feature_ast"]={
["note_unimplemented_constexpr_lambda_feature_ast"]={
[c]="unimplemented constexpr lambda feature: A (coming soon!)",
[f]="unimplemented constexpr lambda feature: A (coming soon!)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="unimplemented constexpr lambda feature: %0 (coming soon!)",
[d]="unimplemented constexpr lambda feature: %0 (coming soon!)",
[b]=m,
[e]=p,
[g]="unimplemented constexpr lambda feature\\: (.*?) \\(coming soon\\!\\)",
[a]="unimplemented constexpr lambda feature\\: (.*?) \\(coming soon\\!\\)",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb..."},
[i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb..."},
[j]={{"clang/lib/AST/ExprConstant.cpp",3303,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // If this is a local variable, dig out its value.\n  if (Frame) {\n    if (!isa<ParmVarDecl>(VD)) {\n      Info.FFDiag(E->getBeginLoc(), diag::note_unimplemented_constexpr_lambda_feature_ast) << \"captures not currently allowed\";"}}
[j]={{"clang/lib/AST/ExprConstant.cpp",3303,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // If this is a local variable, dig out its value.\n  if (Frame) {\n    if (!isa<ParmVarDecl>(VD)) {\n      Info.FFDiag(E->getBeginLoc(), diag::note_unimplemented_constexpr_lambda_feature_ast) << \"captures not currently allowed\";"}}
},
},
["note_uninit_fixit_remove_cond"]={
["note_uninit_fixit_remove_cond"]={
[c]="remove the ... is always ...",
[f]="remove the ... is always ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="remove the %select{\'%1\' if its condition|condition if it}0 is always %select{false|true}2",
[d]="remove the %select{\'%1\' if its condition|condition if it}0 is always %select{false|true}2",
[b]=m,
[e]=p,
[g]="remove the (?:\'(.*?)\' if its condition|condition if it) is always (?:false|true)",
[a]="remove the (?:\'(.*?)\' if its condition|condition if it) is always (?:false|true)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[j]={{I,983,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    if (RemoveDiagKind != -1)\n      S.Diag(Fixit1.RemoveRange.getBegin(), diag::note_uninit_fixit_remove_cond) << RemoveDiagKind << Str << I->Output << Fixit1 << Fixit2;"}}
[j]={{J,983,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    if (RemoveDiagKind != -1)\n      S.Diag(Fixit1.RemoveRange.getBegin(), diag::note_uninit_fixit_remove_cond) << RemoveDiagKind << Str << I->Output << Fixit1 << Fixit2;"}},
[k]={
["clang/test/Sema/uninit-variables.c"]={"clang/test/Sema/uninit-variables.c:43:3: note: remove the \'if\' if its condition is always true","clang/test/Sema/uninit-variables.c:156:7: note: remove the \'||\' if its condition is always false","clang/test/Sema/uninit-variables.c:163:7: note: remove the \'||\' if its condition is always false","clang/test/Sema/uninit-variables.c:299:3: note: remove the \'if\' if its condition is always true"}
}
},
},
["note_uninit_in_this_constructor"]={
["note_uninit_in_this_constructor"]={
[c]="during field initialization in ... constructor",
[f]="during field initialization in ... constructor",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="during field initialization in %select{this|the implicit default}0 constructor",
[d]="during field initialization in %select{this|the implicit default}0 constructor",
[b]=m,
[e]=p,
[g]="during field initialization in (?:this|the implicit default) constructor",
[a]="during field initialization in (?:this|the implicit default) constructor",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"406e65c8d175",1379646186,"Modify the uninitialized field visitor to detect uninitialized use across the"},
[i]={"406e65c8d175",1379646186,"Modify the uninitialized field visitor to detect uninitialized use across the"},
[j]={{y,3864,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    if (Constructor)\n      S.Diag(Constructor->getLocation(), diag::note_uninit_in_this_constructor) << (Constructor->isDefaultConstructor() && Constructor->isImplicit());"}}
[j]={{z,3864,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    if (Constructor)\n      S.Diag(Constructor->getLocation(), diag::note_uninit_in_this_constructor) << (Constructor->isDefaultConstructor() && Constructor->isImplicit());"}},
[k]={
["clang/test/SemaCXX/uninitialized.cpp"]={"clang/test/SemaCXX/uninitialized.cpp:852:5: note: during field initialization in this constructor",Db,Db,Db,Db,Db,Db,Db,Db,Db,Fb,Fb,Fb,Fb,Fb,Fb,Fb,Fb,Fb,"clang/test/SemaCXX/uninitialized.cpp:990:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:997:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1059:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1205:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1205:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1205:5: note: during field initialization in this constructor",ob,ob,ob,ob,ob,ob,ob,ob,ob,ob,ob,ob,ob,"clang/test/SemaCXX/uninitialized.cpp:1283:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1283:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1283:5: note: during field initialization in this constructor","clang/test/SemaCXX/uninitialized.cpp:1299:5: note: during field initialization in this constructor"}
}
},
},
["note_uninit_reference_member"]={
["note_uninit_reference_member"]={
[c]="uninitialized reference member is here",
[f]="uninitialized reference member is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="uninitialized reference member is here",
[d]="uninitialized reference member is here",
[b]=m,
[e]=p,
[g]="uninitialized reference member is here",
[a]="uninitialized reference member is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{U,739,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n  if (Init >= NumInits || !ILE->getInit(Init)) {\n    if (Field->getType()->isReferenceType()) {\n      if (!VerifyOnly) {\n        SemaRef.Diag(Field->getLocation(), diag::note_uninit_reference_member);"},{U,5614,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (EntityIndexToProcess < Args.size()) {\n      } else {\n        // We\'ve processed all of the args, but there are still members that\n        // have to be initialized.\n        if (FD->hasInClassInitializer()) {\n        } else {\n          // C++ [dcl.init]p17.6.2.2\n          //  The remaining elements...otherwise are value initialzed\n          if (FD->getType()->isReferenceType()) {\n            if (!VerifyOnly) {\n              S.Diag(FD->getLocation(), diag::note_uninit_reference_member);"}}
[j]={{W,739,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n  if (Init >= NumInits || !ILE->getInit(Init)) {\n    if (Field->getType()->isReferenceType()) {\n      if (!VerifyOnly) {\n        SemaRef.Diag(Field->getLocation(), diag::note_uninit_reference_member);"},{W,5614,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (EntityIndexToProcess < Args.size()) {\n      } else {\n        // We\'ve processed all of the args, but there are still members that\n        // have to be initialized.\n        if (FD->hasInClassInitializer()) {\n        } else {\n          // C++ [dcl.init]p17.6.2.2\n          //  The remaining elements...otherwise are value initialzed\n          if (FD->getType()->isReferenceType()) {\n            if (!VerifyOnly) {\n              S.Diag(FD->getLocation(), diag::note_uninit_reference_member);"}},
[k]={
["clang/test/SemaCXX/designated-initializers.cpp"]={"clang/test/SemaCXX/designated-initializers.cpp:83:13: note: uninitialized reference member is here","clang/test/SemaCXX/designated-initializers.cpp:83:17: note: uninitialized reference member is here"}
}
},
},
["note_uninit_var_use"]={
["note_uninit_var_use"]={
[c]="... here",
[f]="... here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{uninitialized use occurs|variable is captured by block}0 here",
[d]="%select{uninitialized use occurs|variable is captured by block}0 here",
[b]=m,
[e]=p,
[g]="(?:uninitialized use occurs|variable is captured by block) here",
[a]="(?:uninitialized use occurs|variable is captured by block) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[j]={{I,846,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  case UninitUse::AfterCall:\n    S.Diag(Use.getUser()->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{I,980,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    S.Diag(User->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << User->getSourceRange();"}}
[j]={{J,846,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  case UninitUse::AfterCall:\n    S.Diag(Use.getUser()->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{J,980,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    S.Diag(User->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << User->getSourceRange();"}},
[k]={
["clang/test/Sema/uninit-variables.c"]={"clang/test/Sema/uninit-variables.c:46:10: note: uninitialized use occurs here","clang/test/Sema/uninit-variables.c:157:12: note: uninitialized use occurs here","clang/test/Sema/uninit-variables.c:164:12: note: uninitialized use occurs here","clang/test/Sema/uninit-variables.c:301:10: note: uninitialized use occurs here"}
}
},
},
["note_unlocked_here"]={
["note_unlocked_here"]={
[c]="A released here",
[f]="A released here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%0 released here",
[d]="%0 released here",
[b]=m,
[e]=p,
[g]="(.*?) released here",
[a]="(.*?) released here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={eb,1582847864,cb},
[i]={hb,1582847864,ib},
[j]={{I,1839,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes makeUnlockedHereNote(SourceLocation LocUnlocked, StringRef Kind) { return LocUnlocked.isValid() ? getNotes(PartialDiagnosticAt(LocUnlocked, S.PDiag(diag::note_unlocked_here) << Kind)) : getNotes(); }"}}
[j]={{J,1839,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes makeUnlockedHereNote(SourceLocation LocUnlocked, StringRef Kind) { return LocUnlocked.isValid() ? getNotes(PartialDiagnosticAt(LocUnlocked, S.PDiag(diag::note_unlocked_here) << Kind)) : getNotes(); }"}},
[k]={
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:121:3: note: mutex released here","clang/test/Sema/warn-thread-safety-analysis.c:126:3: note: mutex released here"}
}
},
},
["note_unofficial_macro_backtrace_limit"]={
["note_unofficial_macro_backtrace_limit"]={
[c]="(skipping A expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)",
[f]="(skipping A expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="(skipping %0 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)",
[d]="(skipping %0 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)",
[b]=m,
[e]=p,
[g]="\\(skipping (.*?) expansions in backtrace; use \\-fmacro\\-backtrace\\-limit\\=0 to see all\\)",
[a]="\\(skipping (.*?) expansions in backtrace; use \\-fmacro\\-backtrace\\-limit\\=0 to see all\\)",
[a]=l,
[g]=m,
[e]=G
[h]=H,
[k]={
["clang/test/Misc/macro-backtrace.c"]={"note: (skipping 6 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)"}
}
},
},
["note_unofficial_marco_expansion"]={
["note_unofficial_marco_expansion"]={
[c]="expanded from here",
[f]="expanded from here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="expanded from here",
[d]="expanded from here",
[b]=m,
[e]=p,
[g]="expanded from here",
[a]="expanded from here",
[a]=l,
[g]=m,
[e]=G
[h]=H,
[k]={
["clang/test/Preprocessor/_Pragma-dependency.c"]={"<scratch space>:2:17: note: expanded from here"}
}
},
},
["note_unofficial_marco_expansion_from"]={
["note_unofficial_marco_expansion_from"]={
[c]="expanded from macro \'A\'",
[f]="expanded from macro \'A\'",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="expanded from macro \'%0\'",
[d]="expanded from macro \'%0\'",
[b]=m,
[e]=p,
[g]="expanded from macro \'(.*?)\'",
[a]="expanded from macro \'(.*?)\'",
[a]=l,
[g]=m,
[e]=G
[h]=H,
[k]={
[Ec]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:6:49: note: expanded from macro \'RETURN_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:5:49: note: expanded from macro \'SET_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:7:49: note: expanded from macro \'TEST_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:3:49: note: expanded from macro \'CALLABLE_WHEN\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:4:49: note: expanded from macro \'CONSUMABLE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:6:49: note: expanded from macro \'RETURN_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:5:49: note: expanded from macro \'SET_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:7:49: note: expanded from macro \'TEST_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:3:49: note: expanded from macro \'CALLABLE_WHEN\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:4:49: note: expanded from macro \'CONSUMABLE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:6:49: note: expanded from macro \'RETURN_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:3:49: note: expanded from macro \'CALLABLE_WHEN\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:5:49: note: expanded from macro \'SET_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:7:49: note: expanded from macro \'TEST_TYPESTATE\'","clang/test/SemaCXX/warn-consumed-parsing.cpp:4:49: note: expanded from macro \'CONSUMABLE\'"}
}
},
},
["note_unparenthesized_non_primary_expr_in_requires_clause"]={
["note_unparenthesized_non_primary_expr_in_requires_clause"]={
[c]="parentheses are required around this expression in a requires clause",
[f]="parentheses are required around this expression in a requires clause",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="parentheses are required around this expression in a requires clause",
[d]="parentheses are required around this expression in a requires clause",
[b]=m,
[e]=p,
[g]="parentheses are required around this expression in a requires clause",
[a]="parentheses are required around this expression in a requires clause",
[a]=l,
[g]=m,
[e]=Q,
[h]=Q,
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[j]={{qc,280,"/// \\brief Parse a constraint-logical-and-expression.\n///\n/// \\verbatim\n///      C++2a[temp.constr.decl]p1\n///      constraint-logical-and-expression:\n///        primary-expression\n///        constraint-logical-and-expression \'&&\' primary-expression\n///\n/// \\endverbatim\nExprResult Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {\n  auto ParsePrimary = [&]() {\n    auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n      if (!E.isInvalid())\n        Diag(E.get()->getExprLoc(), Note ? diag::note_unparenthesized_non_primary_expr_in_requires_clause : diag::err_unparenthesized_non_primary_expr_in_requires_clause) << FixItHint::CreateInsertion(E.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(E.get()->getEndLoc()), \")\") << E.get()->getSourceRange();"}}
[j]={{Bc,280,"/// \\brief Parse a constraint-logical-and-expression.\n///\n/// \\verbatim\n///      C++2a[temp.constr.decl]p1\n///      constraint-logical-and-expression:\n///        primary-expression\n///        constraint-logical-and-expression \'&&\' primary-expression\n///\n/// \\endverbatim\nExprResult Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {\n  auto ParsePrimary = [&]() {\n    auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n      if (!E.isInvalid())\n        Diag(E.get()->getExprLoc(), Note ? diag::note_unparenthesized_non_primary_expr_in_requires_clause : diag::err_unparenthesized_non_primary_expr_in_requires_clause) << FixItHint::CreateInsertion(E.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(E.get()->getEndLoc()), \")\") << E.get()->getSourceRange();"}},
[k]={
["clang/test/Parser/cxx-concepts-requires-clause.cpp"]={"clang/test/Parser/cxx-concepts-requires-clause.cpp:96:31: note: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:132:21: note: parentheses are required around this expression in a requires clause"}
}
},
},
["note_unreachable_entity"]={
["note_unreachable_entity"]={
[c]="... here is not ...",
[f]="... here is not ...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{declaration|definition|default argument declared|explicit specialization declared|partial specialization declared}0 here is not %select{visible|reachable|reachable|reachable|reachable|reachable}0",
[d]="%select{declaration|definition|default argument declared|explicit specialization declared|partial specialization declared}0 here is not %select{visible|reachable|reachable|reachable|reachable|reachable}0",
[b]=m,
[e]=p,
[g]="(?:declaration|definition|default argument declared|explicit specialization declared|partial specialization declared) here is not (?:visible|reachable|reachable|reachable|reachable|reachable)",
[a]="(?:declaration|definition|default argument declared|explicit specialization declared|partial specialization declared) here is not (?:visible|reachable|reachable|reachable|reachable|reachable)",
[a]=l,
[g]=m,
[e]=Rb,
[h]=cc,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5698,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  auto NotePrevious = [&] {\n    Diag(DeclLoc, diag::note_unreachable_entity) << (int)MIK;"}}
[j]={{"clang/lib/Sema/SemaLookup.cpp",5698,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  auto NotePrevious = [&] {\n    Diag(DeclLoc, diag::note_unreachable_entity) << (int)MIK;"}},
[k]={
["clang/test/Modules/submodule-visibility-cycles.cpp"]={"clang/test/Modules/Inputs/submodule-visibility/cycle2.h:6:8: note: declaration here is not visible"}
}
},
},
["note_unreachable_silence"]={
["note_unreachable_silence"]={
[c]="silence by adding parentheses to mark code as explicitly dead",
[f]="silence by adding parentheses to mark code as explicitly dead",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="silence by adding parentheses to mark code as explicitly dead",
[d]="silence by adding parentheses to mark code as explicitly dead",
[b]=m,
[e]=p,
[g]="silence by adding parentheses to mark code as explicitly dead",
[a]="silence by adding parentheses to mark code as explicitly dead",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"ec3bbf4933d7",1396053320,"Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((..."},
[i]={"ec3bbf4933d7",1396053320,"Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((..."},
[j]={{I,116,"class UnreachableCodeHandler : public reachable_code::Callback {\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    if (Open.isValid()) {\n      if (Close.isValid()) {\n        S.Diag(Open, diag::note_unreachable_silence) << FixItHint::CreateInsertion(Open, \"/* DISABLES CODE */ (\") << FixItHint::CreateInsertion(Close, \")\");"}}
[j]={{J,116,"class UnreachableCodeHandler : public reachable_code::Callback {\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    if (Open.isValid()) {\n      if (Close.isValid()) {\n        S.Diag(Open, diag::note_unreachable_silence) << FixItHint::CreateInsertion(Open, \"/* DISABLES CODE */ (\") << FixItHint::CreateInsertion(Close, \")\");"}},
[k]={
["clang/test/SemaObjC/warn-unreachable.m"]={"clang/test/SemaObjC/warn-unreachable.m:69:7: note: silence by adding parentheses to mark code as explicitly dead","clang/test/SemaObjC/warn-unreachable.m:59:7: note: silence by adding parentheses to mark code as explicitly dead","clang/test/SemaObjC/warn-unreachable.m:56:7: note: silence by adding parentheses to mark code as explicitly dead"}
}
},
},
["note_unsafe_buffer_operation"]={
["note_unsafe_buffer_operation"]={
[c]="used... here",
[f]="used... here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="used%select{| in pointer arithmetic| in buffer access}0 here",
[d]="used%select{| in pointer arithmetic| in buffer access}0 here",
[b]=m,
[e]=p,
[g]="used(?:| in pointer arithmetic| in buffer access) here",
[a]="used(?:| in pointer arithmetic| in buffer access) here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{I,2213,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n      S.Diag(Loc, diag::note_unsafe_buffer_operation) << MsgParam << Range;"}}
[j]={{J,2213,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n      S.Diag(Loc, diag::note_unsafe_buffer_operation) << MsgParam << Range;"}},
[k]={
["clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp"]={"clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:7:3: note: used in pointer arithmetic here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:8:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:13:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:20:3: note: used in pointer arithmetic here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:21:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:26:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:34:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:33:3: note: used in pointer arithmetic here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:40:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:92:3: note: used in buffer access here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:91:3: note: used in pointer arithmetic here","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:100:3: note: used in buffer access here"}
}
},
},
["note_unsafe_buffer_variable_fixit_group"]={
["note_unsafe_buffer_variable_fixit_group"]={
[c]="change type of A to \'...\' to preserve bounds information...",
[f]="change type of A to \'...\' to preserve bounds information...",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="change type of %0 to \'%select{std::span|std::array|std::span::iterator}1\' to preserve bounds information%select{|, and change %2 to \'%select{std::span|std::array|std::span::iterator}1\' to propagate bounds information between them}3",
[d]="change type of %0 to \'%select{std::span|std::array|std::span::iterator}1\' to preserve bounds information%select{|, and change %2 to \'%select{std::span|std::array|std::span::iterator}1\' to propagate bounds information between them}3",
[b]=m,
[e]=p,
[g]="change type of (.*?) to \'(?:std\\:\\:span|std\\:\\:array|std\\:\\:span\\:\\:iterator)\' to preserve bounds information(?:|, and change (.*?) to \'(?:std\\:\\:span|std\\:\\:array|std\\:\\:span\\:\\:iterator)\' to propagate bounds information between them)",
[a]="change type of (.*?) to \'(?:std\\:\\:span|std\\:\\:array|std\\:\\:span\\:\\:iterator)\' to preserve bounds information(?:|, and change (.*?) to \'(?:std\\:\\:span|std\\:\\:array|std\\:\\:span\\:\\:iterator)\' to propagate bounds information between them)",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{I,2234,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n    if (!Fixes.empty()) {\n      const auto &FD = S.Diag(Variable->getLocation(), diag::note_unsafe_buffer_variable_fixit_group);"}}
[j]={{J,2234,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n    if (!Fixes.empty()) {\n      const auto &FD = S.Diag(Variable->getLocation(), diag::note_unsafe_buffer_variable_fixit_group);"}},
[k]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-fixits-assign-to-array-subscr-on-ptr.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-fixits-assign-to-array-subscr-on-ptr.cpp:12:8: note: change type of \'p\' to \'std::span\' to preserve bounds information"}
}
},
},
["note_use_dashdash"]={
["note_use_dashdash"]={
[c]="use \'--\' to treat subsequent arguments as filenames",
[f]="use \'--\' to treat subsequent arguments as filenames",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use \'--\' to treat subsequent arguments as filenames",
[d]="use \'--\' to treat subsequent arguments as filenames",
[b]=m,
[e]=p,
[g]="use \'\\-\\-\' to treat subsequent arguments as filenames",
[a]="use \'\\-\\-\' to treat subsequent arguments as filenames",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)"},
[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)"},
[j]={{"clang/lib/Driver/Driver.cpp",2794,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n    } else if (A->getOption().hasFlag(options::LinkerInput)) {\n    } else if (A->getOption().matches(options::OPT_x)) {\n    } else if (A->getOption().getID() == options::OPT_U) {\n      if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n        Diag(diag::note_use_dashdash);"}}
[j]={{"clang/lib/Driver/Driver.cpp",2794,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n    } else if (A->getOption().hasFlag(options::LinkerInput)) {\n    } else if (A->getOption().matches(options::OPT_x)) {\n    } else if (A->getOption().getID() == options::OPT_U) {\n      if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n        Diag(diag::note_use_dashdash);"}}
},
},
["note_use_ifdef_guards"]={
["note_use_ifdef_guards"]={
[c]="unguarded header; consider using #ifdef guards or #pragma once",
[f]="unguarded header; consider using #ifdef guards or #pragma once",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="unguarded header; consider using #ifdef guards or #pragma once",
[d]="unguarded header; consider using #ifdef guards or #pragma once",
[b]=m,
[e]=p,
[g]="unguarded header; consider using \\#ifdef guards or \\#pragma once",
[a]="unguarded header; consider using \\#ifdef guards or \\#pragma once",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[j]={{v,4806,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  // Is it the same file and same offset? Provide more information on why\n  // this leads to a redefinition error.\n  if (FNew == FOld && FNewDecLoc.second == FOldDecLoc.second) {\n    // If the header has no guards, emit a note suggesting one.\n    if (FOld && !HSI.isFileMultipleIncludeGuarded(FOld))\n      Diag(Old->getLocation(), diag::note_use_ifdef_guards);"}}
[j]={{w,4806,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  // Is it the same file and same offset? Provide more information on why\n  // this leads to a redefinition error.\n  if (FNew == FOld && FNewDecLoc.second == FOldDecLoc.second) {\n    // If the header has no guards, emit a note suggesting one.\n    if (FOld && !HSI.isFileMultipleIncludeGuarded(FOld))\n      Diag(Old->getLocation(), diag::note_use_ifdef_guards);"}},
[k]={
["clang/test/Sema/redefinition-same-header.c"]={"build/tools/clang/test/Sema/Output/redefinition-same-header.c.tmp/a.h:1:5: note: unguarded header; consider using #ifdef guards or #pragma once"}
}
},
},
["note_use_non_reference_type"]={
["note_use_non_reference_type"]={
[c]="use non-reference type A",
[f]="use non-reference type A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use non-reference type %0",
[d]="use non-reference type %0",
[b]=m,
[e]=p,
[g]="use non\\-reference type (.*?)",
[a]="use non\\-reference type (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[j]={{O,3159,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n  } else if (!VariableType->isRValueReferenceType()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_non_reference_type) << NonReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}
[j]={{P,3159,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n  } else if (!VariableType->isRValueReferenceType()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_non_reference_type) << NonReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}},
[k]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:563:8: note: use non-reference type \'svint8_t\' (aka \'__SVInt8_t\')"}
}
},
},
["note_use_reference_type"]={
["note_use_reference_type"]={
[c]="use reference type A to prevent copying",
[f]="use reference type A to prevent copying",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use reference type %0 to prevent copying",
[d]="use reference type %0 to prevent copying",
[b]=m,
[e]=p,
[g]="use reference type (.*?) to prevent copying",
[a]="use reference type (.*?) to prevent copying",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[j]={{O,3208,"// Warns when the loop variable can be changed to a reference type to\n// prevent a copy.  For instance, if given \"for (const Foo x : Range)\" suggest\n// \"for (const Foo &x : Range)\" if this form does not make a copy.\nstatic void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, const VarDecl *VD) {\n  SemaRef.Diag(VD->getBeginLoc(), diag::note_use_reference_type) << SemaRef.Context.getLValueReferenceType(VariableType) << VD->getSourceRange() << FixItHint::CreateInsertion(VD->getLocation(), \"&\");"}}
[j]={{P,3208,"// Warns when the loop variable can be changed to a reference type to\n// prevent a copy.  For instance, if given \"for (const Foo x : Range)\" suggest\n// \"for (const Foo &x : Range)\" if this form does not make a copy.\nstatic void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, const VarDecl *VD) {\n  SemaRef.Diag(VD->getBeginLoc(), diag::note_use_reference_type) << SemaRef.Context.getLValueReferenceType(VariableType) << VD->getSourceRange() << FixItHint::CreateInsertion(VD->getLocation(), \"&\");"}},
[k]={
["clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp"]={"clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:22:8: note: use reference type \'const Record &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:46:8: note: use reference type \'const Record &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:61:8: note: use reference type \'const Record &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:87:8: note: use reference type \'const Record &\' to prevent copying"}
}
},
},
["note_use_thread_local"]={
["note_use_thread_local"]={
[c]="use \'thread_local\' to allow this",
[f]="use \'thread_local\' to allow this",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use \'thread_local\' to allow this",
[d]="use \'thread_local\' to allow this",
[b]=m,
[e]=p,
[g]="use \'thread_local\' to allow this",
[a]="use \'thread_local\' to allow this",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[i]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[j]={{v,14101,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      if (getLangOpts().CPlusPlus11)\n        Diag(var->getLocation(), diag::note_use_thread_local);"},{v,14111,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(var->getLocation(), diag::note_use_thread_local);"}}
[j]={{w,14101,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      if (getLangOpts().CPlusPlus11)\n        Diag(var->getLocation(), diag::note_use_thread_local);"},{w,14111,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(var->getLocation(), diag::note_use_thread_local);"}},
[k]={
["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:12:24: note: use \'thread_local\' to allow this","clang/test/SemaCXX/declspec-thread.cpp:19:28: note: use \'thread_local\' to allow this","clang/test/SemaCXX/declspec-thread.cpp:26:28: note: use \'thread_local\' to allow this"}
}
},
},
["note_use_type_or_non_reference"]={
["note_use_type_or_non_reference"]={
[c]="use non-reference type A to make construction explicit or type B to prevent copying",
[f]="use non-reference type A to make construction explicit or type B to prevent copying",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use non-reference type %0 to make construction explicit or type %1 to prevent copying",
[d]="use non-reference type %0 to make construction explicit or type %1 to prevent copying",
[b]=m,
[e]=p,
[g]="use non\\-reference type (.*?) to make construction explicit or type (.*?) to prevent copying",
[a]="use non\\-reference type (.*?) to make construction explicit or type (.*?) to prevent copying",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[j]={{O,3147,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_type_or_non_reference) << NonReferenceType << NewReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}
[j]={{P,3147,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_type_or_non_reference) << NonReferenceType << NewReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}},
[k]={
["clang/test/SemaCXX/warn-range-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-range-loop-analysis.cpp:78:8: note: use non-reference type \'double\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:154:8: note: use non-reference type \'double\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:158:8: note: use non-reference type \'double\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:163:8: note: use non-reference type \'double\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:172:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:176:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:181:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const int &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:243:8: note: use non-reference type \'int\' to make construction explicit or type \'const Bar &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:247:8: note: use non-reference type \'int\' to make construction explicit or type \'const Bar &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:253:8: note: use non-reference type \'int\' to make construction explicit or type \'const Bar &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:285:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const Foo &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:289:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const Foo &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:295:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const Foo &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:321:8: note: use non-reference type \'int\' to make construction explicit or type \'const double &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:325:8: note: use non-reference type \'int\' to make construction explicit or type \'const double &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:331:8: note: use non-reference type \'int\' to make construction explicit or type \'const double &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:340:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const double &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:344:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const double &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:350:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const double &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:376:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const Foo &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:380:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const Foo &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:386:8: note: use non-reference type \'Bar\' to make construction explicit or type \'const Foo &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:414:8: note: use non-reference type \'int\' to make construction explicit or type \'const Bar &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:418:8: note: use non-reference type \'int\' to make construction explicit or type \'const Bar &\' to prevent copying","clang/test/SemaCXX/warn-range-loop-analysis.cpp:424:8: note: use non-reference type \'int\' to make construction explicit or type \'const Bar &\' to prevent copying"}
}
},
},
["note_used_here"]={
["note_used_here"]={
[c]="used here",
[f]="used here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="used here",
[d]="used here",
[b]=m,
[e]=p,
[g]="used here",
[a]="used here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage"},
[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage"},
[j]={{yc,918,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n  for (const auto &Undef : Undefined) {\n    if (UseLoc.isValid())\n      S.Diag(UseLoc, diag::note_used_here);"},{nb,3317,"/// 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        } else {\n          Diag(Args[0]->getExprLoc(), diag::note_used_here);"},{w,2962,"void Sema::EndOpenMPDSABlock(Stmt *CurDirective) {\n  // OpenMP [2.14.3.5, Restrictions, C/C++, p.1]\n  //  A variable of class type (or array thereof) that appears in a lastprivate\n  //  clause requires an accessible, unambiguous default constructor for the\n  //  class type, unless the list item is also specified in a firstprivate\n  //  clause.\n  if (const auto *D = dyn_cast_or_null<OMPExecutableDirective>(CurDirective)) {\n    for (OMPClause *C : D->clauses()) {\n      if (auto *Clause = dyn_cast<OMPUsesAllocatorsClause>(C)) {\n        for (unsigned I = 0, E = Clause->getNumberOfAllocators(); I < E; ++I) {\n          if (DVar.RefExpr || DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [VD, &MapExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef MapExprComponents, OpenMPClauseKind C) {\n            if (DVar.RefExpr)\n            else\n              Diag(MapExpr->getExprLoc(), diag::note_used_here) << MapExpr->getSourceRange();"},{w,21511,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    for (; CI != CE && SI != SE; ++CI, ++SI) {\n      // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.3]\n      //  At most one list item can be an array item derived from a given\n      //  variable in map clauses of the same construct.\n      if (CurrentRegionOnly && (isa<ArraySubscriptExpr>(CI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(CI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(CI->getAssociatedExpression())) && (isa<ArraySubscriptExpr>(SI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(SI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(SI->getAssociatedExpression()))) {\n        SemaRef.Diag(SI->getAssociatedExpression()->getExprLoc(), diag::note_used_here) << SI->getAssociatedExpression()->getSourceRange();"},{w,21563,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // If the expressions are exactly the same or one is a subset of the\n    // other, it means they are sharing storage.\n    if (CI == CE && SI == SE) {\n      if (CurrentRegionOnly) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21600,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI == CE || SI == SE) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21611,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI->getAssociatedExpression()->getStmtClass() != SI->getAssociatedExpression()->getStmtClass() || CI->getAssociatedDeclaration()->getCanonicalDecl() == SI->getAssociatedDeclaration()->getCanonicalDecl()) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21650,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // An expression is a subset of the other.\n    if (CurrentRegionOnly && (CI == CE || SI == SE)) {\n      SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21686,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n  //  If any part of the original storage of a list item has corresponding\n  //  storage in the device data environment, all of the original storage must\n  //  have corresponding storage in the device data environment.\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.6]\n  //  If a list item is an element of a structure, and a different element of\n  //  the structure has a corresponding list item in the device data environment\n  //  prior to a task encountering the construct associated with the map clause,\n  //  then the list item must also have a corresponding list item in the device\n  //  data environment prior to the task encountering the construct.\n  //\n  if (EnclosingExpr && !IsEnclosedByDataEnvironmentExpr) {\n    SemaRef.Diag(EnclosingExpr->getExprLoc(), diag::note_used_here) << EnclosingExpr->getSourceRange();"},{w,23134,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  SemaRef.Diag(SL, diag::note_used_here) << SR;"},{w,23524,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"},{w,23599,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"}}
[j]={{yc,918,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n  for (const auto &Undef : Undefined) {\n    if (UseLoc.isValid())\n      S.Diag(UseLoc, diag::note_used_here);"},{sb,3317,"/// 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        } else {\n          Diag(Args[0]->getExprLoc(), diag::note_used_here);"},{x,2962,"void Sema::EndOpenMPDSABlock(Stmt *CurDirective) {\n  // OpenMP [2.14.3.5, Restrictions, C/C++, p.1]\n  //  A variable of class type (or array thereof) that appears in a lastprivate\n  //  clause requires an accessible, unambiguous default constructor for the\n  //  class type, unless the list item is also specified in a firstprivate\n  //  clause.\n  if (const auto *D = dyn_cast_or_null<OMPExecutableDirective>(CurDirective)) {\n    for (OMPClause *C : D->clauses()) {\n      if (auto *Clause = dyn_cast<OMPUsesAllocatorsClause>(C)) {\n        for (unsigned I = 0, E = Clause->getNumberOfAllocators(); I < E; ++I) {\n          if (DVar.RefExpr || DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [VD, &MapExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef MapExprComponents, OpenMPClauseKind C) {\n            if (DVar.RefExpr)\n            else\n              Diag(MapExpr->getExprLoc(), diag::note_used_here) << MapExpr->getSourceRange();"},{x,21511,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    for (; CI != CE && SI != SE; ++CI, ++SI) {\n      // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.3]\n      //  At most one list item can be an array item derived from a given\n      //  variable in map clauses of the same construct.\n      if (CurrentRegionOnly && (isa<ArraySubscriptExpr>(CI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(CI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(CI->getAssociatedExpression())) && (isa<ArraySubscriptExpr>(SI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(SI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(SI->getAssociatedExpression()))) {\n        SemaRef.Diag(SI->getAssociatedExpression()->getExprLoc(), diag::note_used_here) << SI->getAssociatedExpression()->getSourceRange();"},{x,21563,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // If the expressions are exactly the same or one is a subset of the\n    // other, it means they are sharing storage.\n    if (CI == CE && SI == SE) {\n      if (CurrentRegionOnly) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{x,21600,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI == CE || SI == SE) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{x,21611,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI->getAssociatedExpression()->getStmtClass() != SI->getAssociatedExpression()->getStmtClass() || CI->getAssociatedDeclaration()->getCanonicalDecl() == SI->getAssociatedDeclaration()->getCanonicalDecl()) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{x,21650,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // An expression is a subset of the other.\n    if (CurrentRegionOnly && (CI == CE || SI == SE)) {\n      SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{x,21686,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n  //  If any part of the original storage of a list item has corresponding\n  //  storage in the device data environment, all of the original storage must\n  //  have corresponding storage in the device data environment.\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.6]\n  //  If a list item is an element of a structure, and a different element of\n  //  the structure has a corresponding list item in the device data environment\n  //  prior to a task encountering the construct associated with the map clause,\n  //  then the list item must also have a corresponding list item in the device\n  //  data environment prior to the task encountering the construct.\n  //\n  if (EnclosingExpr && !IsEnclosedByDataEnvironmentExpr) {\n    SemaRef.Diag(EnclosingExpr->getExprLoc(), diag::note_used_here) << EnclosingExpr->getSourceRange();"},{x,23134,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  SemaRef.Diag(SL, diag::note_used_here) << SR;"},{x,23524,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"},{x,23599,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/arc-peformselector.m"]={"clang/test/SemaObjC/arc-peformselector.m:32:34: note: used here"}
}
},
},
["note_used_in_initialization_here"]={
["note_used_in_initialization_here"]={
[c]="used in initialization here",
[f]="used in initialization here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="used in initialization here",
[d]="used in initialization here",
[b]=m,
[e]=p,
[g]="used in initialization here",
[a]="used in initialization here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091."},
[i]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091."},
[j]={{U,608,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n            SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_used_in_initialization_here);"},{U,610,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n          else if (Entity.getKind() == InitializedEntity::EK_ArrayElement)\n            SemaRef.Diag(Loc, diag::note_used_in_initialization_here);"}}
[j]={{W,608,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n            SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_used_in_initialization_here);"},{W,610,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n          else if (Entity.getKind() == InitializedEntity::EK_ArrayElement)\n            SemaRef.Diag(Loc, diag::note_used_in_initialization_here);"}}
},
},
["note_user_declared_ctor"]={
["note_user_declared_ctor"]={
[c]="implicit default constructor suppressed by user-declared constructor",
[f]="implicit default constructor suppressed by user-declared constructor",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="implicit default constructor suppressed by user-declared constructor",
[d]="implicit default constructor suppressed by user-declared constructor",
[b]=m,
[e]=p,
[g]="implicit default constructor suppressed by user\\-declared constructor",
[a]="implicit default constructor suppressed by user\\-declared constructor",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"92f241f18812",1354935182,"Properly compute triviality for explicitly-defaulted or deleted special members."},
[i]={"92f241f18812",1354935182,"Properly compute triviality for explicitly-defaulted or deleted special members."},
[j]={{y,9916,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n      if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))\n        S.Diag(CD->getLocation(), diag::note_user_declared_ctor);"}}
[j]={{z,9916,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n      if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))\n        S.Diag(CD->getLocation(), diag::note_user_declared_ctor);"}},
[k]={
["clang/test/CXX/class/class.union/p1.cpp"]={"clang/test/CXX/class/class.union/p1.cpp:23:24: note: implicit default constructor suppressed by user-declared constructor"}
}
},
},
["note_using"]={
["note_using"]={
[c]="using",
[f]="using",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="using",
[d]="using",
[b]=m,
[e]=p,
[g]="using",
[a]="using",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"},
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"},
[j]={{B,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}}
[j]={{C,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/selector-overload.m"]={"clang/test/SemaObjC/selector-overload.m:15:1: note: using"}
}
},
},
["note_using_decl"]={
["note_using_decl"]={
[c]="...using declaration",
[f]="...using declaration",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{|previous }0using declaration",
[d]="%select{|previous }0using declaration",
[b]=m,
[e]=p,
[g]="(?:|previous )using declaration",
[a]="(?:|previous )using declaration",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{v,3556,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{v,3641,"/// 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 (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{v,17217,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{y,12989,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n    Diag(D->getLocation(), diag::note_using_decl) << 1;"},{x,1981,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"}}
[j]={{w,3556,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{w,3641,"/// 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 (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{w,17217,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{z,12989,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n    Diag(D->getLocation(), diag::note_using_decl) << 1;"},{y,1981,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"}},
[k]={
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:7:10: note: using declaration"}
}
},
},
["note_using_decl_class_member_workaround"]={
["note_using_decl_class_member_workaround"]={
[c]="use ... instead",
[f]="use ... instead",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="use %select{an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable}0 instead",
[d]="use %select{an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable}0 instead",
[b]=m,
[e]=p,
[g]="use (?:an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable) instead",
[a]="use (?:an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable) instead",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"7ad0b8839652",1396475075,"If a using-declaration names a class member, but appears outside a class, try"},
[i]={"7ad0b8839652",1396475075,"If a using-declaration names a class member, but appears outside a class, try"},
[j]={{y,13075,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n          Diag(SS.getBeginLoc(), diag::note_using_decl_class_member_workaround) << 0 // alias declaration"},{y,13083,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n        } else {\n          Diag(InsertLoc, diag::note_using_decl_class_member_workaround) << 1 // typedef declaration"},{y,13099,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << 2 // reference declaration"},{y,13114,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n      } else if (R->getAsSingle<EnumConstantDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << (getLangOpts().CPlusPlus11 ? 4 : 3) // const[expr] variable"}}
[j]={{z,13075,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n          Diag(SS.getBeginLoc(), diag::note_using_decl_class_member_workaround) << 0 // alias declaration"},{z,13083,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n        } else {\n          Diag(InsertLoc, diag::note_using_decl_class_member_workaround) << 1 // typedef declaration"},{z,13099,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << 2 // reference declaration"},{z,13114,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n      } else if (R->getAsSingle<EnumConstantDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << (getLangOpts().CPlusPlus11 ? 4 : 3) // const[expr] variable"}},
[k]={
["clang/test/SemaTemplate/cxx1z-using-declaration.cpp"]={"clang/test/SemaTemplate/cxx1z-using-declaration.cpp:130:3: note: use a reference instead","clang/test/SemaTemplate/cxx1z-using-declaration.cpp:130:9: note: use an alias declaration instead"}
}
},
},
["note_using_decl_conflict"]={
["note_using_decl_conflict"]={
[c]="conflicting declaration",
[f]="conflicting declaration",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="conflicting declaration",
[d]="conflicting declaration",
[b]=m,
[e]=p,
[g]="conflicting declaration",
[a]="conflicting declaration",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations.  There"},
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations.  There"},
[j]={{y,12279,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag((NonTag ? NonTag : Tag)->getLocation(), diag::note_using_decl_conflict);"},{y,12309,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);"},{y,12322,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Tag->getLocation(), diag::note_using_decl_conflict);"},{y,12332,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);"}}
[j]={{z,12279,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag((NonTag ? NonTag : Tag)->getLocation(), diag::note_using_decl_conflict);"},{z,12309,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);"},{z,12322,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Tag->getLocation(), diag::note_using_decl_conflict);"},{z,12332,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);"}},
[k]={
["clang/test/Parser/cxx1z-using-declaration.cpp"]={"clang/test/Parser/cxx1z-using-declaration.cpp:13:18: note: conflicting declaration","clang/test/Parser/cxx1z-using-declaration.cpp:13:18: note: conflicting declaration"}
}
},
},
["note_using_decl_target"]={
["note_using_decl_target"]={
[c]="target of using declaration",
[f]="target of using declaration",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="target of using declaration",
[d]="target of using declaration",
[b]=m,
[e]=p,
[g]="target of using declaration",
[a]="target of using declaration",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations.  Split UnresolvedUsingDecl into"},
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations.  Split UnresolvedUsingDecl into"},
[j]={{v,3555,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{v,3640,"/// 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 (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{v,17216,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{y,12203,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        if (OrigDC == CurContext) {\n          Diag(Orig->getLocation(), diag::note_using_decl_target);"},{y,12212,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        Diag(Orig->getLocation(), diag::note_using_decl_target);"},{y,12277,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12308,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12321,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12331,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12778,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n    // If we asked for a typename and got a non-type decl, error out.\n    if (!R.getAsSingle<TypeDecl>() && !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) {\n      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)\n        Diag((*I)->getUnderlyingDecl()->getLocation(), diag::note_using_decl_target);"},{y,12787,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n  } else {\n    // If we asked for a non-typename and we got a type, error out,\n    // but only if this is an instantiation of an unresolved using\n    // decl.  Otherwise just silently find the type name.\n    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {\n      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);"},{jc,858,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // C++2a [module.interface]p5:\n  //  all entities to which all of the using-declarators ultimately refer\n  //  shall have been introduced with a name having external linkage\n  if (auto *USD = dyn_cast<UsingShadowDecl>(D)) {\n    if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n      S.Diag(Target->getLocation(), diag::note_using_decl_target);"},{x,1980,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"}}
[j]={{w,3555,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{w,3640,"/// 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 (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{w,17216,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{z,12203,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        if (OrigDC == CurContext) {\n          Diag(Orig->getLocation(), diag::note_using_decl_target);"},{z,12212,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        Diag(Orig->getLocation(), diag::note_using_decl_target);"},{z,12277,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{z,12308,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{z,12321,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{z,12331,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(Target->getLocation(), diag::note_using_decl_target);"},{z,12778,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n    // If we asked for a typename and got a non-type decl, error out.\n    if (!R.getAsSingle<TypeDecl>() && !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) {\n      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)\n        Diag((*I)->getUnderlyingDecl()->getLocation(), diag::note_using_decl_target);"},{z,12787,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n  } else {\n    // If we asked for a non-typename and we got a type, error out,\n    // but only if this is an instantiation of an unresolved using\n    // decl.  Otherwise just silently find the type name.\n    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {\n      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);"},{gc,858,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // C++2a [module.interface]p5:\n  //  all entities to which all of the using-declarators ultimately refer\n  //  shall have been introduced with a name having external linkage\n  if (auto *USD = dyn_cast<UsingShadowDecl>(D)) {\n    if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n      S.Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,1980,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"}},
[k]={
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:4:9: note: target of using declaration"}
}
},
},
["note_using_enum_decl"]={
["note_using_enum_decl"]={
[c]="...using-enum declaration",
[f]="...using-enum declaration",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{|previous }0using-enum declaration",
[d]="%select{|previous }0using-enum declaration",
[b]=m,
[e]=p,
[g]="(?:|previous )using\\-enum declaration",
[a]="(?:|previous )using\\-enum declaration",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={Gb,1615397021,Cb},
[i]={Mb,1615397021,Ib},
[j]={{y,12842,"NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation NameLoc, TypeSourceInfo *EnumType, EnumDecl *ED) {\n  if (CurContext->getRedeclContext()->isRecord()) {\n    for (NamedDecl *D : Previous)\n      if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D))\n        if (UED->getEnumDecl() == ED) {\n          Diag(D->getLocation(), diag::note_using_enum_decl) << 1;"}}
[j]={{z,12842,"NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation NameLoc, TypeSourceInfo *EnumType, EnumDecl *ED) {\n  if (CurContext->getRedeclContext()->isRecord()) {\n    for (NamedDecl *D : Previous)\n      if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D))\n        if (UED->getEnumDecl() == ED) {\n          Diag(D->getLocation(), diag::note_using_enum_decl) << 1;"}},
[k]={
["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:229:14: note: previous using-enum declaration","clang/test/SemaCXX/cxx20-using-enum.cpp:235:14: note: previous using-enum declaration"}
}
},
},
["note_using_value_decl_missing_typename"]={
["note_using_value_decl_missing_typename"]={
[c]="add \'typename\' to treat this using declaration as a type",
[f]="add \'typename\' to treat this using declaration as a type",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="add \'typename\' to treat this using declaration as a type",
[d]="add \'typename\' to treat this using declaration as a type",
[b]=m,
[e]=p,
[g]="add \'typename\' to treat this using declaration as a type",
[a]="add \'typename\' to treat this using declaration as a type",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using"},
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using"},
[j]={{x,11073,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::FoundUnresolvedValue: {\n    if (UnresolvedUsingValueDecl *Using = dyn_cast<UnresolvedUsingValueDecl>(Result.getRepresentativeDecl())) {\n      Diag(Loc, diag::note_using_value_decl_missing_typename) << FixItHint::CreateInsertion(Loc, \"typename \");"}}
[j]={{y,11073,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::FoundUnresolvedValue: {\n    if (UnresolvedUsingValueDecl *Using = dyn_cast<UnresolvedUsingValueDecl>(Result.getRepresentativeDecl())) {\n      Diag(Loc, diag::note_using_value_decl_missing_typename) << FixItHint::CreateInsertion(Loc, \"typename \");"}},
[k]={
["clang/test/SemaTemplate/typename-specifier-4.cpp"]={"clang/test/SemaTemplate/typename-specifier-4.cpp:146:11: note: add \'typename\' to treat this using declaration as a type"}
}
},
},
["note_valid_options"]={
["note_valid_options"]={
[c]="valid target CPU values are: A",
[f]="valid target CPU values are: A",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="valid target CPU values are: %0",
[d]="valid target CPU values are: %0",
[b]=m,
[e]=p,
[g]="valid target CPU values are\\: (.*?)",
[a]="valid target CPU values are\\: (.*?)",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"3ec1743d0d77",1518131655,"Make march/target-cpu print a note with the list of valid values for ARM"},
[i]={"3ec1743d0d77",1518131655,"Make march/target-cpu print a note with the list of valid values for ARM"},
[j]={{"clang/lib/Basic/Targets.cpp",792,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"},{"clang/lib/Basic/Targets.cpp",803,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"}}
[j]={{"clang/lib/Basic/Targets.cpp",792,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"},{"clang/lib/Basic/Targets.cpp",803,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"}},
[k]={
["clang/test/Preprocessor/predefined-arch-macros.c"]={"note: valid target CPU values are: nocona, core2, penryn, bonnell, atom, silvermont, slm, goldmont, goldmont-plus, tremont, nehalem, corei7, westmere, sandybridge, corei7-avx, ivybridge, core-avx-i, haswell, core-avx2, broadwell, skylake, skylake-avx512, skx, cascadelake, cooperlake, cannonlake, icelake-client, rocketlake, icelake-server, tigerlake, sapphirerapids, alderlake, raptorlake, meteorlake, sierraforest, grandridge, graniterapids, graniterapids-d, emeraldrapids, knl, knm, k8, athlon64, athlon-fx, opteron, k8-sse3, athlon64-sse3, opteron-sse3, amdfam10, barcelona, btver1, btver2, bdver1, bdver2, bdver3, bdver4, znver1, znver2, znver3, znver4, x86-64, x86-64-v2, x86-64-v3, x86-64-v4"}
}
},
},
["note_value_initialization_here"]={
["note_value_initialization_here"]={
[c]="in value-initialization of type A here",
[f]="in value-initialization of type A here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="in value-initialization of type %0 here",
[d]="in value-initialization of type %0 here",
[b]=m,
[e]=p,
[g]="in value\\-initialization of type (.*?) here",
[a]="in value\\-initialization of type (.*?) here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"593f993a6855",1354932077,"Implement C++03 [dcl.init]p5\'s checking for value-initialization of references"},
[i]={"593f993a6855",1354932077,"Implement C++03 [dcl.init]p5\'s checking for value-initialization of references"},
[j]={{U,9445,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto *FI : RD->fields()) {\n    if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"},{U,9452,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto &BI : RD->bases()) {\n    if (DiagnoseUninitializedReference(S, BI.getBeginLoc(), BI.getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"}}
[j]={{W,9445,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto *FI : RD->fields()) {\n    if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"},{W,9452,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto &BI : RD->bases()) {\n    if (DiagnoseUninitializedReference(S, BI.getBeginLoc(), BI.getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"}},
[k]={
["clang/test/CXX/dcl.decl/dcl.init/p5.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p5.cpp:20:10: note: in value-initialization of type \'S\' here","clang/test/CXX/dcl.decl/dcl.init/p5.cpp:24:5: note: in value-initialization of type \'S\' here","clang/test/CXX/dcl.decl/dcl.init/p5.cpp:26:7: note: in value-initialization of type \'T\' here","clang/test/CXX/dcl.decl/dcl.init/p5.cpp:24:5: note: in value-initialization of type \'S\' here","clang/test/CXX/dcl.decl/dcl.init/p5.cpp:29:5: note: in value-initialization of type \'T\' here","clang/test/CXX/dcl.decl/dcl.init/p5.cpp:31:7: note: in value-initialization of type \'U\' here"}
}
},
},
["note_var_declared_here"]={
["note_var_declared_here"]={
[c]="variable A is declared here",
[f]="variable A is declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="variable %0 is declared here",
[d]="variable %0 is declared here",
[b]=m,
[e]=p,
[g]="variable (.*?) is declared here",
[a]="variable (.*?) is declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[i]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[j]={{I,1052,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n  // Report where the variable was declared when the use wasn\'t within\n  // the initializer of that declaration & we didn\'t already suggest\n  // an initialization fixit.\n  if (!SuggestInitializationFixit(S, VD))\n    S.Diag(VD->getBeginLoc(), diag::note_var_declared_here) << VD->getDeclName();"},{v,8386,"/// Check if \'E\', which is an expression that is about to be modified, refers\n/// to a constructor parameter that shadows a field.\nvoid Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {\n  Diag(D->getLocation(), diag::note_var_declared_here) << D;"},{y,11599,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    if (Sel == USS_InvalidMember) {\n      S.Diag(VD->getLocation(), diag::note_var_declared_here) << VD << VD->getSourceRange();"}}
[j]={{J,1052,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n  // Report where the variable was declared when the use wasn\'t within\n  // the initializer of that declaration & we didn\'t already suggest\n  // an initialization fixit.\n  if (!SuggestInitializationFixit(S, VD))\n    S.Diag(VD->getBeginLoc(), diag::note_var_declared_here) << VD->getDeclName();"},{w,8386,"/// Check if \'E\', which is an expression that is about to be modified, refers\n/// to a constructor parameter that shadows a field.\nvoid Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {\n  Diag(D->getLocation(), diag::note_var_declared_here) << D;"},{z,11599,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    if (Sel == USS_InvalidMember) {\n      S.Diag(VD->getLocation(), diag::note_var_declared_here) << VD << VD->getSourceRange();"}},
[k]={
["clang/test/SemaCXX/warn-shadow.cpp"]={"clang/test/SemaCXX/warn-shadow.cpp:51:9: note: variable \'f1\' is declared here","clang/test/SemaCXX/warn-shadow.cpp:51:17: note: variable \'f2\' is declared here","clang/test/SemaCXX/warn-shadow.cpp:51:25: note: variable \'f3\' is declared here","clang/test/SemaCXX/warn-shadow.cpp:51:33: note: variable \'f4\' is declared here"}
}
},
},
["note_var_explicitly_captured_here"]={
["note_var_explicitly_captured_here"]={
[c]="variable A is... captured here",
[f]="variable A is... captured here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="variable %0 is%select{| explicitly}1 captured here",
[d]="variable %0 is%select{| explicitly}1 captured here",
[b]=m,
[e]=p,
[g]="variable (.*?) is(?:| explicitly) captured here",
[a]="variable (.*?) is(?:| explicitly) captured here",
[a]=l,
[g]=m,
[e]="Lambda Issue",
[h]="Lambda Issue",
[i]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"},
[i]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"},
[j]={{v,8332,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  if (!CaptureLoc.isInvalid())\n    Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Name << /*explicitly*/ 1;"},{v,8351,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    if (!CaptureLoc.isInvalid())\n      Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Shadow.VD->getDeclName() << /*explicitly*/ 0;"},{"clang/lib/Sema/SemaLambda.cpp",1352,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n      if (Capture.Id == Param->getIdentifier()) {\n        Diag(Capture.Loc, diag::note_var_explicitly_captured_here) << Capture.Id << true;"},{w,23126,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  if (SemaRef.LangOpts.OpenMP >= 50 && (SemaRef.getCurLambda(/*IgnoreNonLambdaCapturingScope=*/true) || SemaRef.getCurBlock() || SemaRef.getCurCapturedRegion()) && VD->hasGlobalStorage()) {\n    if (!MapTy || (*MapTy != OMPDeclareTargetDeclAttr::MT_To && *MapTy != OMPDeclareTargetDeclAttr::MT_Enter)) {\n      SemaRef.Diag(SL, diag::note_var_explicitly_captured_here) << VD << 0 << SR;"}}
[j]={{w,8332,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  if (!CaptureLoc.isInvalid())\n    Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Name << /*explicitly*/ 1;"},{w,8351,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    if (!CaptureLoc.isInvalid())\n      Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Shadow.VD->getDeclName() << /*explicitly*/ 0;"},{"clang/lib/Sema/SemaLambda.cpp",1352,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n      if (Capture.Id == Param->getIdentifier()) {\n        Diag(Capture.Loc, diag::note_var_explicitly_captured_here) << Capture.Id << true;"},{x,23126,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  if (SemaRef.LangOpts.OpenMP >= 50 && (SemaRef.getCurLambda(/*IgnoreNonLambdaCapturingScope=*/true) || SemaRef.getCurBlock() || SemaRef.getCurCapturedRegion()) && VD->hasGlobalStorage()) {\n    if (!MapTy || (*MapTy != OMPDeclareTargetDeclAttr::MT_To && *MapTy != OMPDeclareTargetDeclAttr::MT_Enter)) {\n      SemaRef.Diag(SL, diag::note_var_explicitly_captured_here) << VD << 0 << SR;"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp:5:13: note: variable \'x\' is explicitly captured here"}
}
},
},
["note_var_fixit_add_initialization"]={
["note_var_fixit_add_initialization"]={
[c]="initialize the variable A to silence this warning",
[f]="initialize the variable A to silence this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="initialize the variable %0 to silence this warning",
[d]="initialize the variable %0 to silence this warning",
[b]=m,
[e]=p,
[g]="initialize the variable (.*?) to silence this warning",
[a]="initialize the variable (.*?) to silence this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental"},
[i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental"},
[j]={{I,797,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n  S.Diag(Loc, diag::note_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(Loc, Init);"}}
[j]={{J,797,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n  S.Diag(Loc, diag::note_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(Loc, Init);"}},
[k]={
["clang/test/Analysis/uninit-asm-goto.cpp"]={"clang/test/Analysis/uninit-asm-goto.cpp:104:8: note: initialize the variable \'y\' to silence this warning"}
}
},
},
["note_var_prev_partial_spec_here"]={
["note_var_prev_partial_spec_here"]={
[c]="previous declaration of variable template partial specialization is here",
[f]="previous declaration of variable template partial specialization is here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="previous declaration of variable template partial specialization is here",
[d]="previous declaration of variable template partial specialization is here",
[b]=m,
[e]=p,
[g]="previous declaration of variable template partial specialization is here",
[a]="previous declaration of variable template partial specialization is here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4370,"/// Instantiate the declaration of a variable template partial\n/// specialization.\n///\n/// \\param VarTemplate the (instantiated) variable template that is partially\n/// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) variable template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nVarTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_var_prev_partial_spec_here);"}}
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4370,"/// Instantiate the declaration of a variable template partial\n/// specialization.\n///\n/// \\param VarTemplate the (instantiated) variable template that is partially\n/// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) variable template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nVarTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_var_prev_partial_spec_here);"}}
},
},
["note_vbase_moved_here"]={
["note_vbase_moved_here"]={
[c]=Xb,
[f]=mc,
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="%select{%1 is a virtual base class of base class %2 declared here|virtual base class %1 declared here}0",
[d]="%select{%1 is a virtual base class of base class %2 declared here|virtual base class %1 declared here}0",
[b]=m,
[e]=p,
[g]="(?:(.*?) is a virtual base class of base class (.*?) declared here|virtual base class (.*?) declared here)",
[a]="(?:(.*?) is a virtual base class of base class (.*?) declared here|virtual base class (.*?) declared here)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move"},
[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move"},
[j]={{y,15085,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << Existing->getType() << Existing->getSourceRange();"},{y,15089,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << BI.getType() << BaseSpec->getSourceRange();"}}
[j]={{z,15085,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << Existing->getType() << Existing->getSourceRange();"},{z,15089,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << BI.getType() << BaseSpec->getSourceRange();"}},
[k]={
["clang/test/CXX/special/class.copy/implicit-move.cpp"]={"clang/test/CXX/special/class.copy/implicit-move.cpp:261:7: note: \'B\' is a virtual base class of base class \'E<B, 0>\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:262:7: note: \'B\' is a virtual base class of base class \'E<B, 1>\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:261:7: note: \'D\' is a virtual base class of base class \'E<D, 0>\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:262:7: note: \'D\' is a virtual base class of base class \'E<D, 1>\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:275:7: note: \'B\' is a virtual base class of base class \'E<B, 0>\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:276:7: note: virtual base class \'B\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:275:7: note: \'D\' is a virtual base class of base class \'E<D, 0>\' declared here","clang/test/CXX/special/class.copy/implicit-move.cpp:276:7: note: virtual base class \'D\' declared here"}
}
},
},
["note_verify_ambiguous_marker"]={
["note_verify_ambiguous_marker"]={
[c]="ambiguous marker \'A\' is defined here",
[f]="ambiguous marker \'A\' is defined here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="ambiguous marker \'%0\' is defined here",
[d]="ambiguous marker \'%0\' is defined here",
[b]=m,
[e]=p,
[g]="ambiguous marker \'(.*?)\' is defined here",
[a]="ambiguous marker \'(.*?)\' is defined here",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."},
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."},
[j]={{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",387,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.DefLoc, diag::note_verify_ambiguous_marker) << Name;"},{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",388,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.RedefLoc, diag::note_verify_ambiguous_marker) << Name;"}}
[j]={{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",387,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.DefLoc, diag::note_verify_ambiguous_marker) << Name;"},{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",388,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.RedefLoc, diag::note_verify_ambiguous_marker) << Name;"}}
},
},
["note_vla_unsupported"]={
["note_vla_unsupported"]={
[c]="variable length arrays are not supported for the current target",
[f]="variable length arrays are not supported for the current target",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="variable length arrays are not supported for the current target",
[d]="variable length arrays are not supported for the current target",
[b]=m,
[e]=p,
[g]="variable length arrays are not supported for the current target",
[a]="variable length arrays are not supported for the current target",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported"},
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported"},
[j]={{w,19504,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n          S.Diag(ELoc, diag::note_vla_unsupported);"},{w,19508,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n        } else {\n          S.targetDiag(ELoc, diag::note_vla_unsupported);"}}
[j]={{x,19504,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n          S.Diag(ELoc, diag::note_vla_unsupported);"},{x,19508,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n        } else {\n          S.targetDiag(ELoc, diag::note_vla_unsupported);"}},
[k]={
["clang/test/OpenMP/target_vla_messages.cpp"]={"clang/test/OpenMP/target_vla_messages.cpp:40:35: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:95:32: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:111:32: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:119:32: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:136:35: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:152:35: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:160:35: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:179:30: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:198:30: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:207:30: note: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:213:34: note: variable length arrays are not supported for the current target"}
}
},
},
["note_which_delegates_to"]={
["note_which_delegates_to"]={
[c]="which delegates to",
[f]="which delegates to",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="which delegates to",
[d]="which delegates to",
[b]=m,
[e]=p,
[g]="which delegates to",
[a]="which delegates to",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection."},
[i]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection."},
[j]={{y,18554,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      while (C->getCanonicalDecl() != Canonical) {\n        S.Diag(C->getLocation(), diag::note_which_delegates_to);"}}
[j]={{z,18554,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      while (C->getCanonicalDecl() != Canonical) {\n        S.Diag(C->getLocation(), diag::note_which_delegates_to);"}},
[k]={
["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:32:6: note: which delegates to"}
}
},
},
["note_while_in_implementation"]={
["note_while_in_implementation"]={
[c]="detected while default synthesizing properties in class implementation",
[f]="detected while default synthesizing properties in class implementation",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="detected while default synthesizing properties in class implementation",
[d]="detected while default synthesizing properties in class implementation",
[b]=m,
[e]=p,
[g]="detected while default synthesizing properties in class implementation",
[a]="detected while default synthesizing properties in class implementation",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"d6886e7fad5e",1336500219,"Fixes a typo. note_xxx not not_xxx."},
[i]={"d6886e7fad5e",1336500219,"Fixes a typo. note_xxx not not_xxx."},
[j]={{E,1960,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"},{E,1976,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (PIDecl && !Prop->isUnavailable()) {\n      Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"}}
[j]={{G,1960,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"},{G,1976,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (PIDecl && !Prop->isUnavailable()) {\n      Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"}},
[k]={
["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:47:17: note: detected while default synthesizing properties in class implementation"}
}
},
},
["note_widen_bitfield"]={
["note_widen_bitfield"]={
[c]="widen this field to A bits to store all values of B",
[f]="widen this field to A bits to store all values of B",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="widen this field to %0 bits to store all values of %1",
[d]="widen this field to %0 bits to store all values of %1",
[b]=m,
[e]=p,
[g]="widen this field to (.*?) bits to store all values of (.*?)",
[a]="widen this field to (.*?) bits to store all values of (.*?)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[j]={{F,14111,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield) << BitsNeeded << ED << WidthExpr->getSourceRange();"}}
[j]={{F,14111,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield) << BitsNeeded << ED << WidthExpr->getSourceRange();"}},
[k]={
["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:11:23: note: widen this field to 3 bits to store all values of \'ThreeBits\'","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:11:23: note: widen this field to 3 bits to store all values of \'ThreeBitsSigned\'","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:12:25: note: widen this field to 3 bits to store all values of \'ThreeBits\'","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:12:25: note: widen this field to 3 bits to store all values of \'ThreeBitsSigned\'"}
}
},
},
["note_within_field_of_type"]={
["note_within_field_of_type"]={
[c]="within field of type A declared here",
[f]="within field of type A declared here",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="within field of type %0 declared here",
[d]="within field of type %0 declared here",
[b]=m,
[e]=p,
[g]="within field of type (.*?) declared here",
[a]="within field of type (.*?) declared here",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[j]={{v,9585,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      S.Diag(OrigRecDecl->getLocation(), diag::note_within_field_of_type) << OrigRecDecl->getDeclName();"},{v,9595,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      // We have an error, now let\'s go back up through history and show where\n      // the offending field came from\n      for (ArrayRef<const FieldDecl *>::const_iterator I = HistoryStack.begin() + 1, E = HistoryStack.end(); I != E; ++I) {\n        S.Diag(OuterField->getLocation(), diag::note_within_field_of_type) << OuterField->getType();"},{"clang/lib/Sema/SemaSYCL.cpp",98,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  do {\n    auto EmitHistory = [&]() {\n      // The first element is always nullptr.\n      for (uint64_t Index = 1; Index < History.size(); ++Index) {\n        SYCLDiagIfDeviceCode(History[Index]->getLocation(), diag::note_within_field_of_type) << History[Index]->getType();"}}
[j]={{w,9585,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      S.Diag(OrigRecDecl->getLocation(), diag::note_within_field_of_type) << OrigRecDecl->getDeclName();"},{w,9595,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      // We have an error, now let\'s go back up through history and show where\n      // the offending field came from\n      for (ArrayRef<const FieldDecl *>::const_iterator I = HistoryStack.begin() + 1, E = HistoryStack.end(); I != E; ++I) {\n        S.Diag(OuterField->getLocation(), diag::note_within_field_of_type) << OuterField->getType();"},{"clang/lib/Sema/SemaSYCL.cpp",98,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  do {\n    auto EmitHistory = [&]() {\n      // The first element is always nullptr.\n      for (uint64_t Index = 1; Index < History.size(); ++Index) {\n        SYCLDiagIfDeviceCode(History[Index]->getLocation(), diag::note_within_field_of_type) << History[Index]->getType();"}},
[k]={
["clang/test/SemaSYCL/zero-length-arrays.cpp"]={"clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: note: within field of type \'WrapperOfWrapper\' declared here","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: note: within field of type \'WrapperOfWrapper\' declared here","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: note: within field of type \'Templated<1 - 1, double>\' declared here",Qb,"clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: note: within field of type \'Templated<0, float>\' declared here",Qb,"clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: note: within field of type \'Templated<0U, float>\' declared here",Qb,"clang/test/SemaSYCL/zero-length-arrays.cpp:58:31: note: within field of type \'Templated<0U, float>\' declared here",Qb,"clang/test/SemaSYCL/zero-length-arrays.cpp:20:11: note: within field of type \'Wrapper\' declared here",Qb,Qb,Qb,Qb,"clang/test/SemaSYCL/zero-length-arrays.cpp:20:11: note: within field of type \'Wrapper\' declared here"}
}
},
},
["note_xor_used_as_pow_silence"]={
["note_xor_used_as_pow_silence"]={
[c]="replace expression with \'A\' ...to silence this warning",
[f]="replace expression with \'A\' ...to silence this warning",
[d]=n,
[b]=n,
[f]=o,
[c]=o,
[h]="replace expression with \'%0\' %select{|or use \'xor\' instead of \'^\' }1to silence this warning",
[d]="replace expression with \'%0\' %select{|or use \'xor\' instead of \'^\' }1to silence this warning",
[b]=m,
[e]=p,
[g]="replace expression with \'(.*?)\' (?:|or use \'xor\' instead of \'\\^\' )to silence this warning",
[a]="replace expression with \'(.*?)\' (?:|or use \'xor\' instead of \'\\^\' )to silence this warning",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"},
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"},
[j]={{C,13691,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0x2 ^ \" + RHSStr) << SuggestXor;"},{C,13903,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n  } else if (LeftSideValue == 10) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0xA ^ \" + RHSStr) << SuggestXor;"}}
[j]={{D,13691,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0x2 ^ \" + RHSStr) << SuggestXor;"},{D,13903,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n  } else if (LeftSideValue == 10) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0xA ^ \" + RHSStr) << SuggestXor;"}},
[k]={
["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:36:11: note: replace expression with \'0x2 ^ 0\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:39:11: note: replace expression with \'0x2 ^ 1\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:42:11: note: replace expression with \'0x2 ^ 2\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:45:11: note: replace expression with \'0x2 ^ 8\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:48:11: note: replace expression with \'0x2 ^ +8\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:51:13: note: replace expression with \'0x2 ^ 8\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:54:11: note: replace expression with \'0x2 ^ 16\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:57:11: note: replace expression with \'0x2 ^ TEN\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:60:18: note: replace expression with \'0x2 ^ ALPHA_OFFSET\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:80:11: note: replace expression with \'0x2 ^ 32\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:83:11: note: replace expression with \'0x2 ^ 64\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:88:12: note: replace expression with \'0xA ^ 0\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:91:12: note: replace expression with \'0xA ^ 1\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:94:12: note: replace expression with \'0xA ^ 2\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:97:12: note: replace expression with \'0xA ^ 4\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:100:12: note: replace expression with \'0xA ^ +4\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:103:12: note: replace expression with \'0xA ^ 10\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:106:13: note: replace expression with \'0xA ^ 10\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:109:12: note: replace expression with \'0xA ^ TEN\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:112:12: note: replace expression with \'0xA ^ 100\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:116:12: note: replace expression with \'0xA ^ -EXP\' or use \'xor\' instead of \'^\' to silence this warning","clang/test/SemaCXX/warn-xor-as-pow.cpp:119:12: note: replace expression with \'0xA ^ +EXP\' or use \'xor\' instead of \'^\' to silence this warning"}
}
},
},
["null_in_char_or_string"]={
["null_in_char_or_string"]={
[c]="null character(s) preserved in ... literal [-Wnull-character]",
[f]="null character(s) preserved in ... literal [-Wnull-character]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"null-character"},
[r]={"null-character"},
[q]="null-character",
[q]="null-character",
[h]="null character(s) preserved in %select{char|string}0 literal",
[d]="null character(s) preserved in %select{char|string}0 literal",
[b]=t,
[e]=u,
[g]="null character\\(s\\) preserved in (?:char|string) literal",
[a]="null character\\(s\\) preserved in (?:char|string) literal",
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"},
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"},
[j]={{kb,2127,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{kb,2251,"/// LexAngledStringLiteral - Lex the remainder of an angled string literal,\n/// after having lexed the \'<\' character.  This is used for #include filenames.\nbool Lexer::LexAngledStringLiteral(Token &Result, const char *CurPtr) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{kb,2349,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the character, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 0;"}}
[j]={{lb,2127,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{lb,2251,"/// LexAngledStringLiteral - Lex the remainder of an angled string literal,\n/// after having lexed the \'<\' character.  This is used for #include filenames.\nbool Lexer::LexAngledStringLiteral(Token &Result, const char *CurPtr) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{lb,2349,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the character, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 0;"}},
[k]={
["clang/test/Lexer/null-character-in-literal.c"]={"clang/test/Lexer/null-character-in-literal.c:6:11: warning: null character(s) preserved in char literal [-Wnull-character]","clang/test/Lexer/null-character-in-literal.c:7:12: warning: null character(s) preserved in char literal [-Wnull-character]","clang/test/Lexer/null-character-in-literal.c:10:16: warning: null character(s) preserved in string literal [-Wnull-character]","clang/test/Lexer/null-character-in-literal.c:11:17: warning: null character(s) preserved in string literal [-Wnull-character]","clang/test/Lexer/null-character-in-literal.c:15:16: warning: null character(s) preserved in string literal [-Wnull-character]"}
}
},
},
["null_in_file"]={
["null_in_file"]={
[c]="null character ignored [-Wnull-character]",
[f]="null character ignored [-Wnull-character]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"null-character"},
[r]={"null-character"},
[q]="null-character",
[q]="null-character",
[h]="null character ignored",
[d]="null character ignored",
[b]=t,
[e]=u,
[g]="null character ignored",
[a]="null character ignored",
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{kb,3641,"LexStart:\n  case 0: // Null.\n    if (!isLexingRawMode())\n      Diag(CurPtr - 1, diag::null_in_file);"}}
[j]={{lb,3641,"LexStart:\n  case 0: // Null.\n    if (!isLexingRawMode())\n      Diag(CurPtr - 1, diag::null_in_file);"}},
[k]={
["clang/test/Lexer/newline-nul.c"]={"clang/test/Lexer/newline-nul.c:6:1: warning: null character ignored [-Wnull-character]"}
}
},
},
["override_keyword_hides_virtual_member_function"]={
["override_keyword_hides_virtual_member_function"]={
[c]="non-virtual member function marked \'A\' hides virtual member ...",
[f]="non-virtual member function marked \'A\' hides virtual member ...",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="non-virtual member function marked \'%0\' hides virtual member %select{function|functions}1",
[d]="non-virtual member function marked \'%0\' hides virtual member %select{function|functions}1",
[b]=Pb,
[e]=Yb,
[g]="non\\-virtual member function marked \'(.*?)\' hides virtual member (?:function|functions)",
[a]="non\\-virtual member function marked \'(.*?)\' hides virtual member (?:function|functions)",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func."},
[i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func."},
[j]={{y,3244,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n        Diag(OA->getLocation(), diag::override_keyword_hides_virtual_member_function) << \"override\" << (OverloadedMethods.size() > 1);"},{y,3248,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      } else if (FinalAttr *FA = D->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::override_keyword_hides_virtual_member_function) << (FA->isSpelledAsSealed() ? \"sealed\" : \"final\") << (OverloadedMethods.size() > 1);"}}
[j]={{z,3244,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n        Diag(OA->getLocation(), diag::override_keyword_hides_virtual_member_function) << \"override\" << (OverloadedMethods.size() > 1);"},{z,3248,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      } else if (FinalAttr *FA = D->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::override_keyword_hides_virtual_member_function) << (FA->isSpelledAsSealed() ? \"sealed\" : \"final\") << (OverloadedMethods.size() > 1);"}},
[k]={
["clang/test/SemaCXX/pass-object-size.cpp"]={"clang/test/SemaCXX/pass-object-size.cpp:89:28: error: non-virtual member function marked \'override\' hides virtual member function"}
}
},
},
["override_keyword_only_allowed_on_virtual_member_functions"]={
["override_keyword_only_allowed_on_virtual_member_functions"]={
[c]="only virtual member functions can be marked \'A\'",
[f]="only virtual member functions can be marked \'A\'",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="only virtual member functions can be marked \'%0\'",
[d]="only virtual member functions can be marked \'%0\'",
[b]=Pb,
[e]=Yb,
[g]="only virtual member functions can be marked \'(.*?)\'",
[a]="only virtual member functions can be marked \'(.*?)\'",
[a]=l,
[g]=m,
[e]=k,
[h]=l,
[i]={"13a69102d779",1295498062,"Only allow virtual member functions to be marked \'override\' and \'final\'."},
[i]={"13a69102d779",1295498062,"Only allow virtual member functions to be marked \'override\' and \'final\'."},
[j]={{y,3263,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      Diag(OA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << \"override\" << FixItHint::CreateRemoval(OA->getLocation());"},{y,3269,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (FinalAttr *FA = D->getAttr<FinalAttr>()) {\n      Diag(FA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << (FA->isSpelledAsSealed() ? \"sealed\" : \"final\") << FixItHint::CreateRemoval(FA->getLocation());"}}
[j]={{z,3263,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      Diag(OA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << \"override\" << FixItHint::CreateRemoval(OA->getLocation());"},{z,3269,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (FinalAttr *FA = D->getAttr<FinalAttr>()) {\n      Diag(FA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << (FA->isSpelledAsSealed() ? \"sealed\" : \"final\") << FixItHint::CreateRemoval(FA->getLocation());"}},
[k]={
["clang/test/CXX/class/class.mem/p8-0x.cpp"]={"clang/test/CXX/class/class.mem/p8-0x.cpp:20:12: error: only virtual member functions can be marked \'override\'","clang/test/CXX/class/class.mem/p8-0x.cpp:21:9: error: only virtual member functions can be marked \'override\'","clang/test/CXX/class/class.mem/p8-0x.cpp:26:12: error: only virtual member functions can be marked \'final\'","clang/test/CXX/class/class.mem/p8-0x.cpp:27:9: error: only virtual member functions can be marked \'final\'","clang/test/CXX/class/class.mem/p8-0x.cpp:46:14: error: only virtual member functions can be marked \'override\'","clang/test/CXX/class/class.mem/p8-0x.cpp:51:14: error: only virtual member functions can be marked \'final\'"}
}
},
},
["pp_disabled_macro_expansion"]={
["pp_disabled_macro_expansion"]={
[c]="disabled expansion of recursive macro [-Wdisabled-macro-expansion]",
[f]="disabled expansion of recursive macro [-Wdisabled-macro-expansion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"disabled-macro-expansion"},
[r]={"disabled-macro-expansion"},
[q]="disabled-macro-expansion",
[q]="disabled-macro-expansion",
[h]="disabled expansion of recursive macro",
[d]="disabled expansion of recursive macro",
[b]=t,
[e]=u,
[g]="disabled expansion of recursive macro",
[a]="disabled expansion of recursive macro",
[a]=" \\[(?:\\-Werror,)?\\-Wdisabled\\-macro\\-expansion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdisabled\\-macro\\-expansion[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning."},
[i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning."},
[j]={{wc,622,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If this macro expands to no tokens, don\'t bother to push it onto the\n  // expansion stack, only to take it right back off.\n  if (MI->getNumTokens() == 0) {\n  } else if (MI->getNumTokens() == 1 && isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(), *this)) {\n    // If this is a disabled macro or #define X X, we must mark the result as\n    // unexpandable.\n    if (IdentifierInfo *NewII = Identifier.getIdentifierInfo()) {\n      if (MacroInfo *NewMI = getMacroInfo(NewII))\n        if (!NewMI->isEnabled() || NewMI == MI) {\n          // Don\'t warn for \"#define X X\" like \"#define bool bool\" from\n          // stdbool.h.\n          if (NewMI != MI || MI->isFunctionLike())\n            Diag(Identifier, diag::pp_disabled_macro_expansion);"},{"clang/lib/Lex/Preprocessor.cpp",833,"/// HandleIdentifier - This callback is invoked when the lexer reads an\n/// identifier.  This callback looks up the identifier in the map and/or\n/// potentially macro expands it or turns it into a named token (like \'for\').\n///\n/// Note that callers of this method are guarded by checking the\n/// IdentifierInfo\'s \'isHandleIdentifierCase\' bit.  If this method changes, the\n/// IdentifierInfo methods that compute these properties will need to change to\n/// match.\nbool Preprocessor::HandleIdentifier(Token &Identifier) {\n  // If this is a macro to be expanded, do it.\n  if (MacroDefinition MD = getMacroDefinition(&II)) {\n    if (!DisableMacroExpansion) {\n      if (!Identifier.isExpandDisabled() && MI->isEnabled()) {\n      } else {\n        if (MI->isObjectLike() || isNextPPTokenLParen())\n          Diag(Identifier, diag::pp_disabled_macro_expansion);"}}
[j]={{Vc,622,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If this macro expands to no tokens, don\'t bother to push it onto the\n  // expansion stack, only to take it right back off.\n  if (MI->getNumTokens() == 0) {\n  } else if (MI->getNumTokens() == 1 && isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(), *this)) {\n    // If this is a disabled macro or #define X X, we must mark the result as\n    // unexpandable.\n    if (IdentifierInfo *NewII = Identifier.getIdentifierInfo()) {\n      if (MacroInfo *NewMI = getMacroInfo(NewII))\n        if (!NewMI->isEnabled() || NewMI == MI) {\n          // Don\'t warn for \"#define X X\" like \"#define bool bool\" from\n          // stdbool.h.\n          if (NewMI != MI || MI->isFunctionLike())\n            Diag(Identifier, diag::pp_disabled_macro_expansion);"},{"clang/lib/Lex/Preprocessor.cpp",833,"/// HandleIdentifier - This callback is invoked when the lexer reads an\n/// identifier.  This callback looks up the identifier in the map and/or\n/// potentially macro expands it or turns it into a named token (like \'for\').\n///\n/// Note that callers of this method are guarded by checking the\n/// IdentifierInfo\'s \'isHandleIdentifierCase\' bit.  If this method changes, the\n/// IdentifierInfo methods that compute these properties will need to change to\n/// match.\nbool Preprocessor::HandleIdentifier(Token &Identifier) {\n  // If this is a macro to be expanded, do it.\n  if (MacroDefinition MD = getMacroDefinition(&II)) {\n    if (!DisableMacroExpansion) {\n      if (!Identifier.isExpandDisabled() && MI->isEnabled()) {\n      } else {\n        if (MI->isObjectLike() || isNextPPTokenLParen())\n          Diag(Identifier, diag::pp_disabled_macro_expansion);"}},
[k]={
["clang/test/Preprocessor/warn-disabled-macro-expansion.c"]={"clang/test/Preprocessor/warn-disabled-macro-expansion.c:22:1: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]","clang/test/Preprocessor/warn-disabled-macro-expansion.c:26:1: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]","clang/test/Preprocessor/warn-disabled-macro-expansion.c:28:1: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]","clang/test/Preprocessor/warn-disabled-macro-expansion.c:30:3: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]","clang/test/Preprocessor/warn-disabled-macro-expansion.c:32:1: warning: disabled expansion of recursive macro [-Wdisabled-macro-expansion]"}
}
},
},
["pp_err_elif_after_else"]={
["pp_err_elif_after_else"]={
[c]="... after #else",
[f]="... after #else",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="%select{#elif|#elifdef|#elifndef}0 after #else",
[d]="%select{#elif|#elifdef|#elifndef}0 after #else",
[b]=Pb,
[e]=Yb,
[g]="(?:\\#elif|\\#elifdef|\\#elifndef) after \\#else",
[a]="(?:\\#elif|\\#elifdef|\\#elifndef) after \\#else",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,721,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << PED_Elif;"},{S,777,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << (IsElifDef ? PED_Elifdef : PED_Elifndef);"},{S,3482,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  // If this is a #elif with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(ElifToken, diag::pp_err_elif_after_else) << DirKind;"}}
[j]={{S,721,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << PED_Elif;"},{S,777,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << (IsElifDef ? PED_Elifdef : PED_Elifndef);"},{S,3482,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  // If this is a #elif with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(ElifToken, diag::pp_err_elif_after_else) << DirKind;"}},
[k]={
["clang/test/Preprocessor/elifdef.c"]={"clang/test/Preprocessor/elifdef.c:97:2: error: #elifdef after #else","clang/test/Preprocessor/elifdef.c:104:2: error: #elifndef after #else","clang/test/Preprocessor/elifdef.c:129:2: error: #elif after #else"}
}
},
},
["pp_err_elif_without_if"]={
["pp_err_elif_without_if"]={
[c]="... without #if",
[f]="... without #if",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="%select{#elif|#elifdef|#elifndef}0 without #if",
[d]="%select{#elif|#elifdef|#elifndef}0 without #if",
[b]=Pb,
[e]=Yb,
[g]="(?:\\#elif|\\#elifdef|\\#elifndef) without \\#if",
[a]="(?:\\#elif|\\#elifdef|\\#elifndef) without \\#if",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,3472,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(ElifToken, diag::pp_err_elif_without_if) << DirKind;"}}
[j]={{S,3472,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(ElifToken, diag::pp_err_elif_without_if) << DirKind;"}},
[k]={
["clang/test/Preprocessor/elifdef.c"]={"clang/test/Preprocessor/elifdef.c:108:2: error: #elifdef without #if","clang/test/Preprocessor/elifdef.c:112:2: error: #elifndef without #if"}
}
},
},
["pp_err_else_after_else"]={
["pp_err_else_after_else"]={
[c]="#else after #else",
[f]="#else after #else",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="#else after #else",
[d]="#else after #else",
[b]=Pb,
[e]=Yb,
[g]="\\#else after \\#else",
[a]="\\#else after \\#else",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,693,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n        // If this is a #else with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_else_after_else);"},{S,3417,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  // If this is a #else with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(Result, diag::pp_err_else_after_else);"}}
[j]={{S,693,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n        // If this is a #else with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_else_after_else);"},{S,3417,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  // If this is a #else with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(Result, diag::pp_err_else_after_else);"}}
},
},
["pp_err_else_without_if"]={
["pp_err_else_without_if"]={
[c]="#else without #if",
[f]="#else without #if",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="#else without #if",
[d]="#else without #if",
[b]=Pb,
[e]=Yb,
[g]="\\#else without \\#if",
[a]="\\#else without \\#if",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,3408,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(Result, diag::pp_err_else_without_if);"}}
[j]={{S,3408,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(Result, diag::pp_err_else_without_if);"}}
},
},
["pp_hash_warning"]={
["pp_hash_warning"]={
[c]="A [-W#warnings]",
[f]="A [-W#warnings]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"#warnings","cpp"},
[r]={"#warnings","cpp"},
[q]="#warnings",
[q]="#warnings",
[h]=uc,
[d]=Hc,
[b]=t,
[e]=u,
[g]=tc,
[a]=Ic,
[a]=" \\[(?:\\-Werror,)?\\-W\\#warnings[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-W\\#warnings[^\\]]*\\]",
[e]="User-Defined Issue",
[h]="User-Defined Issue",
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,1656,"/// HandleUserDiagnosticDirective - Handle a #warning or #error directive.\n///\nvoid Preprocessor::HandleUserDiagnosticDirective(Token &Tok, bool isWarning) {\n  if (isWarning)\n    Diag(Tok, diag::pp_hash_warning) << Msg;"},{"clang/unittests/Basic/DiagnosticTest.cpp",149,"TEST(DiagnosticTest, storedDiagEmptyWarning) {\n  Diags.Report(diag::pp_hash_warning) << \"\";"}}
[j]={{S,1656,"/// HandleUserDiagnosticDirective - Handle a #warning or #error directive.\n///\nvoid Preprocessor::HandleUserDiagnosticDirective(Token &Tok, bool isWarning) {\n  if (isWarning)\n    Diag(Tok, diag::pp_hash_warning) << Msg;"},{"clang/unittests/Basic/DiagnosticTest.cpp",149,"TEST(DiagnosticTest, storedDiagEmptyWarning) {\n  Diags.Report(diag::pp_hash_warning) << \"\";"}},
[k]={
["clang/test/Preprocessor/include-directive3.c"]={"./clang/test/Preprocessor/file_to_include.h:2:2: warning: file successfully included [-W#warnings]"}
}
},
},
["pp_include_macros_out_of_predefines"]={
["pp_include_macros_out_of_predefines"]={
[c]="the #__include_macros directive is only for internal use by -imacros",
[f]="the #__include_macros directive is only for internal use by -imacros",
[d]=tb,
[b]=vb,
[f]=Ob,
[c]=ac,
[h]="the #__include_macros directive is only for internal use by -imacros",
[d]="the #__include_macros directive is only for internal use by -imacros",
[b]=Pb,
[e]=Yb,
[g]="the \\#__include_macros directive is only for internal use by \\-imacros",
[a]="the \\#__include_macros directive is only for internal use by \\-imacros",
[a]=l,
[g]=m,
[e]=G,
[h]=H,
[i]={"58a1eb0ba0e0",1239216400,"reject the #__include_macros directive unless it comes from the "},
[i]={"58a1eb0ba0e0",1239216400,"reject the #__include_macros directive unless it comes from the "},
[j]={{S,2639,"/// HandleIncludeMacrosDirective - The -imacros command line option turns into a\n/// pseudo directive in the predefines buffer.  This handles it by sucking all\n/// tokens through the preprocessor and discarding them (only keeping the side\n/// effects on the preprocessor).\nvoid Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, Token &IncludeMacrosTok) {\n  if (SourceMgr.getBufferName(Loc) != \"<built-in>\") {\n    Diag(IncludeMacrosTok.getLocation(), diag::pp_include_macros_out_of_predefines);"}}
[j]={{S,2639,"/// HandleIncludeMacrosDirective - The -imacros command line option turns into a\n/// pseudo directive in the predefines buffer.  This handles it by sucking all\n/// tokens through the preprocessor and discarding them (only keeping the side\n/// effects on the preprocessor).\nvoid Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, Token &IncludeMacrosTok) {\n  if (SourceMgr.getBufferName(Loc) != \"<built-in>\") {\n    Diag(IncludeMacrosTok.getLocation(), diag::pp_include_macros_out_of_predefines);"}}
},
},
["pp_include_next_absolute_path"]={
["pp_include_next_absolute_path"]={
[c]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path [-Winclude-next-absolute-path]",
[f]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path [-Winclude-next-absolute-path]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"include-next-absolute-path"},
[r]={"include-next-absolute-path"},
[q]="include-next-absolute-path",
[q]="include-next-absolute-path",
[h]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path",
[d]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path",
[b]=t,
[e]=u,
[g]="\\#include_next in file found relative to primary source file or found by absolute path; will search from start of include path",
[a]="\\#include_next in file found relative to primary source file or found by absolute path; will search from start of include path",
[a]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-absolute\\-path[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-absolute\\-path[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,1948,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n  } else if (CurLexerSubmodule) {\n  } else if (!Lookup) {\n    Diag(IncludeNextTok, diag::pp_include_next_absolute_path);"}}
[j]={{S,1948,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n  } else if (CurLexerSubmodule) {\n  } else if (!Lookup) {\n    Diag(IncludeNextTok, diag::pp_include_next_absolute_path);"}},
[k]={
["clang/test/Preprocessor/include-next.c"]={"clang/test/Preprocessor/Inputs/include-next-1/foo.h:1:2: warning: #include_next in file found relative to primary source file or found by absolute path; will search from start of include path [-Winclude-next-absolute-path]"}
}
},
},
["pp_include_next_in_primary"]={
["pp_include_next_in_primary"]={
[c]="#include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]",
[f]="#include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"include-next-outside-header"},
[r]={"include-next-outside-header"},
[q]="include-next-outside-header",
[q]="include-next-outside-header",
[h]="#include_next in primary source file; will search from start of include path",
[d]="#include_next in primary source file; will search from start of include path",
[b]=t,
[e]=u,
[g]="\\#include_next in primary source file; will search from start of include path",
[a]="\\#include_next in primary source file; will search from start of include path",
[a]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-outside\\-header[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-outside\\-header[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,1936,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n    Diag(IncludeNextTok, diag::pp_include_next_in_primary);"}}
[j]={{S,1936,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n    Diag(IncludeNextTok, diag::pp_include_next_in_primary);"}},
[k]={
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:36:5: warning: #include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]","clang/test/Preprocessor/has_include.c:41:5: warning: #include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]","clang/test/Preprocessor/has_include.c:47:6: warning: #include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]","clang/test/Preprocessor/has_include.c:52:5: warning: #include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]","clang/test/Preprocessor/has_include.c:58:5: warning: #include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]","clang/test/Preprocessor/has_include.c:96:3: warning: #include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]"}
}
},
},
["pp_invalid_string_literal"]={
["pp_invalid_string_literal"]={
[c]="invalid string literal, ignoring final \'\\\'",
[f]="invalid string literal, ignoring final \'\\\'",
[d]=s,
[f]=r,
[h]="invalid string literal, ignoring final \'\\\'",
[b]=t,
[b]=t,
[g]="invalid string literal, ignoring final \'\\\\\'",
[c]=s,
[a]=ub,
[d]="invalid string literal, ignoring final \'\\\'",
[e]=G,
[e]=u,
[i]={L,1236199783,M},
[a]="invalid string literal, ignoring final \'\\\\\'",
[g]=ub,
[h]=H,
[i]={N,1236199783,M},
[j]={{"clang/lib/Lex/MacroArgs.cpp",279,"/// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of\n/// tokens into the literal string token that should be produced by the C #\n/// preprocessor operator.  If Charify is true, then it should be turned into\n/// a character literal for the Microsoft charize (#@) extension.\n///\nToken MacroArgs::StringifyArgument(const Token *ArgToks, Preprocessor &PP, bool Charify, SourceLocation ExpansionLocStart, SourceLocation ExpansionLocEnd) {\n  // If the last character of the string is a \\, and if it isn\'t escaped, this\n  // is an invalid string literal, diagnose it as specified in C99.\n  if (Result.back() == \'\\\\\') {\n    if ((Result.size() - 1 - FirstNonSlash) & 1) {\n      PP.Diag(ArgToks[-1], diag::pp_invalid_string_literal);"}}
[j]={{"clang/lib/Lex/MacroArgs.cpp",279,"/// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of\n/// tokens into the literal string token that should be produced by the C #\n/// preprocessor operator.  If Charify is true, then it should be turned into\n/// a character literal for the Microsoft charize (#@) extension.\n///\nToken MacroArgs::StringifyArgument(const Token *ArgToks, Preprocessor &PP, bool Charify, SourceLocation ExpansionLocStart, SourceLocation ExpansionLocEnd) {\n  // If the last character of the string is a \\, and if it isn\'t escaped, this\n  // is an invalid string literal, diagnose it as specified in C99.\n  if (Result.back() == \'\\\\\') {\n    if ((Result.size() - 1 - FirstNonSlash) & 1) {\n      PP.Diag(ArgToks[-1], diag::pp_invalid_string_literal);"}}
},
},
["pp_macro_not_used"]={
["pp_macro_not_used"]={
[c]="macro is not used [-Wunused-macros]",
[f]="macro is not used [-Wunused-macros]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"unused-macros"},
[r]={"unused-macros"},
[q]="unused-macros",
[q]="unused-macros",
[h]="macro is not used",
[d]="macro is not used",
[b]=t,
[e]=u,
[g]="macro is not used",
[a]="macro is not used",
[a]=" \\[(?:\\-Werror,)?\\-Wunused\\-macros[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-macros[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{S,3131,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Finally, if this identifier already had a macro defined for it, verify that\n  // the macro bodies are identical, and issue diagnostics if they are not.\n  if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n    // It is very common for system headers to have tons of macro redefinitions\n    // and for warnings to be disabled in system headers.  If this is the case,\n    // then don\'t bother calling MacroInfo::isIdenticalTo.\n    if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n      if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused())\n        Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);"},{S,3157,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && !MacroExpansionInDirectivesOverride && getSourceManager().getFileID(MI->getDefinitionLoc()) != getPredefinesFileID()) {"},{S,3213,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n  // If the macro is not defined, this is a noop undef.\n  if (const MacroInfo *MI = MD.getMacroInfo()) {\n    if (!MI->isUsed() && MI->isWarnIfUnused())\n      Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);"},{"clang/lib/Lex/PPLexerChange.cpp",584,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (TUKind == TU_Complete) {\n    // This is the end of the top-level file. \'WarnUnusedMacroLocs\' has\n    // collected all macro locations that we need to warn because they are not\n    // used.\n    for (WarnUnusedMacroLocsTy::iterator I = WarnUnusedMacroLocs.begin(), E = WarnUnusedMacroLocs.end(); I != E; ++I)\n      Diag(*I, diag::pp_macro_not_used);"}}
[j]={{S,3131,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Finally, if this identifier already had a macro defined for it, verify that\n  // the macro bodies are identical, and issue diagnostics if they are not.\n  if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n    // It is very common for system headers to have tons of macro redefinitions\n    // and for warnings to be disabled in system headers.  If this is the case,\n    // then don\'t bother calling MacroInfo::isIdenticalTo.\n    if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n      if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused())\n        Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);"},{S,3157,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && !MacroExpansionInDirectivesOverride && getSourceManager().getFileID(MI->getDefinitionLoc()) != getPredefinesFileID()) {"},{S,3213,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n  // If the macro is not defined, this is a noop undef.\n  if (const MacroInfo *MI = MD.getMacroInfo()) {\n    if (!MI->isUsed() && MI->isWarnIfUnused())\n      Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);"},{"clang/lib/Lex/PPLexerChange.cpp",584,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (TUKind == TU_Complete) {\n    // This is the end of the top-level file. \'WarnUnusedMacroLocs\' has\n    // collected all macro locations that we need to warn because they are not\n    // used.\n    for (WarnUnusedMacroLocsTy::iterator I = WarnUnusedMacroLocs.begin(), E = WarnUnusedMacroLocs.end(); I != E; ++I)\n      Diag(*I, diag::pp_macro_not_used);"}},
[k]={
["clang/test/Preprocessor/Weverything_pragma.c"]={"clang/test/Preprocessor/Weverything_pragma.c:16:9: warning: macro is not used [-Wunused-macros]","clang/test/Preprocessor/Weverything_pragma.c:7:9: warning: macro is not used [-Wunused-macros]","clang/test/Preprocessor/Weverything_pragma.c:24:9: warning: macro is not used [-Wunused-macros]","clang/test/Preprocessor/Weverything_pragma.c:28:9: error: macro is not used [-Werror,-Wunused-macros]"}
}
},
},
["pp_nonportable_path"]={
["pp_nonportable_path"]={
[c]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-include-path]",
[f]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-include-path]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"nonportable-include-path"},
[r]={"nonportable-include-path"},
[q]="nonportable-include-path",
[q]="nonportable-include-path",
[h]="non-portable path to file \'%0\'; specified path differs in case from file name on disk",
[d]="non-portable path to file \'%0\'; specified path differs in case from file name on disk",
[b]=t,
[e]=u,
[g]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk",
[a]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk",
[a]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-include\\-path[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-include\\-path[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={"fc5d13d9b180",1464979971,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[i]={"fc5d13d9b180",1464979971,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[j]={{S,2487,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
[j]={{S,2487,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
},
},
["pp_nonportable_system_path"]={
["pp_nonportable_system_path"]={
[c]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-system-include-path]",
[f]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-system-include-path]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"nonportable-system-include-path"},
[r]={"nonportable-system-include-path"},
[q]="nonportable-system-include-path",
[q]="nonportable-system-include-path",
[h]="non-portable path to file \'%0\'; specified path differs in case from file name on disk",
[d]="non-portable path to file \'%0\'; specified path differs in case from file name on disk",
[b]=t,
[e]=u,
[g]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk",
[a]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk",
[a]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-system\\-include\\-path[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-system\\-include\\-path[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={"e8533670bf22",1465837398,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[i]={"e8533670bf22",1465837398,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[j]={{S,2488,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
[j]={{S,2488,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
},
},
["pp_out_of_date_dependency"]={
["pp_out_of_date_dependency"]={
[c]="current file is older than dependency A",
[f]="current file is older than dependency A",
[d]=s,
[f]=r,
[h]="current file is older than dependency %0",
[b]=t,
[b]=t,
[g]="current file is older than dependency (.*?)",
[c]=s,
[a]=ub,
[d]="current file is older than dependency %0",
[e]=G,
[e]=u,
[i]={L,1236199783,M},
[a]="current file is older than dependency (.*?)",
[j]={{Hb,567,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // If this file is older than the file it depends on, emit a diagnostic.\n  if (CurFile && CurFile->getModificationTime() < File->getModificationTime()) {\n    Diag(FilenameTok, diag::pp_out_of_date_dependency) << Message;"}}
[g]=ub,
[h]=H,
[i]={N,1236199783,M},
[j]={{Ub,567,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // If this file is older than the file it depends on, emit a diagnostic.\n  if (CurFile && CurFile->getModificationTime() < File->getModificationTime()) {\n    Diag(FilenameTok, diag::pp_out_of_date_dependency) << Message;"}}
},
},
["pp_poisoning_existing_macro"]={
["pp_poisoning_existing_macro"]={
[c]="poisoning existing macro",
[f]="poisoning existing macro",
[d]=s,
[f]=r,
[h]="poisoning existing macro",
[b]=t,
[b]=t,
[g]="poisoning existing macro",
[c]=s,
[a]=ub,
[d]="poisoning existing macro",
[e]=G,
[e]=u,
[i]={L,1236199783,M},
[a]="poisoning existing macro",
[j]={{Hb,474,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\n    // If this is a macro identifier, emit a warning.\n    if (isMacroDefined(II))\n      Diag(Tok, diag::pp_poisoning_existing_macro);"}}
[g]=ub,
[h]=H,
[i]={N,1236199783,M},
[j]={{Ub,474,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\n    // If this is a macro identifier, emit a warning.\n    if (isMacroDefined(II))\n      Diag(Tok, diag::pp_poisoning_existing_macro);"}}
},
},
["pp_pragma_once_in_main_file"]={
["pp_pragma_once_in_main_file"]={
[c]="#pragma once in main file [-Wpragma-once-outside-header]",
[f]="#pragma once in main file [-Wpragma-once-outside-header]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"pragma-once-outside-header"},
[r]={"pragma-once-outside-header"},
[q]="pragma-once-outside-header",
[q]="pragma-once-outside-header",
[h]="#pragma once in main file",
[d]="#pragma once in main file",
[b]=t,
[e]=u,
[g]="\\#pragma once in main file",
[a]="\\#pragma once in main file",
[a]=" \\[(?:\\-Werror,)?\\-Wpragma\\-once\\-outside\\-header[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wpragma\\-once\\-outside\\-header[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{Hb,424,"/// HandlePragmaOnce - Handle \\#pragma once.  OnceTok is the \'once\'.\nvoid Preprocessor::HandlePragmaOnce(Token &OnceTok) {\n  // Don\'t honor the \'once\' when handling the primary source file, unless\n  // this is a prefix to a TU, which indicates we\'re generating a PCH file, or\n  // when the main file is a header (e.g. when -xc-header is provided on the\n  // commandline).\n  if (isInPrimaryFile() && TUKind != TU_Prefix && !getLangOpts().IsHeaderFile) {\n    Diag(OnceTok, diag::pp_pragma_once_in_main_file);"}}
[j]={{Ub,424,"/// HandlePragmaOnce - Handle \\#pragma once.  OnceTok is the \'once\'.\nvoid Preprocessor::HandlePragmaOnce(Token &OnceTok) {\n  // Don\'t honor the \'once\' when handling the primary source file, unless\n  // this is a prefix to a TU, which indicates we\'re generating a PCH file, or\n  // when the main file is a header (e.g. when -xc-header is provided on the\n  // commandline).\n  if (isInPrimaryFile() && TUKind != TU_Prefix && !getLangOpts().IsHeaderFile) {\n    Diag(OnceTok, diag::pp_pragma_once_in_main_file);"}},
[k]={
["clang/test/Index/annotate-comments-preprocessor.c"]={"clang/test/Index/annotate-comments-preprocessor.c:32:9: warning: #pragma once in main file [-Wpragma-once-outside-header]"}
}
},
},
["pp_pragma_sysheader_in_main_file"]={
["pp_pragma_sysheader_in_main_file"]={
[c]="#pragma system_header ignored in main file [-Wpragma-system-header-outside-header]",
[f]="#pragma system_header ignored in main file [-Wpragma-system-header-outside-header]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"pragma-system-header-outside-header"},
[r]={"pragma-system-header-outside-header"},
[q]="pragma-system-header-outside-header",
[q]="pragma-system-header-outside-header",
[h]="#pragma system_header ignored in main file",
[d]="#pragma system_header ignored in main file",
[b]=t,
[e]=u,
[g]="\\#pragma system_header ignored in main file",
[a]="\\#pragma system_header ignored in main file",
[a]=" \\[(?:\\-Werror,)?\\-Wpragma\\-system\\-header\\-outside\\-header[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wpragma\\-system\\-header\\-outside\\-header[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={L,1236199783,M},
[i]={N,1236199783,M},
[j]={{Hb,487,"/// HandlePragmaSystemHeader - Implement \\#pragma GCC system_header.  We know\n/// that the whole directive has been parsed.\nvoid Preprocessor::HandlePragmaSystemHeader(Token &SysHeaderTok) {\n  if (isInPrimaryFile()) {\n    Diag(SysHeaderTok, diag::pp_pragma_sysheader_in_main_file);"}}
[j]={{Ub,487,"/// HandlePragmaSystemHeader - Implement \\#pragma GCC system_header.  We know\n/// that the whole directive has been parsed.\nvoid Preprocessor::HandlePragmaSystemHeader(Token &SysHeaderTok) {\n  if (isInPrimaryFile()) {\n    Diag(SysHeaderTok, diag::pp_pragma_sysheader_in_main_file);"}},
[k]={
["clang/test/Preprocessor/_Pragma.c"]={"clang/test/Preprocessor/_Pragma.c:3:1: warning: #pragma system_header ignored in main file [-Wpragma-system-header-outside-header]"}
}
},
},
["remark_cc1_round_trip_generated"]={
["remark_cc1_round_trip_generated"]={
[c]="generated arguments #A in round-trip: B [-Rround-trip-cc1-args]",
[f]="generated arguments #A in round-trip: B [-Rround-trip-cc1-args]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"round-trip-cc1-args"},
[r]={"round-trip-cc1-args"},
[q]="round-trip-cc1-args",
[q]="round-trip-cc1-args",
[h]="generated arguments #%0 in round-trip: %1",
[d]="generated arguments #%0 in round-trip: %1",
[b]=bb,
[e]=gb,
[g]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)",
[a]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)",
[a]=l,
[g]=m,
[e]=l,
[h]=m,
[i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",791,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{"clang/lib/Frontend/CompilerInvocation.cpp",793,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 2 << SerializeArgs(ComparisonArgs);"},{"clang/tools/driver/cc1_main.cpp",211,"int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {\n  // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.\n  if (find(Argv, StringRef(\"-Rround-trip-cc1-args\")) != Argv.end())\n    Diags.setSeverity(diag::remark_cc1_round_trip_generated, diag::Severity::Remark, {});"}}
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",791,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{"clang/lib/Frontend/CompilerInvocation.cpp",793,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 2 << SerializeArgs(ComparisonArgs);"},{"clang/tools/driver/cc1_main.cpp",211,"int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {\n  // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.\n  if (find(Argv, StringRef(\"-Rround-trip-cc1-args\")) != Argv.end())\n    Diags.setSeverity(diag::remark_cc1_round_trip_generated, diag::Severity::Remark, {});"}},
[k]={
["clang/test/Frontend/round-trip-cc1-args.c"]={"remark: generated arguments #1 in round-trip: \"-cc1\" \"-Rround-trip-cc1-args\" \"-fsyntax-only\" \"-x\" \"c\" \"clang/test/Frontend/round-trip-cc1-args.c\" \"-triple\" \"x86_64-unknown-linux-gnu\" \"-nostdsysteminc\" \"-isystem\" \"build/lib/clang/17/include\" \"-std=gnu17\" \"-ffp-contract=off\" \"-fno-experimental-relative-c++-abi-vtables\" \"-fno-file-reproducible\" \"-O0\" \"-save-temps=obj\" \"-fdiagnostics-hotness-threshold=0\" \"-fdiagnostics-misexpect-tolerance=0\" ","remark: generated arguments #2 in round-trip: \"-cc1\" \"-Rround-trip-cc1-args\" \"-fsyntax-only\" \"-x\" \"c\" \"clang/test/Frontend/round-trip-cc1-args.c\" \"-triple\" \"x86_64-unknown-linux-gnu\" \"-nostdsysteminc\" \"-isystem\" \"build/lib/clang/17/include\" \"-std=gnu17\" \"-ffp-contract=off\" \"-fno-experimental-relative-c++-abi-vtables\" \"-fno-file-reproducible\" \"-O0\" \"-save-temps=obj\" \"-fdiagnostics-hotness-threshold=0\" \"-fdiagnostics-misexpect-tolerance=0\" "}
}
},
},
["remark_fe_backend_optimization_remark"]={
["remark_fe_backend_optimization_remark"]={
[c]="A [-Rpass]",
[f]="A [-Rpass]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"pass"},
[r]={"pass"},
[q]="pass",
[q]="pass",
[h]=uc,
[d]=Hc,
[b]=bb,
[e]=gb,
[g]=tc,
[a]=Ic,
[a]=" \\[[^\\]]*\\-Rpass[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rpass[^\\]]*\\]",
[e]=Zb,
[h]=pc,
[i]={"829b1700484d",1397667264,"Add support for optimization reports."},
[i]={"829b1700484d",1397667264,"Add support for optimization reports."},
[j]={{rc,796,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n    // Optimization remarks are active only if the -Rpass flag has a regular\n    // expression that matches the name of the pass name in \\p D.\n    if (CodeGenOpts.OptimizationRemark.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark);"}}
[j]={{Kc,796,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n    // Optimization remarks are active only if the -Rpass flag has a regular\n    // expression that matches the name of the pass name in \\p D.\n    if (CodeGenOpts.OptimizationRemark.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark);"}},
[k]={
["clang/test/CodeGenCUDA/atomics-remarks-gfx90a.cu"]={"clang/test/CodeGenCUDA/atomics-remarks-gfx90a.cu:15:10: remark: A compare and swap loop was generated for an atomic fadd operation at system memory scope [-Rpass=atomic-expand]"}
}
},
},
["remark_fe_backend_optimization_remark_analysis"]={
["remark_fe_backend_optimization_remark_analysis"]={
[c]="A [-Rpass-analysis]",
[f]="A [-Rpass-analysis]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={ic},
[r]={vc},
[q]=ic,
[q]=vc,
[h]=uc,
[d]=Hc,
[b]=bb,
[e]=gb,
[g]=tc,
[a]=Ic,
[a]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]",
[e]=Zb,
[h]=pc,
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[j]={{rc,814,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n  } else {\n    if (ShouldAlwaysPrint || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis);"}}
[j]={{Kc,814,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n  } else {\n    if (ShouldAlwaysPrint || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis);"}}
},
},
["remark_fe_backend_optimization_remark_analysis_aliasing"]={
["remark_fe_backend_optimization_remark_analysis_aliasing"]={
[c]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop. If the arrays will always be independent specify \'#pragma clang loop vectorize(assume_safety)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied! [-Rpass-analysis]",
[f]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop. If the arrays will always be independent specify \'#pragma clang loop vectorize(assume_safety)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied! [-Rpass-analysis]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={ic},
[r]={vc},
[q]=ic,
[q]=vc,
[h]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop. If the arrays will always be independent specify \'#pragma clang loop vectorize(assume_safety)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!",
[d]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop. If the arrays will always be independent specify \'#pragma clang loop vectorize(assume_safety)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!",
[b]=bb,
[e]=gb,
[g]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop\\. If the arrays will always be independent specify \'\\#pragma clang loop vectorize\\(assume_safety\\)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments\\. Erroneous results will occur if these options are incorrectly applied\\!",
[a]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop\\. If the arrays will always be independent specify \'\\#pragma clang loop vectorize\\(assume_safety\\)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments\\. Erroneous results will occur if these options are incorrectly applied\\!",
[a]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]",
[e]=Zb,
[h]=pc,
[i]={"034baf615477",1439247916,"Append options for vectorization when pointer checking threshold is exceeded."},
[i]={"034baf615477",1439247916,"Append options for vectorization when pointer checking threshold is exceeded."},
[j]={{rc,839,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisAliasing &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_aliasing);"}}
[j]={{Kc,839,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisAliasing &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_aliasing);"}},
[k]={
["clang/test/Frontend/optimization-remark-options.c"]={"clang/test/Frontend/optimization-remark-options.c:18:3: remark: loop not vectorized: cannot prove it is safe to reorder memory operations; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop. If the arrays will always be independent specify \'#pragma clang loop vectorize(assume_safety)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied! [-Rpass-analysis=loop-vectorize]"}
}
},
},
["remark_fe_backend_optimization_remark_analysis_fpcommute"]={
["remark_fe_backend_optimization_remark_analysis_fpcommute"]={
[c]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'. [-Rpass-analysis]",
[f]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'. [-Rpass-analysis]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={ic},
[r]={vc},
[q]=ic,
[q]=vc,
[h]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'.",
[d]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'.",
[b]=bb,
[e]=gb,
[g]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop or by providing the compiler option \'\\-ffast\\-math\'\\.",
[a]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop or by providing the compiler option \'\\-ffast\\-math\'\\.",
[a]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]",
[e]=Zb,
[h]=pc,
[i]={"8a0925cb627c",1439236600,"Append options for floating-point commutivity when related diagnostics are produced."},
[i]={"8a0925cb627c",1439236600,"Append options for floating-point commutivity when related diagnostics are produced."},
[j]={{rc,827,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisFPCommute &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute);"}}
[j]={{Kc,827,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisFPCommute &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute);"}},
[k]={
["clang/test/Frontend/optimization-remark-options.c"]={"clang/test/Frontend/optimization-remark-options.c:10:11: remark: loop not vectorized: cannot prove it is safe to reorder floating-point operations; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'. [-Rpass-analysis=loop-vectorize]"}
}
},
},
["remark_fe_backend_optimization_remark_missed"]={
["remark_fe_backend_optimization_remark_missed"]={
[c]="A [-Rpass-missed]",
[f]="A [-Rpass-missed]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"pass-missed"},
[r]={"pass-missed"},
[q]="pass-missed",
[q]="pass-missed",
[h]=uc,
[d]=Hc,
[b]=bb,
[e]=gb,
[g]=tc,
[a]=Ic,
[a]=" \\[[^\\]]*\\-Rpass\\-missed[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rpass\\-missed[^\\]]*\\]",
[e]=Zb,
[h]=pc,
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[j]={{rc,803,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n    // Missed optimization remarks are active only if the -Rpass-missed\n    // flag has a regular expression that matches the name of the pass\n    // name in \\p D.\n    if (CodeGenOpts.OptimizationRemarkMissed.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_missed);"}}
[j]={{Kc,803,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n    // Missed optimization remarks are active only if the -Rpass-missed\n    // flag has a regular expression that matches the name of the pass\n    // name in \\p D.\n    if (CodeGenOpts.OptimizationRemarkMissed.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_missed);"}}
},
},
["remark_fe_backend_plugin"]={
["remark_fe_backend_plugin"]={
[c]="A [-Rremark-backend-plugin]",
[f]="A [-Rremark-backend-plugin]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"remark-backend-plugin"},
[r]={"remark-backend-plugin"},
[q]="remark-backend-plugin",
[q]="remark-backend-plugin",
[h]=uc,
[d]=Hc,
[b]=bb,
[e]=gb,
[g]=tc,
[a]=Ic,
[a]=" \\[[^\\]]*\\-Rremark\\-backend\\-plugin[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rremark\\-backend\\-plugin[^\\]]*\\]",
[e]=Zb,
[h]=pc,
[i]={"741602461d20",1393578668,"Add \'remark\' diagnostic type in \'clang\'"}
[i]={"741602461d20",1393578668,"Add \'remark\' diagnostic type in \'clang\'"}
},
},
["remark_module_build"]={
["remark_module_build"]={
[c]="building module \'A\' as \'B\' [-Rmodule-build]",
[f]="building module \'A\' as \'B\' [-Rmodule-build]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={Nb},
[r]={Sb},
[q]=Nb,
[q]=Sb,
[h]="building module \'%0\' as \'%1\'",
[d]="building module \'%0\' as \'%1\'",
[b]=bb,
[e]=gb,
[g]="building module \'(.*?)\' as \'(.*?)\'",
[a]="building module \'(.*?)\' as \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark"},
[i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark"},
[j]={{gc,1259,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build) << ModuleName << ModuleFileName;"}}
[j]={{rc,1259,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build) << ModuleName << ModuleFileName;"}}
},
},
["remark_module_build_done"]={
["remark_module_build_done"]={
[c]="finished building module \'A\' [-Rmodule-build]",
[f]="finished building module \'A\' [-Rmodule-build]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={Nb},
[r]={Sb},
[q]=Nb,
[q]=Sb,
[h]="finished building module \'%0\'",
[d]="finished building module \'%0\'",
[b]=bb,
[e]=gb,
[g]="finished building module \'(.*?)\'",
[a]="finished building module \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"99891da71a88",1413252510,"Extend -Rmodule-build to also remark when module building finishes."},
[i]={"99891da71a88",1413252510,"Extend -Rmodule-build to also remark when module building finishes."},
[j]={{gc,1276,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build_done) << ModuleName;"}}
[j]={{rc,1276,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build_done) << ModuleName;"}}
},
},
["remark_module_import"]={
["remark_module_import"]={
[c]="importing module \'A\'... from \'B\' [-Rmodule-import]",
[f]="importing module \'A\'... from \'B\' [-Rmodule-import]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"module-import"},
[r]={"module-import"},
[q]="module-import",
[q]="module-import",
[h]="importing module \'%0\'%select{| into \'%3\'}2 from \'%1\'",
[d]="importing module \'%0\'%select{| into \'%3\'}2 from \'%1\'",
[b]=bb,
[e]=gb,
[g]="importing module \'(.*?)\'(?:| into \'(.*?)\') from \'(.*?)\'",
[a]="importing module \'(.*?)\'(?:| into \'(.*?)\') from \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rmodule\\-import[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-import[^\\]]*\\]",
[e]="AST Deserialization Issue",
[h]="AST Deserialization Issue",
[i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import"},
[i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import"},
[j]={{Qb,2975,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case MODULE_NAME:\n      Diag(diag::remark_module_import) << F.ModuleName << F.FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"},{Qb,4592,"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::AlreadyLoaded:\n    Diag(diag::remark_module_import) << M->ModuleName << M->FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"}}
[j]={{ec,2975,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case MODULE_NAME:\n      Diag(diag::remark_module_import) << F.ModuleName << F.FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"},{ec,4592,"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::AlreadyLoaded:\n    Diag(diag::remark_module_import) << M->ModuleName << M->FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"}},
[k]={
["clang/test/Modules/Rmodule-import.m"]={"clang/test/Modules/Rmodule-import.m:16:2: remark: importing module \'A\' from \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/Rmodule-import.m.tmp2/A.pcm\' [-Rmodule-import]","clang/test/Modules/Rmodule-import.m:16:2: remark: importing module \'B\' into \'A\' from \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/Rmodule-import.m.tmp2/B.pcm\' [-Rmodule-import]","clang/test/Modules/Rmodule-import.m:16:2: remark: importing module \'C\' into \'B\' from \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/Rmodule-import.m.tmp2/C.pcm\' [-Rmodule-import]","clang/test/Modules/Rmodule-import.m:34:2: remark: importing module \'B\' from \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/Rmodule-import.m.tmp2/B.pcm\' [-Rmodule-import]","clang/test/Modules/Rmodule-import.m:37:2: remark: importing module \'C\' from \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/Rmodule-import.m.tmp2/C.pcm\' [-Rmodule-import]","clang/test/Modules/Rmodule-import.m:40:2: remark: importing module \'D\' from \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/Rmodule-import.m.tmp2/D.pcm\' [-Rmodule-import]"}
}
},
},
["remark_module_lock"]={
["remark_module_lock"]={
[c]="locking \'A\' to build module \'B\' [-Rmodule-lock]",
[f]="locking \'A\' to build module \'B\' [-Rmodule-lock]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"module-lock"},
[r]={"module-lock"},
[q]="module-lock",
[q]="module-lock",
[h]="locking \'%0\' to build module \'%1\'",
[d]="locking \'%0\' to build module \'%1\'",
[b]=bb,
[e]=gb,
[g]="locking \'(.*?)\' to build module \'(.*?)\'",
[a]="locking \'(.*?)\' to build module \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rmodule\\-lock[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-lock[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"},
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"},
[j]={{gc,1441,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  Diags.Report(ModuleNameLoc, diag::remark_module_lock) << ModuleFileName << Module->Name;"}}
[j]={{rc,1441,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  Diags.Report(ModuleNameLoc, diag::remark_module_lock) << ModuleFileName << Module->Name;"}}
},
},
["remark_module_lock_failure"]={
["remark_module_lock_failure"]={
[c]="could not acquire lock file for module \'A\': B [-Rmodule-build]",
[f]="could not acquire lock file for module \'A\': B [-Rmodule-build]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={Nb},
[r]={Sb},
[q]=Nb,
[q]=Sb,
[h]="could not acquire lock file for module \'%0\': %1",
[d]="could not acquire lock file for module \'%0\': %1",
[b]=bb,
[e]=gb,
[g]="could not acquire lock file for module \'(.*?)\'\\: (.*?)",
[a]="could not acquire lock file for module \'(.*?)\'\\: (.*?)",
[a]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[e]=Q,
[h]=Q,
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[j]={{gc,1456,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::LFS_Error:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_failure) << Module->Name << Locked.getErrorMessage();"}}
[j]={{rc,1456,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::LFS_Error:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_failure) << Module->Name << Locked.getErrorMessage();"}}
},
},
["remark_module_lock_timeout"]={
["remark_module_lock_timeout"]={
[c]="timed out waiting to acquire lock file for module \'A\' [-Rmodule-build]",
[f]="timed out waiting to acquire lock file for module \'A\' [-Rmodule-build]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={Nb},
[r]={Sb},
[q]=Nb,
[q]=Sb,
[h]="timed out waiting to acquire lock file for module \'%0\'",
[d]="timed out waiting to acquire lock file for module \'%0\'",
[b]=bb,
[e]=gb,
[g]="timed out waiting to acquire lock file for module \'(.*?)\'",
[a]="timed out waiting to acquire lock file for module \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]",
[e]=Q,
[h]=Q,
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[j]={{gc,1481,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::Res_Timeout:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_timeout) << Module->Name;"}}
[j]={{rc,1481,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::Res_Timeout:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_timeout) << Module->Name;"}}
},
},
["remark_pp_include_directive_modular_translation"]={
["remark_pp_include_directive_modular_translation"]={
[c]="treating #... as an import of module \'A\' [-Rmodule-include-translation]",
[f]="treating #... as an import of module \'A\' [-Rmodule-include-translation]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"module-include-translation"},
[r]={"module-include-translation"},
[q]="module-include-translation",
[q]="module-include-translation",
[h]="treating #%select{include|import|include_next|__include_macros}0 as an import of module \'%1\'",
[d]="treating #%select{include|import|include_next|__include_macros}0 as an import of module \'%1\'",
[b]=bb,
[e]=gb,
[g]="treating \\#(?:include|import|include_next|__include_macros) as an import of module \'(.*?)\'",
[a]="treating \\#(?:include|import|include_next|__include_macros) as an import of module \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rmodule\\-include\\-translation[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rmodule\\-include\\-translation[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{S,1858,"/// Produce a diagnostic informing the user that a #include or similar\n/// was implicitly treated as a module import.\nstatic void diagnoseAutoModuleImport(Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, SourceLocation PathEnd) {\n  PP.Diag(HashLoc, diag::remark_pp_include_directive_modular_translation) << IncludeKind << PathString;"}}
[j]={{S,1858,"/// Produce a diagnostic informing the user that a #include or similar\n/// was implicitly treated as a module import.\nstatic void diagnoseAutoModuleImport(Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, SourceLocation PathEnd) {\n  PP.Diag(HashLoc, diag::remark_pp_include_directive_modular_translation) << IncludeKind << PathString;"}},
[k]={
["clang/test/Modules/subframeworks.m"]={"clang/test/Modules/Inputs/HasSubModules.framework/Frameworks/Sub.framework/PrivateHeaders/SubPriv.h:1:1: remark: treating #include as an import of module \'HasSubModules.Sub.Types\' [-Rmodule-include-translation]"}
}
},
},
["remark_pp_search_path_usage"]={
["remark_pp_search_path_usage"]={
[c]="search path used: \'A\' [-Rsearch-path-usage]",
[f]="search path used: \'A\' [-Rsearch-path-usage]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"search-path-usage"},
[r]={"search-path-usage"},
[q]="search-path-usage",
[q]="search-path-usage",
[h]="search path used: \'%0\'",
[d]="search path used: \'%0\'",
[b]=bb,
[e]=gb,
[g]="search path used\\: \'(.*?)\'",
[a]="search path used\\: \'(.*?)\'",
[a]=" \\[[^\\]]*\\-Rsearch\\-path\\-usage[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rsearch\\-path\\-usage[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{"clang/lib/Lex/HeaderSearch.cpp",744,"void HeaderSearch::noteLookupUsage(unsigned HitIdx, SourceLocation Loc) {\n  if (UserEntryIdxIt != SearchDirToHSEntry.end())\n    Diags.Report(Loc, diag::remark_pp_search_path_usage) << HSOpts->UserEntries[UserEntryIdxIt->second].Path;"}}
[j]={{"clang/lib/Lex/HeaderSearch.cpp",744,"void HeaderSearch::noteLookupUsage(unsigned HitIdx, SourceLocation Loc) {\n  if (UserEntryIdxIt != SearchDirToHSEntry.end())\n    Diags.Report(Loc, diag::remark_pp_search_path_usage) << HSOpts->UserEntries[UserEntryIdxIt->second].Path;"}},
[k]={
["clang/test/Preprocessor/search-path-usage.m"]={"clang/test/Preprocessor/search-path-usage.m:127:19: remark: search path used: \'build/tools/clang/test/Preprocessor/Output/search-path-usage.m.tmp/b-missing.hmap\' [-Rsearch-path-usage]"}
}
},
},
["remark_sanitize_address_insert_extra_padding_accepted"]={
["remark_sanitize_address_insert_extra_padding_accepted"]={
[c]="-fsanitize-address-field-padding applied to A [-Rsanitize-address]",
[f]="-fsanitize-address-field-padding applied to A [-Rsanitize-address]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"sanitize-address"},
[r]={"sanitize-address"},
[q]="sanitize-address",
[q]="sanitize-address",
[h]="-fsanitize-address-field-padding applied to %0",
[d]="-fsanitize-address-field-padding applied to %0",
[b]=bb,
[e]=gb,
[g]="\\-fsanitize\\-address\\-field\\-padding applied to (.*?)",
[a]="\\-fsanitize\\-address\\-field\\-padding applied to (.*?)",
[a]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[j]={{"clang/lib/AST/Decl.cpp",5004,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n    else\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_accepted) << getQualifiedNameAsString();"}}
[j]={{"clang/lib/AST/Decl.cpp",5004,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n    else\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_accepted) << getQualifiedNameAsString();"}},
[k]={
["clang/test/CodeGen/sanitize-address-field-padding.cpp"]={"clang/test/CodeGen/sanitize-address-field-padding.cpp:28:7: remark: -fsanitize-address-field-padding applied to Positive1 [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:48:7: remark: -fsanitize-address-field-padding applied to ClassWithVirtualBase [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:60:7: remark: -fsanitize-address-field-padding applied to WithFlexibleArray1 [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:73:7: remark: -fsanitize-address-field-padding applied to WithFlexibleArray2 [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:82:7: remark: -fsanitize-address-field-padding applied to WithFlexibleArray3 [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:199:8: remark: -fsanitize-address-field-padding applied to WithVirtualDtor [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:203:8: remark: -fsanitize-address-field-padding applied to InheritsFrom_WithVirtualDtor [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:224:8: remark: -fsanitize-address-field-padding applied to ClassWithTrivialCopy [-Rsanitize-address]"}
}
},
},
["remark_sanitize_address_insert_extra_padding_rejected"]={
["remark_sanitize_address_insert_extra_padding_rejected"]={
[c]="-fsanitize-address-field-padding ignored for A because it ... [-Rsanitize-address]",
[f]="-fsanitize-address-field-padding ignored for A because it ... [-Rsanitize-address]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[A]=false,
[B]=false,
[p]={"sanitize-address"},
[r]={"sanitize-address"},
[q]="sanitize-address",
[q]="sanitize-address",
[h]="-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a ignorelisted file|is ignorelisted}1",
[d]="-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a ignorelisted file|is ignorelisted}1",
[b]=bb,
[e]=gb,
[g]="\\-fsanitize\\-address\\-field\\-padding ignored for (.*?) because it (?:is not C\\+\\+|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a ignorelisted file|is ignorelisted)",
[a]="\\-fsanitize\\-address\\-field\\-padding ignored for (.*?) because it (?:is not C\\+\\+|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a ignorelisted file|is ignorelisted)",
[a]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[j]={{"clang/lib/AST/Decl.cpp",4999,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_rejected) << getQualifiedNameAsString() << ReasonToReject;"}}
[j]={{"clang/lib/AST/Decl.cpp",4999,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_rejected) << getQualifiedNameAsString() << ReasonToReject;"}},
[k]={
["clang/test/CodeGen/sanitize-address-field-padding.cpp"]={"clang/test/CodeGen/sanitize-address-field-padding.cpp:28:7: remark: -fsanitize-address-field-padding ignored for Positive1 because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:44:8: remark: -fsanitize-address-field-padding ignored for VirtualBase because it is trivially copyable [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:48:7: remark: -fsanitize-address-field-padding ignored for ClassWithVirtualBase because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:60:7: remark: -fsanitize-address-field-padding ignored for WithFlexibleArray1 because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:73:7: remark: -fsanitize-address-field-padding ignored for WithFlexibleArray2 because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:82:7: remark: -fsanitize-address-field-padding ignored for WithFlexibleArray3 because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:91:7: remark: -fsanitize-address-field-padding ignored for Negative1 because it is trivially copyable [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:99:7: remark: -fsanitize-address-field-padding ignored for Negative2 because it is trivially copyable [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:108:7: remark: -fsanitize-address-field-padding ignored for Negative3 because it is a union [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:116:7: remark: -fsanitize-address-field-padding ignored for Negative4 because it is trivially copyable [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:129:31: remark: -fsanitize-address-field-padding ignored for Negative5 because it is packed [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:144:7: remark: -fsanitize-address-field-padding ignored for SomeNamespace::IgnorelistedByName because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:158:7: remark: -fsanitize-address-field-padding ignored for ExternCStruct because it is not C++ [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:199:8: remark: -fsanitize-address-field-padding ignored for WithVirtualDtor because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:203:8: remark: -fsanitize-address-field-padding ignored for InheritsFrom_WithVirtualDtor because it is in a ignorelisted file [-Rsanitize-address]","clang/test/CodeGen/sanitize-address-field-padding.cpp:224:8: remark: -fsanitize-address-field-padding ignored for ClassWithTrivialCopy because it is in a ignorelisted file [-Rsanitize-address]"}
}
},
},
["remark_sloc_usage"]={
["remark_sloc_usage"]={
[c]="source manager location address space usage: [-Rsloc-usage]",
[f]="source manager location address space usage: [-Rsloc-usage]",
[d]=fb,
[b]=db,
[f]=db,
[c]=fb,
[p]={"sloc-usage"},
[r]={"sloc-usage"},
[q]="sloc-usage",
[q]="sloc-usage",
[h]="source manager location address space usage:",
[d]="source manager location address space usage:",
[b]=bb,
[e]=gb,
[g]="source manager location address space usage\\:",
[a]="source manager location address space usage\\:",
[a]=" \\[[^\\]]*\\-Rsloc\\-usage[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Rsloc\\-usage[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[j]={{Hb,1202,"struct PragmaDebugHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n    if (II->isStr(\"assert\")) {\n    } else if (II->isStr(\"crash\")) {\n    } else if (II->isStr(\"parser_crash\")) {\n    } else if (II->isStr(\"dump\")) {\n    } else if (II->isStr(\"diag_mapping\")) {\n    } else if (II->isStr(\"llvm_fatal_error\")) {\n    } else if (II->isStr(\"llvm_unreachable\")) {\n    } else if (II->isStr(\"macro\")) {\n    } else if (II->isStr(\"module_map\")) {\n    } else if (II->isStr(\"overflow_stack\")) {\n    } else if (II->isStr(\"captured\")) {\n    } else if (II->isStr(\"modules\")) {\n    } else if (II->isStr(\"sloc_usage\")) {\n      PP.Diag(Tok, diag::remark_sloc_usage);"},{Qb,3487,"llvm::Error ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case SOURCE_LOCATION_OFFSETS: {\n      if (!F.SLocEntryBaseID) {\n        if (!Diags.isDiagnosticInFlight()) {\n          Diags.Report(SourceLocation(), diag::remark_sloc_usage);"}}
[j]={{Ub,1202,"struct PragmaDebugHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n    if (II->isStr(\"assert\")) {\n    } else if (II->isStr(\"crash\")) {\n    } else if (II->isStr(\"parser_crash\")) {\n    } else if (II->isStr(\"dump\")) {\n    } else if (II->isStr(\"diag_mapping\")) {\n    } else if (II->isStr(\"llvm_fatal_error\")) {\n    } else if (II->isStr(\"llvm_unreachable\")) {\n    } else if (II->isStr(\"macro\")) {\n    } else if (II->isStr(\"module_map\")) {\n    } else if (II->isStr(\"overflow_stack\")) {\n    } else if (II->isStr(\"captured\")) {\n    } else if (II->isStr(\"modules\")) {\n    } else if (II->isStr(\"sloc_usage\")) {\n      PP.Diag(Tok, diag::remark_sloc_usage);"},{ec,3487,"llvm::Error ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case SOURCE_LOCATION_OFFSETS: {\n      if (!F.SLocEntryBaseID) {\n        if (!Diags.isDiagnosticInFlight()) {\n          Diags.Report(SourceLocation(), diag::remark_sloc_usage);"}},
[k]={
["clang/test/Misc/sloc-usage.cpp"]={"clang/test/Misc/sloc-usage.cpp:10:23: remark: source manager location address space usage: [-Rsloc-usage]"}
}
},
},
["trigraph_converted"]={
["trigraph_converted"]={
[c]="trigraph converted to \'A\' character [-Wtrigraphs]",
[f]="trigraph converted to \'A\' character [-Wtrigraphs]",
[d]=s,
[f]=r,
[p]={T,ab,lb,Jb},
[q]=Jb,
[h]="trigraph converted to \'%0\' character",
[b]=t,
[b]=t,
[g]="trigraph converted to \'(.*?)\' character",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[r]={U,bb,mb,Nb},
[e]=G,
[q]=Nb,
[i]={L,1236199783,M},
[d]="trigraph converted to \'%0\' character",
[j]={{kb,1210,"/// DecodeTrigraphChar - If the specified character is a legal trigraph when\n/// prefixed with ??, emit a trigraph warning.  If trigraphs are enabled,\n/// return the result character.  Finally, emit a warning about trigraph use\n/// whether trigraphs are enabled or not.\nstatic char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) {\n  if (L && !L->isLexingRawMode())\n    L->Diag(CP - 2, diag::trigraph_converted) << StringRef(&Res, 1);"}}
[e]=u,
[a]="trigraph converted to \'(.*?)\' character",
[g]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[h]=H,
[i]={N,1236199783,M},
[j]={{lb,1210,"/// DecodeTrigraphChar - If the specified character is a legal trigraph when\n/// prefixed with ??, emit a trigraph warning.  If trigraphs are enabled,\n/// return the result character.  Finally, emit a warning about trigraph use\n/// whether trigraphs are enabled or not.\nstatic char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) {\n  if (L && !L->isLexingRawMode())\n    L->Diag(CP - 2, diag::trigraph_converted) << StringRef(&Res, 1);"}},
[k]={
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:28:4: warning: trigraph converted to \'|\' character [-Wtrigraphs]"}
}
},
},
["trigraph_ends_block_comment"]={
["trigraph_ends_block_comment"]={
[c]="trigraph ends block comment [-Wtrigraphs]",
[f]="trigraph ends block comment [-Wtrigraphs]",
[d]=s,
[f]=r,
[p]={T,ab,lb,Jb},
[q]=Jb,
[h]="trigraph ends block comment",
[b]=t,
[b]=t,
[g]="trigraph ends block comment",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[r]={U,bb,mb,Nb},
[e]=G,
[q]=Nb,
[i]={L,1236199783,M},
[d]="trigraph ends block comment",
[j]={{kb,2690,"/// 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 (TrigraphPos) {\n    if (!L->isLexingRawMode())\n      L->Diag(TrigraphPos, diag::trigraph_ends_block_comment);"}}
[e]=u,
[a]="trigraph ends block comment",
[g]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[h]=H,
[i]={N,1236199783,M},
[j]={{lb,2690,"/// 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 (TrigraphPos) {\n    if (!L->isLexingRawMode())\n      L->Diag(TrigraphPos, diag::trigraph_ends_block_comment);"}},
[k]={
["clang/test/Lexer/block_cmt_end.c"]={"clang/test/Lexer/block_cmt_end.c:26:168: warning: trigraph ends block comment [-Wtrigraphs]","clang/test/Lexer/block_cmt_end.c:39:1: warning: trigraph ends block comment [-Wtrigraphs]"}
}
},
},
["trigraph_ignored"]={
["trigraph_ignored"]={
[c]="trigraph ignored [-Wtrigraphs]",
[f]="trigraph ignored [-Wtrigraphs]",
[d]=s,
[f]=r,
[p]={T,ab,lb,Jb},
[q]=Jb,
[h]="trigraph ignored",
[b]=t,
[b]=t,
[g]="trigraph ignored",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[r]={U,bb,mb,Nb},
[e]=G,
[q]=Nb,
[i]={L,1236199783,M},
[d]="trigraph ignored",
[j]={{kb,1205,"/// DecodeTrigraphChar - If the specified character is a legal trigraph when\n/// prefixed with ??, emit a trigraph warning.  If trigraphs are enabled,\n/// return the result character.  Finally, emit a warning about trigraph use\n/// whether trigraphs are enabled or not.\nstatic char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) {\n  if (!Trigraphs) {\n    if (L && !L->isLexingRawMode())\n      L->Diag(CP - 2, diag::trigraph_ignored);"}}
[e]=u,
[a]="trigraph ignored",
[g]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[h]=H,
[i]={N,1236199783,M},
[j]={{lb,1205,"/// DecodeTrigraphChar - If the specified character is a legal trigraph when\n/// prefixed with ??, emit a trigraph warning.  If trigraphs are enabled,\n/// return the result character.  Finally, emit a warning about trigraph use\n/// whether trigraphs are enabled or not.\nstatic char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) {\n  if (!Trigraphs) {\n    if (L && !L->isLexingRawMode())\n      L->Diag(CP - 2, diag::trigraph_ignored);"}},
[k]={
["clang/test/SemaCXX/cxx2a-nttp-printing.cpp"]={"clang/test/SemaCXX/cxx2a-nttp-printing.cpp:31:14: warning: trigraph ignored [-Wtrigraphs]"}
}
},
},
["trigraph_ignored_block_comment"]={
["trigraph_ignored_block_comment"]={
[c]="ignored trigraph would end block comment [-Wtrigraphs]",
[f]="ignored trigraph would end block comment [-Wtrigraphs]",
[d]=s,
[f]=r,
[p]={T,ab,lb,Jb},
[q]=Jb,
[h]="ignored trigraph would end block comment",
[b]=t,
[b]=t,
[g]="ignored trigraph would end block comment",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[r]={U,bb,mb,Nb},
[e]=G,
[q]=Nb,
[i]={L,1236199783,M},
[d]="ignored trigraph would end block comment",
[j]={{kb,2686,"/// 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 (TrigraphPos) {\n    // If no trigraphs are enabled, warn that we ignored this trigraph and\n    // ignore this * character.\n    if (!Trigraphs) {\n      if (!L->isLexingRawMode())\n        L->Diag(TrigraphPos, diag::trigraph_ignored_block_comment);"}}
[e]=u,
[a]="ignored trigraph would end block comment",
[g]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]",
[h]=H,
[i]={N,1236199783,M},
[j]={{lb,2686,"/// 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 (TrigraphPos) {\n    // If no trigraphs are enabled, warn that we ignored this trigraph and\n    // ignore this * character.\n    if (!Trigraphs) {\n      if (!L->isLexingRawMode())\n        L->Diag(TrigraphPos, diag::trigraph_ignored_block_comment);"}}
},
},
["warn_O4_is_O3"]={
["warn_O4_is_O3"]={
[c]="-O4 is equivalent to -O3 [-Wdeprecated]",
[f]="-O4 is equivalent to -O3 [-Wdeprecated]",
[d]=s,
[f]=r,
[p]={Ab},
[q]=Ab,
[h]="-O4 is equivalent to -O3",
[b]=t,
[b]=t,
[g]="\\-O4 is equivalent to \\-O3",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[r]={Cb},
[e]=Ib,
[q]=Cb,
[d]="-O4 is equivalent to -O3",
[e]=u,
[a]="\\-O4 is equivalent to \\-O3",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[h]=Wb,
[i]={"ad70d9683ea7",1377622695,"Warn that -O4 is the same as -O3."},
[i]={"ad70d9683ea7",1377622695,"Warn that -O4 is the same as -O3."},
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp",5075,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Embed-bitcode option.\n  // Only white-listed flags below are allowed to be embedded.\n  if (C.getDriver().embedBitcodeInObject() && !IsUsingLTO && (isa<BackendJobAction>(JA) || isa<AssembleJobAction>(JA))) {\n    // Optimization level for CodeGen.\n    if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n      if (A->getOption().matches(options::OPT_O4)) {\n        D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Clang.cpp",5932,"#endif\n  // Manually translate -O4 to -O3; let clang reject others.\n  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Flang.cpp",507,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Optimization level for CodeGen.\n  if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"}}
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp",5075,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Embed-bitcode option.\n  // Only white-listed flags below are allowed to be embedded.\n  if (C.getDriver().embedBitcodeInObject() && !IsUsingLTO && (isa<BackendJobAction>(JA) || isa<AssembleJobAction>(JA))) {\n    // Optimization level for CodeGen.\n    if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n      if (A->getOption().matches(options::OPT_O4)) {\n        D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Clang.cpp",5932,"#endif\n  // Manually translate -O4 to -O3; let clang reject others.\n  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Flang.cpp",507,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Optimization level for CodeGen.\n  if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"}}
},
},
["warn_abs_too_small"]={
["warn_abs_too_small"]={
[c]="absolute value function A given an argument of type B but has parameter of type C which may cause truncation of value [-Wabsolute-value]",
[f]="absolute value function A given an argument of type B but has parameter of type C which may cause truncation of value [-Wabsolute-value]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"absolute-value"},
[r]={"absolute-value"},
[q]="absolute-value",
[q]="absolute-value",
[h]="absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value",
[d]="absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value",
[b]=t,
[e]=u,
[g]="absolute value function (.*?) given an argument of type (.*?) but has parameter of type (.*?) which may cause truncation of value",
[a]="absolute value function (.*?) given an argument of type (.*?) but has parameter of type (.*?) which may cause truncation of value",
[a]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[j]={{F,12060,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // The argument and parameter are the same kind.  Check if they are the right\n  // size.\n  if (ArgValueKind == ParamValueKind) {\n    Diag(Call->getExprLoc(), diag::warn_abs_too_small) << FDecl << ArgType << ParamType;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1409,"///    /* DiagArray2 */ diag::warn_abs_too_small,"}}
[j]={{F,12060,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // The argument and parameter are the same kind.  Check if they are the right\n  // size.\n  if (ArgValueKind == ParamValueKind) {\n    Diag(Call->getExprLoc(), diag::warn_abs_too_small) << FDecl << ArgType << ParamType;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1409,"///    /* DiagArray2 */ diag::warn_abs_too_small,"}},
[k]={
["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:23:9: warning: absolute value function \'abs\' given an argument of type \'long long\' but has parameter of type \'int\' which may cause truncation of value [-Wabsolute-value]"}
}
},
},
["warn_abstract_final_class"]={
["warn_abstract_final_class"]={
[c]="abstract class is marked \'...\' [-Wabstract-final-class]",
[f]="abstract class is marked \'...\' [-Wabstract-final-class]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"abstract-final-class"},
[r]={"abstract-final-class"},
[q]="abstract-final-class",
[q]="abstract-final-class",
[h]="abstract class is marked \'%select{final|sealed}0\'",
[d]="abstract class is marked \'%select{final|sealed}0\'",
[b]=t,
[e]=u,
[g]="abstract class is marked \'(?:final|sealed)\'",
[a]="abstract class is marked \'(?:final|sealed)\'",
[a]=" \\[(?:\\-Werror,)?\\-Wabstract\\-final\\-class[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wabstract\\-final\\-class[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes."},
[i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes."},
[j]={{y,6974,"/// 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  if (Record->isAbstract()) {\n    if (FinalAttr *FA = Record->getAttr<FinalAttr>()) {\n      Diag(Record->getLocation(), diag::warn_abstract_final_class) << FA->isSpelledAsSealed();"}}
[j]={{z,6974,"/// 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  if (Record->isAbstract()) {\n    if (FinalAttr *FA = Record->getAttr<FinalAttr>()) {\n      Diag(Record->getLocation(), diag::warn_abstract_final_class) << FA->isSpelledAsSealed();"}},
[k]={
["clang/test/CXX/class/p2-0x.cpp"]={"clang/test/CXX/class/p2-0x.cpp:31:8: warning: abstract class is marked \'final\' [-Wabstract-final-class]","clang/test/CXX/class/p2-0x.cpp:34:8: warning: abstract class is marked \'final\' [-Wabstract-final-class]"}
}
},
},
["warn_abstract_vbase_init_ignored"]={
["warn_abstract_vbase_init_ignored"]={
[c]="initializer for virtual base class A of abstract class B will never be used [-Wabstract-vbase-init]",
[f]="initializer for virtual base class A of abstract class B will never be used [-Wabstract-vbase-init]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"abstract-vbase-init"},
[r]={"abstract-vbase-init"},
[q]="abstract-vbase-init",
[q]="abstract-vbase-init",
[h]="initializer for virtual base class %0 of abstract class %1 will never be used",
[d]="initializer for virtual base class %0 of abstract class %1 will never be used",
[b]=t,
[e]=u,
[g]="initializer for virtual base class (.*?) of abstract class (.*?) will never be used",
[a]="initializer for virtual base class (.*?) of abstract class (.*?) will never be used",
[a]=" \\[(?:\\-Werror,)?\\-Wabstract\\-vbase\\-init[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wabstract\\-vbase\\-init[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:"},
[i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:"},
[j]={{y,5351,"bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, ArrayRef<CXXCtorInitializer *> Initializers) {\n  // Push virtual bases before others.\n  for (auto &VBase : ClassDecl->vbases()) {\n    if (CXXCtorInitializer *Value = Info.AllBaseFields.lookup(VBase.getType()->getAs<RecordType>())) {\n      // [class.base.init]p7, per DR257:\n      //  A mem-initializer where the mem-initializer-id names a virtual base\n      //  class is ignored during execution of a constructor of any class that\n      //  is not the most derived class.\n      if (ClassDecl->isAbstract()) {\n        Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored) << VBase.getType() << ClassDecl;"}}
[j]={{z,5351,"bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, ArrayRef<CXXCtorInitializer *> Initializers) {\n  // Push virtual bases before others.\n  for (auto &VBase : ClassDecl->vbases()) {\n    if (CXXCtorInitializer *Value = Info.AllBaseFields.lookup(VBase.getType()->getAs<RecordType>())) {\n      // [class.base.init]p7, per DR257:\n      //  A mem-initializer where the mem-initializer-id names a virtual base\n      //  class is ignored during execution of a constructor of any class that\n      //  is not the most derived class.\n      if (ClassDecl->isAbstract()) {\n        Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored) << VBase.getType() << ClassDecl;"}},
[k]={
["clang/test/SemaCXX/abstract.cpp"]={"clang/test/SemaCXX/abstract.cpp:318:23: warning: initializer for virtual base class \'A\' of abstract class \'RedundantInit\' will never be used [-Wabstract-vbase-init]"}
}
},
},
["warn_access_decl_deprecated"]={
["warn_access_decl_deprecated"]={
[c]="access declarations are deprecated; use using declarations instead [-Wdeprecated]",
[f]="access declarations are deprecated; use using declarations instead [-Wdeprecated]",
[d]=s,
[f]=r,
[p]={Ab},
[q]=Ab,
[h]="access declarations are deprecated; use using declarations instead",
[b]=t,
[b]=t,
[g]="access declarations are deprecated; use using declarations instead",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[r]={Cb},
[e]=Ib,
[q]=Cb,
[d]="access declarations are deprecated; use using declarations instead",
[e]=u,
[a]="access declarations are deprecated; use using declarations instead",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[h]=Wb,
[i]={"a009726ce3a0",1260497403,"Implement access declarations.  Most of the work here is parsing them, which"},
[i]={"a009726ce3a0",1260497403,"Implement access declarations.  Most of the work here is parsing them, which"},
[j]={{y,12069,"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 \");"}}
[j]={{z,12069,"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 \");"}},
[k]={
["clang/test/CXX/class.access/class.access.dcl/p1.cpp"]={"clang/test/CXX/class.access/class.access.dcl/p1.cpp:29:15: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:36:15: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:43:15: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:50:15: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:71:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:77:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:84:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:91:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:98:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:142:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:149:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:156:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:163:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:170:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:216:11: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:223:11: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:230:11: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:237:11: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:244:11: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:300:14: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:307:11: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:314:16: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:321:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:329:15: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]","clang/test/CXX/class.access/class.access.dcl/p1.cpp:341:8: warning: access declarations are deprecated; use using declarations instead [-Wdeprecated]"}
}
},
},
["warn_accessor_property_type_mismatch"]={
["warn_accessor_property_type_mismatch"]={
[c]="type of property A does not match type of accessor B",
[f]="type of property A does not match type of accessor B",
[d]=s,
[f]=r,
[h]="type of property %0 does not match type of accessor %1",
[b]=t,
[b]=t,
[g]="type of property (.*?) does not match type of accessor (.*?)",
[c]=s,
[a]=ub,
[d]="type of property %0 does not match type of accessor %1",
[e]=k,
[e]=u,
[a]="type of property (.*?) does not match type of accessor (.*?)",
[g]=ub,
[h]=l,
[i]={"b2ab73d93cf5",1241811394,"More type checking for properties, accessors and"},
[i]={"b2ab73d93cf5",1241811394,"More type checking for properties, accessors and"},
[j]={{E,1742,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    Diag(Loc, diag::warn_accessor_property_type_mismatch) << property->getDeclName() << GetterMethod->getSelector();"},{E,2452,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (SetterMethod->param_size() != 1 || !Context.hasSameUnqualifiedType((*SetterMethod->param_begin())->getType().getNonReferenceType(), property->getType().getNonReferenceType())) {\n      Diag(property->getLocation(), diag::warn_accessor_property_type_mismatch) << property->getDeclName() << SetterMethod->getSelector();"}}
[j]={{G,1742,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    Diag(Loc, diag::warn_accessor_property_type_mismatch) << property->getDeclName() << GetterMethod->getSelector();"},{G,2452,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (SetterMethod->param_size() != 1 || !Context.hasSameUnqualifiedType((*SetterMethod->param_begin())->getType().getNonReferenceType(), property->getType().getNonReferenceType())) {\n      Diag(property->getLocation(), diag::warn_accessor_property_type_mismatch) << property->getDeclName() << SetterMethod->getSelector();"}},
[k]={
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:43:15: warning: type of property \'P1\' does not match type of accessor \'P1\'"}
}
},
},
["warn_acquire_requires_negative_cap"]={
["warn_acquire_requires_negative_cap"]={
[c]="acquiring A \'B\' requires negative capability \'C\' [-Wthread-safety-negative]",
[f]="acquiring A \'B\' requires negative capability \'C\' [-Wthread-safety-negative]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"thread-safety-negative"},
[r]={"thread-safety-negative"},
[q]="thread-safety-negative",
[q]="thread-safety-negative",
[h]="acquiring %0 \'%1\' requires negative capability \'%2\'",
[d]="acquiring %0 \'%1\' requires negative capability \'%2\'",
[b]=t,
[e]=u,
[g]="acquiring (.*?) \'(.*?)\' requires negative capability \'(.*?)\'",
[a]="acquiring (.*?) \'(.*?)\' requires negative capability \'(.*?)\'",
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-negative[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-negative[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"3efd0495a081",1407190386,"Thread Safety Analysis: add a -Wthread-safety-negative flag that warns whenever"},
[i]={"3efd0495a081",1407190386,"Thread Safety Analysis: add a -Wthread-safety-negative flag that warns whenever"},
[j]={{I,2021,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleNegativeNotHeld(StringRef Kind, Name LockName, Name Neg, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquire_requires_negative_cap) << Kind << LockName << Neg);"}}
[j]={{J,2021,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleNegativeNotHeld(StringRef Kind, Name LockName, Name Neg, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquire_requires_negative_cap) << Kind << LockName << Neg);"}},
[k]={
["clang/test/SemaCXX/warn-thread-safety-negative.cpp"]={"clang/test/SemaCXX/warn-thread-safety-negative.cpp:52:8: warning: acquiring mutex \'mu\' requires negative capability \'!mu\' [-Wthread-safety-negative]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:74:8: warning: acquiring mutex \'mu\' requires negative capability \'!mu\' [-Wthread-safety-negative]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:88:15: warning: acquiring mutex \'mu\' requires negative capability \'!mu\' [-Wthread-safety-negative]"}
}
},
},
["warn_acquired_before"]={
["warn_acquired_before"]={
[c]="A \'B\' must be acquired before \'C\' [-Wthread-safety-analysis]",
[f]="A \'B\' must be acquired before \'C\' [-Wthread-safety-analysis]",
[d]=s,
[f]=r,
[A]=false,
[p]={"thread-safety",ec},
[q]=ec,
[h]="%0 \'%1\' must be acquired before \'%2\'",
[b]=t,
[b]=t,
[g]="(.*?) \'(.*?)\' must be acquired before \'(.*?)\'",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]",
[B]=false,
[e]=k,
[r]={"thread-safety",lc},
[q]=lc,
[d]="%0 \'%1\' must be acquired before \'%2\'",
[e]=u,
[a]="(.*?) \'(.*?)\' must be acquired before \'(.*?)\'",
[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]",
[h]=l,
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[j]={{I,2043,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleLockAcquiredBefore(StringRef Kind, Name L1Name, Name L2Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before) << Kind << L1Name << L2Name);"}}
[j]={{J,2043,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleLockAcquiredBefore(StringRef Kind, Name L1Name, Name L2Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before) << Kind << L1Name << L2Name);"}},
[k]={
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:84:3: warning: mutex \'mu1\' must be acquired before \'mu2\' [-Wthread-safety-analysis]"}
}
},
},
["warn_acquired_before_after_cycle"]={
["warn_acquired_before_after_cycle"]={
[c]="Cycle in acquired_before/after dependencies, starting with \'A\' [-Wthread-safety-analysis]",
[f]="Cycle in acquired_before/after dependencies, starting with \'A\' [-Wthread-safety-analysis]",
[d]=s,
[f]=r,
[A]=false,
[p]={"thread-safety",ec},
[q]=ec,
[h]="Cycle in acquired_before/after dependencies, starting with \'%0\'",
[b]=t,
[b]=t,
[g]="Cycle in acquired_before\\/after dependencies, starting with \'(.*?)\'",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]",
[B]=false,
[e]=k,
[r]={"thread-safety",lc},
[q]=lc,
[d]="Cycle in acquired_before/after dependencies, starting with \'%0\'",
[e]=u,
[a]="Cycle in acquired_before\\/after dependencies, starting with \'(.*?)\'",
[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]",
[h]=l,
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[j]={{I,2049,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name);"}}
[j]={{J,2049,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name);"}},
[k]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5758:9: warning: Cycle in acquired_before/after dependencies, starting with \'mu_b\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5759:9: warning: Cycle in acquired_before/after dependencies, starting with \'mu_a\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5756:9: warning: Cycle in acquired_before/after dependencies, starting with \'mu3\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5754:9: warning: Cycle in acquired_before/after dependencies, starting with \'mu1\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5755:9: warning: Cycle in acquired_before/after dependencies, starting with \'mu2\' [-Wthread-safety-analysis]"}
}
},
},
["warn_addition_in_bitshift"]={
["warn_addition_in_bitshift"]={
[c]="operator \'A\' has lower precedence than \'B\'; \'C\' will be evaluated first [-Wshift-op-parentheses]",
[f]="operator \'A\' has lower precedence than \'B\'; \'C\' will be evaluated first [-Wshift-op-parentheses]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,"parentheses","shift-op-parentheses"},
[r]={U,bb,"parentheses","shift-op-parentheses"},
[q]="shift-op-parentheses",
[q]="shift-op-parentheses",
[h]="operator \'%0\' has lower precedence than \'%1\'; \'%1\' will be evaluated first",
[d]="operator \'%0\' has lower precedence than \'%1\'; \'%1\' will be evaluated first",
[b]=t,
[e]=u,
[g]="operator \'(.*?)\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first",
[a]="operator \'(.*?)\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first",
[a]=" \\[(?:\\-Werror,)?\\-Wshift\\-op\\-parentheses[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wshift\\-op\\-parentheses[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"15f17cbbd813",1349397663,"Implement -Wshift-op-parentheses for: a << b + c"},
[i]={"15f17cbbd813",1349397663,"Implement -Wshift-op-parentheses for: a << b + c"},
[j]={{C,15846,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_addition_in_bitshift) << Bop->getSourceRange() << OpLoc << Shift << Op;"}}
[j]={{D,15846,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_addition_in_bitshift) << Bop->getSourceRange() << OpLoc << Shift << Op;"}},
[k]={
["clang/test/Sema/parentheses.cpp"]={"clang/test/Sema/parentheses.cpp:88:17: warning: operator \'>>\' has lower precedence than \'+\'; \'+\' will be evaluated first [-Wshift-op-parentheses]","clang/test/Sema/parentheses.cpp:93:12: warning: operator \'<<\' has lower precedence than \'-\'; \'-\' will be evaluated first [-Wshift-op-parentheses]","clang/test/Sema/parentheses.cpp:99:17: warning: operator \'>>\' has lower precedence than \'+\'; \'+\' will be evaluated first [-Wshift-op-parentheses]"}
}
},
},
["warn_address_of_reference_bool_conversion"]={
["warn_address_of_reference_bool_conversion"]={
[c]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]",
[f]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"bool-conversion","bool-conversions",Bb,Eb,"undefined-bool-conversion"},
[r]={"bool-conversion","bool-conversions",Kb,Jb,"undefined-bool-conversion"},
[q]="undefined-bool-conversion",
[q]="undefined-bool-conversion",
[h]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true",
[d]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true",
[b]=t,
[e]=u,
[g]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true",
[a]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true",
[a]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]",
[e]=Vb,
[h]=hc,
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[j]={{F,15476,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}
[j]={{F,15476,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}},
[k]={
["clang/test/CodeGenCXX/reference-field.cpp"]={"clang/test/CodeGenCXX/reference-field.cpp:6:19: warning: reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]"}
}
},
},
["warn_address_of_reference_null_compare"]={
["warn_address_of_reference_null_compare"]={
[c]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to ... [-Wtautological-undefined-compare]",
[f]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to ... [-Wtautological-undefined-compare]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,lb,Sb,"tautological-undefined-compare"},
[r]={U,bb,mb,fc,"tautological-undefined-compare"},
[q]="tautological-undefined-compare",
[q]="tautological-undefined-compare",
[h]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0",
[d]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0",
[b]=t,
[e]=u,
[g]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)",
[a]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)",
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[j]={{F,15475,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}
[j]={{F,15475,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}},
[k]={
["clang/test/Analysis/loop-widening-preserve-reference-type.cpp"]={"clang/test/Analysis/loop-widening-preserve-reference-type.cpp:13:24: warning: reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/Analysis/loop-widening-preserve-reference-type.cpp:21:24: warning: reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]"}
}
},
},
["warn_alias_to_weak_alias"]={
["warn_alias_to_weak_alias"]={
[c]="... will always resolve to A even if weak definition of B is overridden [-Wignored-attributes]",
[f]="... will always resolve to A even if weak definition of B is overridden [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden",
[b]=t,
[b]=t,
[g]="(?:alias|ifunc) will always resolve to (.*?) even if weak definition of (.*?) is overridden",
[c]=s,
[a]=J,
[r]={K,A},
[e]=l,
[q]=A,
[d]="%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden",
[e]=u,
[a]="(?:alias|ifunc) will always resolve to (.*?) even if weak definition of (.*?) is overridden",
[g]=L,
[h]=m,
[i]={"a39fc6dd2afa",1395934040,"Handle and warn on aliases to weak aliases."},
[i]={"a39fc6dd2afa",1395934040,"Handle and warn on aliases to weak aliases."},
[j]={{nc,667,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    // We have to handle alias to weak aliases in here. LLVM itself disallows\n    // this since the object semantics would not match the IL one. For\n    // compatibility with gcc we implement it by just pointing the alias\n    // to its aliasee\'s aliasee. We also warn, since the user is probably\n    // expecting the link to be weak.\n    if (auto *GA = dyn_cast<llvm::GlobalAlias>(AliaseeGV)) {\n      if (GA->isInterposable()) {\n        Diags.Report(Location, diag::warn_alias_to_weak_alias) << GV->getName() << GA->getName() << IsIFunc;"}}
[j]={{Fc,667,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    // We have to handle alias to weak aliases in here. LLVM itself disallows\n    // this since the object semantics would not match the IL one. For\n    // compatibility with gcc we implement it by just pointing the alias\n    // to its aliasee\'s aliasee. We also warn, since the user is probably\n    // expecting the link to be weak.\n    if (auto *GA = dyn_cast<llvm::GlobalAlias>(AliaseeGV)) {\n      if (GA->isInterposable()) {\n        Diags.Report(Location, diag::warn_alias_to_weak_alias) << GV->getName() << GA->getName() << IsIFunc;"}},
[k]={
["clang/test/Sema/attr-alias-elf.c"]={"clang/test/Sema/attr-alias-elf.c:62:33: warning: alias will always resolve to test2_bar even if weak definition of test2_foo is overridden [-Wignored-attributes]"}
}
},
},
["warn_alias_with_section"]={
["warn_alias_with_section"]={
[c]="... will not be in section \'A\' but in the same section as the ... [-Wignored-attributes]",
[f]="... will not be in section \'A\' but in the same section as the ... [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%select{alias|ifunc}1 will not be in section \'%0\' but in the same section as the %select{aliasee|resolver}2",
[b]=t,
[b]=t,
[g]="(?:alias|ifunc) will not be in section \'(.*?)\' but in the same section as the (?:aliasee|resolver)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=l,
[q]=A,
[d]="%select{alias|ifunc}1 will not be in section \'%0\' but in the same section as the %select{aliasee|resolver}2",
[e]=u,
[a]="(?:alias|ifunc) will not be in section \'(.*?)\' but in the same section as the (?:aliasee|resolver)",
[g]=L,
[h]=m,
[i]={"502f65ae54d0",1399321263,"Fix pr19653."},
[i]={"502f65ae54d0",1399321263,"Fix pr19653."},
[j]={{nc,656,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {\n      if (AliasSection != AliaseeGV->getSection())\n        Diags.Report(SA->getLocation(), diag::warn_alias_with_section) << AliasSection << IsIFunc << IsIFunc;"}}
[j]={{Fc,656,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {\n      if (AliasSection != AliaseeGV->getSection())\n        Diags.Report(SA->getLocation(), diag::warn_alias_with_section) << AliasSection << IsIFunc << IsIFunc;"}},
[k]={
["clang/test/Sema/attr-alias-elf.c"]={"clang/test/Sema/attr-alias-elf.c:65:33: warning: alias will not be in section \'test\' but in the same section as the aliasee [-Wignored-attributes]"}
}
},
},
["warn_aligned_attr_underaligned"]={
["warn_aligned_attr_underaligned"]={
[c]="requested alignment is less than minimum alignment of A for type B [-Wignored-attributes]",
[f]="requested alignment is less than minimum alignment of A for type B [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="requested alignment is less than minimum alignment of %1 for type %0",
[b]=t,
[b]=t,
[g]="requested alignment is less than minimum alignment of (.*?) for type (.*?)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={Gb,1615397021,Cb},
[d]="requested alignment is less than minimum alignment of %1 for type %0",
[j]={{u,4518,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && AlignVal < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"},{u,4567,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && Context.toCharUnitsFromBits(AlignVal).getQuantity() < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"}}
[e]=u,
[a]="requested alignment is less than minimum alignment of (.*?) for type (.*?)",
[g]=L,
[h]=l,
[i]={Mb,1615397021,Ib},
[j]={{v,4518,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && AlignVal < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"},{v,4567,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && Context.toCharUnitsFromBits(AlignVal).getQuantity() < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"}},
[k]={
["clang/test/Sema/aix-attr-aligned-vector-warn.c"]={"clang/test/Sema/aix-attr-aligned-vector-warn.c:9:12: warning: requested alignment is less than minimum alignment of 16 for type \'__vector int\' (vector of 4 \'int\' values) [-Wignored-attributes]","clang/test/Sema/aix-attr-aligned-vector-warn.c:10:12: warning: requested alignment is less than minimum alignment of 16 for type \'__vector int\' (vector of 4 \'int\' values) [-Wignored-attributes]"}
}
},
},
["warn_alignment_builtin_useless"]={
["warn_alignment_builtin_useless"]={
[c]="... to 1 byte is ... [-Wtautological-compare]",
[f]="... to 1 byte is ... [-Wtautological-compare]",
[d]=s,
[f]=r,
[p]={T,ab,lb,Sb},
[q]=Sb,
[h]="%select{aligning a value|the result of checking whether a value is aligned}0 to 1 byte is %select{a no-op|always true}0",
[b]=t,
[b]=t,
[g]="(?:aligning a value|the result of checking whether a value is aligned) to 1 byte is (?:a no\\-op|always true)",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]",
[r]={U,bb,mb,fc},
[e]=k,
[q]=fc,
[d]="%select{aligning a value|the result of checking whether a value is aligned}0 to 1 byte is %select{a no-op|always true}0",
[e]=u,
[a]="(?:aligning a value|the result of checking whether a value is aligned) to 1 byte is (?:a no\\-op|always true)",
[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]",
[h]=l,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{F,343,"/// 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::warn_alignment_builtin_useless) << IsBooleanAlignBuiltin;"}}
[j]={{F,343,"/// 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::warn_alignment_builtin_useless) << IsBooleanAlignBuiltin;"}},
[k]={
["clang/test/Sema/builtin-align.c"]={"clang/test/Sema/builtin-align.c:80:28: warning: the result of checking whether a value is aligned to 1 byte is always true [-Wtautological-compare]"}
}
},
},
["warn_alignment_not_power_of_two"]={
["warn_alignment_not_power_of_two"]={
[c]="requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]",
[f]="requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"non-power-of-two-alignment"},
[r]={"non-power-of-two-alignment"},
[q]="non-power-of-two-alignment",
[q]="non-power-of-two-alignment",
[h]="requested alignment is not a power of 2",
[d]="requested alignment is not a power of 2",
[b]=t,
[e]=u,
[g]="requested alignment is not a power of 2",
[a]="requested alignment is not a power of 2",
[a]=" \\[(?:\\-Werror,)?\\-Wnon\\-power\\-of\\-two\\-alignment[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnon\\-power\\-of\\-two\\-alignment[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{F,6741,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (!I.isPowerOf2())\n          Diag(Arg->getExprLoc(), diag::warn_alignment_not_power_of_two) << Arg->getSourceRange();"}}
[j]={{F,6741,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (!I.isPowerOf2())\n          Diag(Arg->getExprLoc(), diag::warn_alignment_not_power_of_two) << Arg->getSourceRange();"}},
[k]={
["clang/test/Sema/alloc-align-attr.c"]={"clang/test/Sema/alloc-align-attr.c:27:31: warning: requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]"}
}
},
},
["warn_alloca"]={
["warn_alloca"]={
[c]="use of function A is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability [-Walloca]",
[f]="use of function A is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability [-Walloca]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"alloca"},
[r]={"alloca"},
[q]="alloca",
[q]="alloca",
[h]="use of function %0 is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability",
[d]="use of function %0 is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability",
[b]=t,
[e]=u,
[g]="use of function (.*?) is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability",
[a]="use of function (.*?) is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability",
[a]=" \\[(?:\\-Werror,)?\\-Walloca[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Walloca[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"9d045a5c1e6b",1564093420,"[Sema] add -Walloca to flag uses of `alloca`"},
[i]={"9d045a5c1e6b",1564093420,"[Sema] add -Walloca to flag uses of `alloca`"},
[j]={{F,2205,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__builtin_alloca_uninitialized:\n    Diag(TheCall->getBeginLoc(), diag::warn_alloca) << TheCall->getDirectCallee();"}}
[j]={{F,2205,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__builtin_alloca_uninitialized:\n    Diag(TheCall->getBeginLoc(), diag::warn_alloca) << TheCall->getDirectCallee();"}},
[k]={
["clang/test/Sema/warn-alloca.c"]={"clang/test/Sema/warn-alloca.c:9:3: warning: use of function \'__builtin_alloca\' is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability [-Walloca]","clang/test/Sema/warn-alloca.c:16:3: warning: use of function \'__builtin_alloca_with_align\' is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability [-Walloca]","clang/test/Sema/warn-alloca.c:23:3: warning: use of function \'__builtin_alloca_uninitialized\' is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability [-Walloca]","clang/test/Sema/warn-alloca.c:30:3: warning: use of function \'__builtin_alloca_with_align_uninitialized\' is discouraged; there is no way to check for failure but failure may still occur, resulting in a possibly exploitable security vulnerability [-Walloca]"}
}
},
},
["warn_alloca_align_alignof"]={
["warn_alloca_align_alignof"]={
[c]="second argument to __builtin_alloca_with_align is supposed to be in bits [-Walloca-with-align-alignof]",
[f]="second argument to __builtin_alloca_with_align is supposed to be in bits [-Walloca-with-align-alignof]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"alloca-with-align-alignof"},
[r]={"alloca-with-align-alignof"},
[q]="alloca-with-align-alignof",
[q]="alloca-with-align-alignof",
[h]="second argument to __builtin_alloca_with_align is supposed to be in bits",
[d]="second argument to __builtin_alloca_with_align is supposed to be in bits",
[b]=t,
[e]=u,
[g]="second argument to __builtin_alloca_with_align is supposed to be in bits",
[a]="second argument to __builtin_alloca_with_align is supposed to be in bits",
[a]=" \\[(?:\\-Werror,)?\\-Walloca\\-with\\-align\\-alignof[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Walloca\\-with\\-align\\-alignof[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"86b1bfad0509",1477937277,"[Sema] Warn when alignof is used with __builtin_alloca_with_align"},
[i]={"86b1bfad0509",1477937277,"[Sema] Warn when alignof is used with __builtin_alloca_with_align"},
[j]={{F,8625,"/// 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 (const auto *UE = dyn_cast<UnaryExprOrTypeTraitExpr>(Arg->IgnoreParenImpCasts()))\n      if (UE->getKind() == UETT_AlignOf || UE->getKind() == UETT_PreferredAlignOf)\n        Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) << Arg->getSourceRange();"}}
[j]={{F,8625,"/// 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 (const auto *UE = dyn_cast<UnaryExprOrTypeTraitExpr>(Arg->IgnoreParenImpCasts()))\n      if (UE->getKind() == UETT_AlignOf || UE->getKind() == UETT_PreferredAlignOf)\n        Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) << Arg->getSourceRange();"}},
[k]={
["clang/test/Sema/builtin-alloca-with-align.c"]={"clang/test/Sema/builtin-alloca-with-align.c:32:3: warning: second argument to __builtin_alloca_with_align is supposed to be in bits [-Walloca-with-align-alignof]"}
}
},
},
["warn_always_inline_coroutine"]={
["warn_always_inline_coroutine"]={
[c]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined [-Walways-inline-coroutine]",
[f]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined [-Walways-inline-coroutine]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"always-inline-coroutine","coroutine"},
[r]={"always-inline-coroutine","coroutine"},
[q]="always-inline-coroutine",
[q]="always-inline-coroutine",
[h]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined",
[d]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined",
[b]=t,
[e]=u,
[g]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined",
[a]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined",
[a]=" \\[(?:\\-Werror,)?\\-Walways\\-inline\\-coroutine[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Walways\\-inline\\-coroutine[^\\]]*\\]",
[e]="Coroutines Issue",
[h]="Coroutines Issue",
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",1116,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // The always_inline attribute doesn\'t reliably apply to a coroutine,\n  // because the coroutine will be split into pieces and some pieces\n  // might be called indirectly, as in a virtual call. Even the ramp\n  // function cannot be inlined at -O0, due to pipeline ordering\n  // problems (see https://llvm.org/PR53413). Tell the user about it.\n  if (FD->hasAttr<AlwaysInlineAttr>())\n    Diag(FD->getLocation(), diag::warn_always_inline_coroutine);"}}
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",1116,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // The always_inline attribute doesn\'t reliably apply to a coroutine,\n  // because the coroutine will be split into pieces and some pieces\n  // might be called indirectly, as in a virtual call. Even the ramp\n  // function cannot be inlined at -O0, due to pipeline ordering\n  // problems (see https://llvm.org/PR53413). Tell the user about it.\n  if (FD->hasAttr<AlwaysInlineAttr>())\n    Diag(FD->getLocation(), diag::warn_always_inline_coroutine);"}},
[k]={
["clang/test/CodeGenCoroutines/coro-always-inline.cpp"]={"clang/test/CodeGenCoroutines/coro-always-inline.cpp:44:41: warning: this coroutine may be split into pieces; not every piece is guaranteed to be inlined [-Walways-inline-coroutine]"}
}
},
},
["warn_ambiguous_suitable_delete_function_found"]={
["warn_ambiguous_suitable_delete_function_found"]={
[c]="multiple suitable A functions for B; no \'operator delete\' function will be invoked if initialization throws an exception [-Wambiguous-delete]",
[f]="multiple suitable A functions for B; no \'operator delete\' function will be invoked if initialization throws an exception [-Wambiguous-delete]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"ambiguous-delete"},
[r]={"ambiguous-delete"},
[q]="ambiguous-delete",
[q]="ambiguous-delete",
[h]="multiple suitable %0 functions for %1; no \'operator delete\' function will be invoked if initialization throws an exception",
[d]="multiple suitable %0 functions for %1; no \'operator delete\' function will be invoked if initialization throws an exception",
[b]=t,
[e]=u,
[g]="multiple suitable (.*?) functions for (.*?); no \'operator delete\' function will be invoked if initialization throws an exception",
[a]="multiple suitable (.*?) functions for (.*?); no \'operator delete\' function will be invoked if initialization throws an exception",
[a]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-delete[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-delete[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"189e52fcdfc3",1476081751,"P0035R4: Semantic analysis and code generation for C++17 overaligned"},
[i]={"189e52fcdfc3",1476081751,"P0035R4: Semantic analysis and code generation for C++17 overaligned"},
[j]={{Ub,2939,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n  } else if (!Matches.empty()) {\n    Diag(StartLoc, diag::warn_ambiguous_suitable_delete_function_found) << DeleteName << AllocElemType;"}}
[j]={{dc,2939,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n  } else if (!Matches.empty()) {\n    Diag(StartLoc, diag::warn_ambiguous_suitable_delete_function_found) << DeleteName << AllocElemType;"}}
},
},
["warn_analyzer_deprecated_option"]={
["warn_analyzer_deprecated_option"]={
[c]="analyzer option \'A\' is deprecated. This flag will be removed in B, and passing this option will be an error. [-Wdeprecated-static-analyzer-flag]",
[f]="analyzer option \'A\' is deprecated. This flag will be removed in B, and passing this option will be an error. [-Wdeprecated-static-analyzer-flag]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"deprecated-static-analyzer-flag"},
[r]={"deprecated-static-analyzer-flag"},
[q]="deprecated-static-analyzer-flag",
[q]="deprecated-static-analyzer-flag",
[h]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error.",
[d]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error.",
[b]=t,
[e]=u,
[g]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\.",
[a]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\.",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan..."}
[i]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan..."}
},
},
["warn_analyzer_deprecated_option_with_alternative"]={
["warn_analyzer_deprecated_option_with_alternative"]={
[c]="analyzer option \'A\' is deprecated. This flag will be removed in B, and passing this option will be an error. Use \'C\' instead. [-Wdeprecated-static-analyzer-flag]",
[f]="analyzer option \'A\' is deprecated. This flag will be removed in B, and passing this option will be an error. Use \'C\' instead. [-Wdeprecated-static-analyzer-flag]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"deprecated-static-analyzer-flag"},
[r]={"deprecated-static-analyzer-flag"},
[q]="deprecated-static-analyzer-flag",
[q]="deprecated-static-analyzer-flag",
[h]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error. Use \'%2\' instead.",
[d]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error. Use \'%2\' instead.",
[b]=t,
[e]=u,
[g]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\. Use \'(.*?)\' instead\\.",
[a]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\. Use \'(.*?)\' instead\\.",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"3738ce05a70c",1668637223,"Add support for a backdoor driver option that enables emitting header"}
[i]={"3738ce05a70c",1668637223,"Add support for a backdoor driver option that enables emitting header"}
},
},
["warn_anyx86_interrupt_regsave"]={
["warn_anyx86_interrupt_regsave"]={
[c]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\' [-Winterrupt-service-routine]",
[f]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\' [-Winterrupt-service-routine]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"interrupt-service-routine"},
[r]={"interrupt-service-routine"},
[q]="interrupt-service-routine",
[q]="interrupt-service-routine",
[h]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'",
[d]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'",
[b]=t,
[e]=u,
[g]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'",
[a]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'",
[a]=" \\[(?:\\-Werror,)?\\-Winterrupt\\-service\\-routine[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Winterrupt\\-service\\-routine[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[j]={{C,7365,"/// 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  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<AnyX86InterruptAttr>() && ((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {\n      Diag(Fn->getExprLoc(), diag::warn_anyx86_interrupt_regsave);"}}
[j]={{D,7365,"/// 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  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<AnyX86InterruptAttr>() && ((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {\n      Diag(Fn->getExprLoc(), diag::warn_anyx86_interrupt_regsave);"}},
[k]={
["clang/test/Sema/attr-x86-interrupt.c"]={"clang/test/Sema/attr-x86-interrupt.c:58:3: warning: interrupt service routine should only call a function with attribute \'no_caller_saved_registers\' [-Winterrupt-service-routine]"}
}
},
},
["warn_arc_bridge_cast_nonarc"]={
["warn_arc_bridge_cast_nonarc"]={
[c]="\'A\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]",
[f]="\'A\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"arc-bridge-casts-disallowed-in-nonarc"},
[r]={"arc-bridge-casts-disallowed-in-nonarc"},
[q]="arc-bridge-casts-disallowed-in-nonarc",
[q]="arc-bridge-casts-disallowed-in-nonarc",
[h]="\'%0\' casts have no effect when not using ARC",
[d]="\'%0\' casts have no effect when not using ARC",
[b]=t,
[e]=u,
[g]="\'(.*?)\' casts have no effect when not using ARC",
[a]="\'(.*?)\' casts have no effect when not using ARC",
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-bridge\\-casts\\-disallowed\\-in\\-nonarc[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-bridge\\-casts\\-disallowed\\-in\\-nonarc[^\\]]*\\]",
[e]="ARC Parse Issue",
[h]="ARC Parse Issue",
[i]={"084e1b48a176",1329540158,"Change wording of warning about using __bridge casts in non-ARC."},
[i]={"084e1b48a176",1329540158,"Change wording of warning about using __bridge casts in non-ARC."},
[j]={{qc,2922,"/// 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  if (BridgeCast && !getLangOpts().ObjCAutoRefCount) {\n    if (!TryConsumeToken(tok::kw___bridge)) {\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::warn_arc_bridge_cast_nonarc) << BridgeCastName << FixItHint::CreateReplacement(BridgeKeywordLoc, \"\");"}}
[j]={{Bc,2922,"/// 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  if (BridgeCast && !getLangOpts().ObjCAutoRefCount) {\n    if (!TryConsumeToken(tok::kw___bridge)) {\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::warn_arc_bridge_cast_nonarc) << BridgeCastName << FixItHint::CreateReplacement(BridgeKeywordLoc, \"\");"}},
[k]={
["clang/test/FixIt/bridge-in-non-arc.m"]={"clang/test/FixIt/bridge-in-non-arc.m:7:11: warning: \'__bridge_transfer\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]","clang/test/FixIt/bridge-in-non-arc.m:8:12: warning: \'__bridge_transfer\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]"}
}
},
},
["warn_arc_lifetime_result_type"]={
["warn_arc_lifetime_result_type"]={
[c]="ARC ... lifetime qualifier on return type is ignored [-Wignored-qualifiers]",
[f]="ARC ... lifetime qualifier on return type is ignored [-Wignored-qualifiers]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={l,T,Ac,"ignored-qualifiers"},
[r]={m,U,Mc,"ignored-qualifiers"},
[q]="ignored-qualifiers",
[q]="ignored-qualifiers",
[h]="ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored",
[d]="ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored",
[b]=t,
[e]=u,
[g]="ARC (?:unused|__unsafe_unretained|__strong|__weak|__autoreleasing) lifetime qualifier on return type is ignored",
[a]="ARC (?:unused|__unsafe_unretained|__strong|__weak|__autoreleasing) lifetime qualifier on return type is ignored",
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]",
[e]=hc,
[h]=qc,
[i]={"cd78037ad117",1358465805,"In Objective-C ARC, completely ignore ownership qualifiers on the"},
[i]={"cd78037ad117",1358465805,"In Objective-C ARC, completely ignore ownership qualifiers on the"},
[j]={{hb,5402,"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      // Objective-C ARC ownership qualifiers are ignored on the function\n      // return type (by type canonicalization). Complain if this attribute\n      // was written here.\n      if (T.getQualifiers().hasObjCLifetime()) {\n        if (AttrLoc.isValid()) {\n          S.Diag(AttrLoc, diag::warn_arc_lifetime_result_type) << T.getQualifiers().getObjCLifetime();"}}
[j]={{cb,5402,"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      // Objective-C ARC ownership qualifiers are ignored on the function\n      // return type (by type canonicalization). Complain if this attribute\n      // was written here.\n      if (T.getQualifiers().hasObjCLifetime()) {\n        if (AttrLoc.isValid()) {\n          S.Diag(AttrLoc, diag::warn_arc_lifetime_result_type) << T.getQualifiers().getObjCLifetime();"}},
[k]={
["clang/test/CodeGenObjCXX/msabi-objc-extensions.mm"]={"clang/test/CodeGenObjCXX/msabi-objc-extensions.mm:66:1: warning: ARC __autoreleasing lifetime qualifier on return type is ignored [-Wignored-qualifiers]"}
}
},
},
["warn_arc_literal_assign"]={
["warn_arc_literal_assign"]={
[c]="assigning ... to a weak ...; object will be released after assignment [-Warc-unsafe-retained-assign]",
[f]="assigning ... to a weak ...; object will be released after assignment [-Warc-unsafe-retained-assign]",
[d]=s,
[f]=r,
[p]={pc,Yb},
[q]=Yb,
[h]="assigning %select{array literal|dictionary literal|numeric literal|boxed expression|<should not happen>|block literal}0 to a weak %select{property|variable}1; object will be released after assignment",
[b]=t,
[b]=t,
[g]="assigning (?:array literal|dictionary literal|numeric literal|boxed expression|block literal) to a weak (?:property|variable); object will be released after assignment",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]",
[r]={Dc,wc},
[e]=hc,
[q]=wc,
[d]="assigning %select{array literal|dictionary literal|numeric literal|boxed expression|<should not happen>|block literal}0 to a weak %select{property|variable}1; object will be released after assignment",
[e]=u,
[a]="assigning (?:array literal|dictionary literal|numeric literal|boxed expression|block literal) to a weak (?:property|variable); object will be released after assignment",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]",
[h]=qc,
[i]={"9304da95784c",1356077068,"Extend checkUnsafeAssigns() to also handle assigning an object literal to a weak reference."},
[i]={"9304da95784c",1356077068,"Extend checkUnsafeAssigns() to also handle assigning an object literal to a weak reference."},
[j]={{F,17735,"static bool checkUnsafeAssignLiteral(Sema &S, SourceLocation Loc, Expr *RHS, bool isProperty) {\n  S.Diag(Loc, diag::warn_arc_literal_assign) << (unsigned)Kind << (isProperty ? 0 : 1) << RHS->getSourceRange();"}}
[j]={{F,17735,"static bool checkUnsafeAssignLiteral(Sema &S, SourceLocation Loc, Expr *RHS, bool isProperty) {\n  S.Diag(Loc, diag::warn_arc_literal_assign) << (unsigned)Kind << (isProperty ? 0 : 1) << RHS->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:758:15: warning: assigning dictionary literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:759:15: warning: assigning array literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:760:15: warning: assigning block literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:761:15: warning: assigning numeric literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:762:15: warning: assigning numeric literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:763:15: warning: assigning boxed expression to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:766:7: warning: assigning dictionary literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:767:7: warning: assigning array literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:768:7: warning: assigning block literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:769:7: warning: assigning numeric literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:770:7: warning: assigning numeric literal to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc.m:771:7: warning: assigning boxed expression to a weak variable; object will be released after assignment [-Warc-unsafe-retained-assign]"}
}
},
},
["warn_arc_object_memaccess"]={
["warn_arc_object_memaccess"]={
[c]="... this A call is a pointer to ownership-qualified type B [-Warc-non-pod-memaccess]",
[f]="... this A call is a pointer to ownership-qualified type B [-Warc-non-pod-memaccess]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={pc,"arc-non-pod-memaccess"},
[r]={Dc,"arc-non-pod-memaccess"},
[q]="arc-non-pod-memaccess",
[q]="arc-non-pod-memaccess",
[h]="%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2",
[d]="%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2",
[b]=t,
[e]=u,
[g]="(?:destination for|source of) this (.*?) call is a pointer to ownership\\-qualified type (.*?)",
[a]="(?:destination for|source of) this (.*?) call is a pointer to ownership\\-qualified type (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-non\\-pod\\-memaccess[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-non\\-pod\\-memaccess[^\\]]*\\]",
[e]=hc,
[h]=qc,
[i]={Ec,1308178962,sc},
[i]={Nc,1308178962,Cc},
[j]={{F,12580,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_arc_object_memaccess) << ArgIdx << FnName << PointeeTy << Call->getCallee()->getSourceRange());"}}
[j]={{F,12580,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_arc_object_memaccess) << ArgIdx << FnName << PointeeTy << Call->getCallee()->getSourceRange());"}},
[k]={
["clang/test/SemaObjC/arc-non-pod-memaccess.m"]={"clang/test/SemaObjC/arc-non-pod-memaccess.m:24:10: warning: destination for this \'memcpy\' call is a pointer to ownership-qualified type \'__strong id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:26:10: warning: destination for this \'memcpy\' call is a pointer to ownership-qualified type \'__weak id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:28:10: warning: destination for this \'memcpy\' call is a pointer to ownership-qualified type \'__autoreleasing id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:32:15: warning: source of this \'memcpy\' call is a pointer to ownership-qualified type \'__strong id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:34:15: warning: source of this \'memcpy\' call is a pointer to ownership-qualified type \'__weak id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:36:15: warning: source of this \'memcpy\' call is a pointer to ownership-qualified type \'__autoreleasing id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:40:11: warning: destination for this \'memmove\' call is a pointer to ownership-qualified type \'__strong id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:42:11: warning: destination for this \'memmove\' call is a pointer to ownership-qualified type \'__weak id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:44:11: warning: destination for this \'memmove\' call is a pointer to ownership-qualified type \'__autoreleasing id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:48:16: warning: source of this \'memmove\' call is a pointer to ownership-qualified type \'__strong id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:50:16: warning: source of this \'memmove\' call is a pointer to ownership-qualified type \'__weak id\' [-Warc-non-pod-memaccess]","clang/test/SemaObjC/arc-non-pod-memaccess.m:52:16: warning: source of this \'memmove\' call is a pointer to ownership-qualified type \'__autoreleasing id\' [-Warc-non-pod-memaccess]"}
}
},
},
["warn_arc_perform_selector_leaks"]={
["warn_arc_perform_selector_leaks"]={
[c]="performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leaks]",
[f]="performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leaks]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"arc-performSelector-leaks"},
[r]={"arc-performSelector-leaks"},
[q]="arc-performSelector-leaks",
[q]="arc-performSelector-leaks",
[h]="performSelector may cause a leak because its selector is unknown",
[d]="performSelector may cause a leak because its selector is unknown",
[b]=t,
[e]=u,
[g]="performSelector may cause a leak because its selector is unknown",
[a]="performSelector may cause a leak because its selector is unknown",
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-performSelector\\-leaks[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-performSelector\\-leaks[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors"},
[i]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors"},
[j]={{nb,3316,"/// 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        } else {\n          Diag(SelLoc, diag::warn_arc_perform_selector_leaks);"}}
[j]={{sb,3316,"/// 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        } else {\n          Diag(SelLoc, diag::warn_arc_perform_selector_leaks);"}},
[k]={
["clang/test/SemaObjC/arc-peformselector.m"]={"clang/test/SemaObjC/arc-peformselector.m:32:16: warning: performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leaks]"}
}
},
},
["warn_arc_possible_repeated_use_of_weak"]={
["warn_arc_possible_repeated_use_of_weak"]={
[c]="weak ... A may be accessed multiple times in this ... and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]",
[f]="weak ... A may be accessed multiple times in this ... and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"arc-maybe-repeated-use-of-weak","arc-repeated-use-of-weak"},
[r]={"arc-maybe-repeated-use-of-weak","arc-repeated-use-of-weak"},
[q]="arc-maybe-repeated-use-of-weak",
[q]="arc-maybe-repeated-use-of-weak",
[h]="weak %select{variable|property|implicit property|instance variable}0 %1 may be accessed multiple times in this %select{function|method|block|lambda}2 and may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[d]="weak %select{variable|property|implicit property|instance variable}0 %1 may be accessed multiple times in this %select{function|method|block|lambda}2 and may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[b]=t,
[e]=u,
[g]="weak (?:variable|property|implicit property|instance variable) (.*?) may be accessed multiple times in this (?:function|method|block|lambda) and may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[a]="weak (?:variable|property|implicit property|instance variable) (.*?) may be accessed multiple times in this (?:function|method|block|lambda) and may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-maybe\\-repeated\\-use\\-of\\-weak[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-maybe\\-repeated\\-use\\-of\\-weak[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[j]={{I,1472,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n    else\n      DiagKind = diag::warn_arc_possible_repeated_use_of_weak;"}}
[j]={{J,1472,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n    else\n      DiagKind = diag::warn_arc_possible_repeated_use_of_weak;"}},
[k]={
["clang/test/SemaObjC/arc-repeated-weak.mm"]={"clang/test/SemaObjC/arc-repeated-weak.mm:67:7: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:72:7: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:386:9: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:413:7: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:420:7: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:471:7: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:475:7: warning: weak property \'weakProp\' may be accessed multiple times in this function and may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-maybe-repeated-use-of-weak]"}
}
},
},
["warn_arc_repeated_use_of_weak"]={
["warn_arc_repeated_use_of_weak"]={
[c]="weak ... A is accessed multiple times in this ... but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]",
[f]="weak ... A is accessed multiple times in this ... but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"arc-repeated-use-of-weak"},
[r]={"arc-repeated-use-of-weak"},
[q]="arc-repeated-use-of-weak",
[q]="arc-repeated-use-of-weak",
[h]="weak %select{variable|property|implicit property|instance variable}0 %1 is accessed multiple times in this %select{function|method|block|lambda}2 but may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[d]="weak %select{variable|property|implicit property|instance variable}0 %1 is accessed multiple times in this %select{function|method|block|lambda}2 but may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[b]=t,
[e]=u,
[g]="weak (?:variable|property|implicit property|instance variable) (.*?) is accessed multiple times in this (?:function|method|block|lambda) but may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[a]="weak (?:variable|property|implicit property|instance variable) (.*?) is accessed multiple times in this (?:function|method|block|lambda) but may be unpredictably set to nil; assign to a strong variable to keep the object alive",
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-repeated\\-use\\-of\\-weak[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-repeated\\-use\\-of\\-weak[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[j]={{I,1470,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n      DiagKind = diag::warn_arc_repeated_use_of_weak;"},{I,2675,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (S.getLangOpts().ObjCWeak && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, D->getBeginLoc()))"},{F,17797,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (LT == Qualifiers::OCL_Weak) {\n    if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{v,13379,"/// 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->isInvalidDecl()) {\n    // It is safe to assign a weak reference into a strong variable.\n    // Although this code can still have problems:\n    //  id x = self.weakProp;\n    //  id y = self.weakProp;\n    // we do not warn to warn spuriously when \'x\' and \'y\' are on separate\n    // paths through the function. This should be revisited if\n    // -Wrepeated-use-of-weak is made flow-sensitive.\n    if (FunctionScopeInfo *FSI = getCurFunction())\n      if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc()))"},{C,2213,"/// BuildDeclRefExpr - Build an expression that references a\n/// declaration that does not require a closure capture.\nDeclRefExpr *Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, const DeclarationNameInfo &NameInfo, NestedNameSpecifierLoc NNS, NamedDecl *FoundD, SourceLocation TemplateKWLoc, const TemplateArgumentListInfo *TemplateArgs) {\n  if (getLangOpts().ObjCWeak && isa<VarDecl>(D) && Ty.getObjCLifetime() == Qualifiers::OCL_Weak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, E->getBeginLoc()))"},{C,3049,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n    if (!isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{C,14631,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  if (CompoundType.isNull()) {\n    if (ConvTy == Compatible) {\n      if (LHSType.getObjCLifetime() == Qualifiers::OCL_Strong || LHSType.isNonWeakInMRRWithObjCWeak(Context)) {\n        if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RHS.get()->getBeginLoc()))"},{"clang/lib/Sema/SemaExprMember.cpp",1483,"/// 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 (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (!S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, MemberLoc))"},{nb,3389,"/// 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 (getLangOpts().ObjCWeak) {\n    if (!isImplicit && Method) {\n      if (const ObjCPropertyDecl *Prop = Method->findPropertyDecl()) {\n        if (IsWeak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc))"},{Db,856,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n  // As a special case, if the method returns \'id\', try to get\n  // a better type from the property.\n  if (RefExpr->isExplicitProperty() && result.get()->isPRValue()) {\n    if (propType.getObjCLifetime() == Qualifiers::OCL_Weak && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RefExpr->getLocation()))"},{Db,975,"ExprResult ObjCPropertyOpBuilder::complete(Expr *SyntacticForm) {\n  if (isWeakProperty() && !S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, SyntacticForm->getBeginLoc()))"}}
[j]={{J,1470,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n      DiagKind = diag::warn_arc_repeated_use_of_weak;"},{J,2675,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (S.getLangOpts().ObjCWeak && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, D->getBeginLoc()))"},{F,17797,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (LT == Qualifiers::OCL_Weak) {\n    if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{w,13379,"/// 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->isInvalidDecl()) {\n    // It is safe to assign a weak reference into a strong variable.\n    // Although this code can still have problems:\n    //  id x = self.weakProp;\n    //  id y = self.weakProp;\n    // we do not warn to warn spuriously when \'x\' and \'y\' are on separate\n    // paths through the function. This should be revisited if\n    // -Wrepeated-use-of-weak is made flow-sensitive.\n    if (FunctionScopeInfo *FSI = getCurFunction())\n      if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc()))"},{D,2213,"/// BuildDeclRefExpr - Build an expression that references a\n/// declaration that does not require a closure capture.\nDeclRefExpr *Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, const DeclarationNameInfo &NameInfo, NestedNameSpecifierLoc NNS, NamedDecl *FoundD, SourceLocation TemplateKWLoc, const TemplateArgumentListInfo *TemplateArgs) {\n  if (getLangOpts().ObjCWeak && isa<VarDecl>(D) && Ty.getObjCLifetime() == Qualifiers::OCL_Weak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, E->getBeginLoc()))"},{D,3049,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n    if (!isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{D,14631,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  if (CompoundType.isNull()) {\n    if (ConvTy == Compatible) {\n      if (LHSType.getObjCLifetime() == Qualifiers::OCL_Strong || LHSType.isNonWeakInMRRWithObjCWeak(Context)) {\n        if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RHS.get()->getBeginLoc()))"},{"clang/lib/Sema/SemaExprMember.cpp",1483,"/// 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 (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (!S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, MemberLoc))"},{sb,3389,"/// 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 (getLangOpts().ObjCWeak) {\n    if (!isImplicit && Method) {\n      if (const ObjCPropertyDecl *Prop = Method->findPropertyDecl()) {\n        if (IsWeak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc))"},{Lb,856,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n  // As a special case, if the method returns \'id\', try to get\n  // a better type from the property.\n  if (RefExpr->isExplicitProperty() && result.get()->isPRValue()) {\n    if (propType.getObjCLifetime() == Qualifiers::OCL_Weak && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RefExpr->getLocation()))"},{Lb,975,"ExprResult ObjCPropertyOpBuilder::complete(Expr *SyntacticForm) {\n  if (isWeakProperty() && !S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, SyntacticForm->getBeginLoc()))"}},
[k]={
["clang/test/SemaObjC/arc-repeated-weak.mm"]={"clang/test/SemaObjC/arc-repeated-weak.mm:23:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:58:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:77:7: warning: weak implicit property \'implicitProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:82:7: warning: weak implicit property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:93:7: warning: weak instance variable \'weakIvar\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:99:7: warning: weak variable \'a\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:104:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:115:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:119:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:122:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:129:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:135:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:140:7: warning: weak instance variable \'weakIvar\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:146:7: warning: weak variable \'a\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:169:9: warning: weak property \'weakProp\' is accessed multiple times in this block but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:212:8: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:219:10: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:226:10: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:233:10: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:240:10: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:248:10: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:257:9: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:274:9: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:282:9: warning: weak variable \'a\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:311:7: warning: weak property \'weakProp\' is accessed multiple times in this method but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:316:7: warning: weak instance variable \'weakIvar\' is accessed multiple times in this method but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:321:7: warning: weak property \'weakProp\' is accessed multiple times in this method but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:324:7: warning: weak property \'weakProp\' is accessed multiple times in this method but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:327:7: warning: weak instance variable \'weakIvar\' is accessed multiple times in this method but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:375:9: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:402:7: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]","clang/test/SemaObjC/arc-repeated-weak.mm:407:9: warning: weak property \'weakProp\' is accessed multiple times in this function but may be unpredictably set to nil; assign to a strong variable to keep the object alive [-Warc-repeated-use-of-weak]"}
}
},
},
["warn_arc_retain_cycle"]={
["warn_arc_retain_cycle"]={
[c]="capturing A strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]",
[f]="capturing A strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={pc,"arc-retain-cycles"},
[r]={Dc,"arc-retain-cycles"},
[q]="arc-retain-cycles",
[q]="arc-retain-cycles",
[h]="capturing %0 strongly in this block is likely to lead to a retain cycle",
[d]="capturing %0 strongly in this block is likely to lead to a retain cycle",
[b]=t,
[e]=u,
[g]="capturing (.*?) strongly in this block is likely to lead to a retain cycle",
[a]="capturing (.*?) strongly in this block is likely to lead to a retain cycle",
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-retain\\-cycles[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-retain\\-cycles[^\\]]*\\]",
[e]="ARC Retain Cycle",
[h]="ARC Retain Cycle",
[i]={Ec,1308178962,sc},
[i]={Nc,1308178962,Cc},
[j]={{F,17473,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n  S.Diag(capturer->getExprLoc(), diag::warn_arc_retain_cycle) << owner.Variable << capturer->getSourceRange();"}}
[j]={{F,17473,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n  S.Diag(capturer->getExprLoc(), diag::warn_arc_retain_cycle) << owner.Variable << capturer->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/warn-retain-cycle.m"]={"clang/test/SemaObjC/warn-retain-cycle.m:12:12: warning: capturing \'x\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:14:12: warning: capturing \'x\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:17:12: warning: capturing \'x\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:31:22: warning: capturing \'x\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:48:31: warning: capturing \'x\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:49:30: warning: capturing \'x\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:63:33: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:69:28: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:71:31: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:74:28: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:81:28: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:94:18: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:126:19: warning: capturing \'self\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:149:5: warning: capturing \'b1\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:154:5: warning: capturing \'b2\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:170:6: warning: capturing \'obj\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]","clang/test/SemaObjC/warn-retain-cycle.m:174:6: warning: capturing \'obj\' strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]"}
}
},
},
["warn_arc_retained_assign"]={
["warn_arc_retained_assign"]={
[c]="assigning retained object to ... ...; object will be released after assignment [-Warc-unsafe-retained-assign]",
[f]="assigning retained object to ... ...; object will be released after assignment [-Warc-unsafe-retained-assign]",
[d]=s,
[f]=r,
[p]={pc,Yb},
[q]=Yb,
[h]="assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment",
[b]=t,
[b]=t,
[g]="assigning retained object to (?:weak|unsafe_unretained) (?:property|variable); object will be released after assignment",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]",
[r]={Dc,wc},
[e]=hc,
[q]=wc,
[i]={Ec,1308178962,sc},
[d]="assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment",
[j]={{F,17749,"static bool checkUnsafeAssignObject(Sema &S, SourceLocation Loc, Qualifiers::ObjCLifetime LT, Expr *RHS, bool isProperty) {\n  // Strip off any implicit cast added to get to the one ARC-specific.\n  while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n    if (cast->getCastKind() == CK_ARCConsumeObject) {\n      S.Diag(Loc, diag::warn_arc_retained_assign) << (LT == Qualifiers::OCL_ExplicitNone) << (isProperty ? 0 : 1) << RHS->getSourceRange();"}}
[e]=u,
[a]="assigning retained object to (?:weak|unsafe_unretained) (?:property|variable); object will be released after assignment",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]",
[h]=qc,
[i]={Nc,1308178962,Cc},
[j]={{F,17749,"static bool checkUnsafeAssignObject(Sema &S, SourceLocation Loc, Qualifiers::ObjCLifetime LT, Expr *RHS, bool isProperty) {\n  // Strip off any implicit cast added to get to the one ARC-specific.\n  while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n    if (cast->getCastKind() == CK_ARCConsumeObject) {\n      S.Diag(Loc, diag::warn_arc_retained_assign) << (LT == Qualifiers::OCL_ExplicitNone) << (isProperty ? 0 : 1) << RHS->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/arc-unsafe-assigns.m"]={"clang/test/SemaObjC/arc-unsafe-assigns.m:25:21: warning: assigning retained object to unsafe_unretained variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:27:21: warning: assigning retained object to unsafe_unretained variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:30:14: warning: assigning retained object to unsafe_unretained variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:31:14: warning: assigning retained object to unsafe_unretained variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:39:14: warning: assigning retained object to unsafe_unretained variable; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:40:14: warning: assigning retained object to unsafe_unretained variable; object will be released after assignment [-Warc-unsafe-retained-assign]"}
}
},
},
["warn_arc_retained_property_assign"]={
["warn_arc_retained_property_assign"]={
[c]="assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]",
[f]="assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]",
[d]=s,
[f]=r,
[p]={pc,Yb},
[q]=Yb,
[h]="assigning retained object to unsafe property; object will be released after assignment",
[b]=t,
[b]=t,
[g]="assigning retained object to unsafe property; object will be released after assignment",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]",
[r]={Dc,wc},
[e]=hc,
[q]=wc,
[d]="assigning retained object to unsafe property; object will be released after assignment",
[e]=u,
[a]="assigning retained object to unsafe property; object will be released after assignment",
[g]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]",
[h]=qc,
[i]={"5f98da0ea2bb",1308939934,"objc-arc: Check on a variety of unsafe assignment of retained "},
[i]={"5f98da0ea2bb",1308939934,"objc-arc: Check on a variety of unsafe assignment of retained "},
[j]={{F,17827,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (PRE) {\n    if (Attributes & ObjCPropertyAttribute::kind_assign) {\n      while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n        if (cast->getCastKind() == CK_ARCConsumeObject) {\n          Diag(Loc, diag::warn_arc_retained_property_assign) << RHS->getSourceRange();"}}
[j]={{F,17827,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (PRE) {\n    if (Attributes & ObjCPropertyAttribute::kind_assign) {\n      while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n        if (cast->getCastKind() == CK_ARCConsumeObject) {\n          Diag(Loc, diag::warn_arc_retained_property_assign) << RHS->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/arc-unsafe-assigns.m"]={"clang/test/SemaObjC/arc-unsafe-assigns.m:24:20: warning: assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:26:20: warning: assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]","clang/test/SemaObjC/arc-unsafe-assigns.m:36:17: warning: assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]"}
}
},
},
["warn_arc_strong_pointer_objc_pointer"]={
["warn_arc_strong_pointer_objc_pointer"]={
[c]="method parameter of type A with no explicit ownership [-Wexplicit-ownership-type]",
[f]="method parameter of type A with no explicit ownership [-Wexplicit-ownership-type]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"explicit-ownership-type"},
[r]={"explicit-ownership-type"},
[q]="explicit-ownership-type",
[q]="explicit-ownership-type",
[h]="method parameter of type %0 with no explicit ownership",
[d]="method parameter of type %0 with no explicit ownership",
[b]=t,
[e]=u,
[g]="method parameter of type (.*?) with no explicit ownership",
[a]="method parameter of type (.*?) with no explicit ownership",
[a]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-ownership\\-type[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-ownership\\-type[^\\]]*\\]",
[e]="ARC Restrictions",
[h]="ARC Restrictions",
[i]={"cd278ffa2856",1346370962,"objective-C ARC: under -Wexplicit-ownership-type diagnose those"},
[i]={"cd278ffa2856",1346370962,"objective-C ARC: under -Wexplicit-ownership-type diagnose those"},
[j]={{B,403,"/// 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  // Introduce all of the other parameters into this scope.\n  for (auto *Param : MDecl->parameters()) {\n    if (!Param->isInvalidDecl() && getLangOpts().ObjCAutoRefCount && !HasExplicitOwnershipAttr(*this, Param))\n      Diag(Param->getLocation(), diag::warn_arc_strong_pointer_objc_pointer) << Param->getType();"}}
[j]={{C,403,"/// 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  // Introduce all of the other parameters into this scope.\n  for (auto *Param : MDecl->parameters()) {\n    if (!Param->isInvalidDecl() && getLangOpts().ObjCAutoRefCount && !HasExplicitOwnershipAttr(*this, Param))\n      Diag(Param->getLocation(), diag::warn_arc_strong_pointer_objc_pointer) << Param->getType();"}},
[k]={
["clang/test/SemaObjCXX/arc-objc-lifetime.mm"]={"clang/test/SemaObjCXX/arc-objc-lifetime.mm:50:50: warning: method parameter of type \'NSObject<P> *__autoreleasing &\' with no explicit ownership [-Wexplicit-ownership-type]","clang/test/SemaObjCXX/arc-objc-lifetime.mm:50:77: warning: method parameter of type \'__autoreleasing id<P> &\' with no explicit ownership [-Wexplicit-ownership-type]","clang/test/SemaObjCXX/arc-objc-lifetime.mm:53:26: warning: method parameter of type \'NSObject *__autoreleasing *\' with no explicit ownership [-Wexplicit-ownership-type]","clang/test/SemaObjCXX/arc-objc-lifetime.mm:53:38: warning: method parameter of type \'__autoreleasing id *\' with no explicit ownership [-Wexplicit-ownership-type]","clang/test/SemaObjCXX/arc-objc-lifetime.mm:56:23: warning: method parameter of type \'__autoreleasing T &\' (aka \'void (^__autoreleasing &)()\') with no explicit ownership [-Wexplicit-ownership-type]"}
}
},
},
["warn_arcmt_nsalloc_realloc"]={
["warn_arcmt_nsalloc_realloc"]={
[c]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC",
[f]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC",
[d]=s,
[f]=r,
[h]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC",
[b]=t,
[b]=t,
[g]="\\[rewriter\\] call returns pointer to GC managed memory; it will become unmanaged in ARC",
[c]=s,
[a]=ub,
[d]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC",
[e]=l,
[e]=u,
[a]="\\[rewriter\\] call returns pointer to GC managed memory; it will become unmanaged in ARC",
[g]=ub,
[h]=m,
[i]={"403a4f9b826d",1400539871,"Get ARCMT/GC-check-warn-nsalloc.m working"},
[i]={"403a4f9b826d",1400539871,"Get ARCMT/GC-check-warn-nsalloc.m working"},
[j]={{"clang/lib/ARCMigrate/ARCMT.cpp",319,"bool arcmt::checkForManualIssues(CompilerInvocation &origCI, const FrontendInputFile &Input, std::shared_ptr<PCHContainerOperations> PCHContainerOps, DiagnosticConsumer *DiagClient, bool emitPremigrationARCErrors, StringRef plistOut) {\n  if (!NoNSAllocReallocError)\n    Diags->setSeverity(diag::warn_arcmt_nsalloc_realloc, diag::Severity::Error, SourceLocation());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",41,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  bool VisitCallExpr(CallExpr *E) {\n    if (MigrateCtx.isGCOwnedNonObjC(E->getType())) {\n      TA.report(E->getBeginLoc(), diag::warn_arcmt_nsalloc_realloc, E->getSourceRange());"}}
[j]={{"clang/lib/ARCMigrate/ARCMT.cpp",319,"bool arcmt::checkForManualIssues(CompilerInvocation &origCI, const FrontendInputFile &Input, std::shared_ptr<PCHContainerOperations> PCHContainerOps, DiagnosticConsumer *DiagClient, bool emitPremigrationARCErrors, StringRef plistOut) {\n  if (!NoNSAllocReallocError)\n    Diags->setSeverity(diag::warn_arcmt_nsalloc_realloc, diag::Severity::Error, SourceLocation());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",41,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  bool VisitCallExpr(CallExpr *E) {\n    if (MigrateCtx.isGCOwnedNonObjC(E->getType())) {\n      TA.report(E->getBeginLoc(), diag::warn_arcmt_nsalloc_realloc, E->getSourceRange());"}},
[k]={
["clang/test/ARCMT/GC-check-warn-nsalloc.m"]={"clang/test/ARCMT/GC-check-warn-nsalloc.m:10:3: warning: [rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC"}
}
},
},
["warn_argument_invalid_range"]={
["warn_argument_invalid_range"]={
[c]="argument value A is outside the valid range [B, C] [-Wargument-outside-range]",
[f]="argument value A is outside the valid range [B, C] [-Wargument-outside-range]",
[d]=tb,
[b]=vb,
[f]=oc,
[c]=Gc,
[p]={"argument-outside-range"},
[r]={"argument-outside-range"},
[q]="argument-outside-range",
[q]="argument-outside-range",
[h]="argument value %0 is outside the valid range [%1, %2]",
[d]="argument value %0 is outside the valid range [%1, %2]",
[b]=lc,
[e]=Lc,
[g]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]",
[a]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]",
[a]=" \\[[^\\]]*\\-Wargument\\-outside\\-range[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Wargument\\-outside\\-range[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"16e6bc23a12e",1529624769,"[x86] Teach the builtin argument range check to allow invalid ranges in"},
[i]={"16e6bc23a12e",1529624769,"[x86] Teach the builtin argument range check to allow invalid ranges in"},
[j]={{F,8815,"/// 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    else\n      DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, PDiag(diag::warn_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange());"}}
[j]={{F,8815,"/// 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    else\n      DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, PDiag(diag::warn_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange());"}},
[k]={
["clang/test/Sema/builtins-x86.c"]={"clang/test/Sema/builtins-x86.c:25:10: error: argument value 32 is outside the valid range [0, 31] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:29:10: error: argument value 32 is outside the valid range [0, 31] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:33:10: error: argument value 32 is outside the valid range [0, 31] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:37:10: error: argument value 32 is outside the valid range [0, 31] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:41:10: error: argument value 32 is outside the valid range [0, 31] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:45:10: error: argument value 32 is outside the valid range [0, 31] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:49:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:53:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:57:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:61:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:65:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:69:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:73:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:77:10: error: argument value 8 is outside the valid range [0, 7] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:114:3: error: argument value 1 is outside the valid range [2, 3] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:118:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:122:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:126:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:130:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:134:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:138:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:142:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:146:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:150:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:154:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:158:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:162:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:166:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:170:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:174:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:178:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:182:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]","clang/test/Sema/builtins-x86.c:186:10: error: argument value 1024 is outside the valid range [0, 255] [-Wargument-outside-range]"}
}
},
},
["warn_argument_undefined_behaviour"]={
["warn_argument_undefined_behaviour"]={
[c]="argument value A will result in undefined behaviour [-Wargument-undefined-behaviour]",
[f]="argument value A will result in undefined behaviour [-Wargument-undefined-behaviour]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"argument-undefined-behaviour"},
[r]={"argument-undefined-behaviour"},
[q]="argument-undefined-behaviour",
[q]="argument-undefined-behaviour",
[h]="argument value %0 will result in undefined behaviour",
[d]="argument value %0 will result in undefined behaviour",
[b]=t,
[e]=u,
[g]="argument value (.*?) will result in undefined behaviour",
[a]="argument value (.*?) will result in undefined behaviour",
[a]=" \\[(?:\\-Werror,)?\\-Wargument\\-undefined\\-behaviour[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wargument\\-undefined\\-behaviour[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Gb,1615397021,Cb},
[i]={Mb,1615397021,Ib},
[j]={{F,4324,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_addex: {\n    if (ArgValue != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_argument_undefined_behaviour) << ArgValue;"}}
[j]={{F,4324,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_addex: {\n    if (ArgValue != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_argument_undefined_behaviour) << ArgValue;"}},
[k]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-warning.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-warning.c:9:19: warning: argument value 1 will result in undefined behaviour [-Wargument-undefined-behaviour]","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-warning.c:10:29: warning: argument value 3 will result in undefined behaviour [-Wargument-undefined-behaviour]"}
}
},
},
["warn_arith_conv_enum_float"]={
["warn_arith_conv_enum_float"]={
[c]="... ... type A with ... type B [-Wenum-float-conversion]",
[f]="... ... type A with ... type B [-Wenum-float-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={Bb,fc,"enum-float-conversion",Eb},
[r]={Kb,tc,"enum-float-conversion",Jb},
[q]="enum-float-conversion",
[q]="enum-float-conversion",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 %select{floating-point|enumeration}1 type %2 %plural{2:with|4:from|:and}0 %select{enumeration|floating-point}1 type %3",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 %select{floating-point|enumeration}1 type %2 %plural{2:with|4:from|:and}0 %select{enumeration|floating-point}1 type %3",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) (?:floating\\-point|enumeration) type (.*?) (?:with|from|and) (?:enumeration|floating\\-point) type (.*?)",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) (?:floating\\-point|enumeration) type (.*?) (?:with|from|and) (?:enumeration|floating\\-point) type (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-float\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wenum\\-float\\-conversion[^\\]]*\\]",
[e]=Vb,
[h]=hc,
[i]={kc,1575504770,mc},
[i]={zc,1575504770,Ac},
[j]={{C,1504,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n    S.Diag(Loc, S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_enum_float_cxx20 : diag::warn_arith_conv_enum_float) << LHS->getSourceRange() << RHS->getSourceRange() << (int)ACK << LEnum << L << R;"}}
[j]={{D,1504,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n    S.Diag(Loc, S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_enum_float_cxx20 : diag::warn_arith_conv_enum_float) << LHS->getSourceRange() << RHS->getSourceRange() << (int)ACK << LEnum << L << R;"}},
[k]={
[Uc]={"clang/test/CXX/expr/expr.arith.conv/p2.cpp:13:11: warning: arithmetic between enumeration type \'enum E1\' and floating-point type \'double\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:14:10: warning: arithmetic between floating-point type \'double\' and enumeration type \'enum E1\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:18:11: warning: arithmetic between enumeration type \'enum E1\' and floating-point type \'double\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:19:10: warning: arithmetic between floating-point type \'double\' and enumeration type \'enum E1\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:30:11: warning: comparison of enumeration type \'enum E1\' with floating-point type \'double\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:31:10: warning: comparison of floating-point type \'double\' with enumeration type \'enum E1\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:35:11: warning: comparison of enumeration type \'enum E1\' with floating-point type \'double\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:36:10: warning: comparison of floating-point type \'double\' with enumeration type \'enum E1\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:40:10: warning: conditional expression between enumeration type \'enum E1\' and floating-point type \'double\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:41:10: warning: conditional expression between floating-point type \'double\' and enumeration type \'enum E1\' [-Wenum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:51:10: warning: compound assignment of floating-point type \'double\' from enumeration type \'enum E1\' [-Wenum-float-conversion]"}
}
},
},
["warn_arith_conv_enum_float_cxx20"]={
["warn_arith_conv_enum_float_cxx20"]={
[c]="... ... type A with ... type B is deprecated [-Wdeprecated-enum-float-conversion]",
[f]="... ... type A with ... type B is deprecated [-Wdeprecated-enum-float-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={Bb,Ab,"deprecated-enum-float-conversion",fc,"enum-float-conversion",Eb},
[r]={Kb,Cb,"deprecated-enum-float-conversion",tc,"enum-float-conversion",Jb},
[q]="deprecated-enum-float-conversion",
[q]="deprecated-enum-float-conversion",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 %select{floating-point|enumeration}1 type %2 %plural{2:with|4:from|:and}0 %select{enumeration|floating-point}1 type %3 is deprecated",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 %select{floating-point|enumeration}1 type %2 %plural{2:with|4:from|:and}0 %select{enumeration|floating-point}1 type %3 is deprecated",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) (?:floating\\-point|enumeration) type (.*?) (?:with|from|and) (?:enumeration|floating\\-point) type (.*?) is deprecated",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) (?:floating\\-point|enumeration) type (.*?) (?:with|from|and) (?:enumeration|floating\\-point) type (.*?) is deprecated",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-float\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-float\\-conversion[^\\]]*\\]",
[e]=Ib,
[h]=Wb,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,1503,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n    S.Diag(Loc, S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_enum_float_cxx20 : diag::warn_arith_conv_enum_float) << LHS->getSourceRange() << RHS->getSourceRange() << (int)ACK << LEnum << L << R;"}}
[j]={{D,1503,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n    S.Diag(Loc, S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_enum_float_cxx20 : diag::warn_arith_conv_enum_float) << LHS->getSourceRange() << RHS->getSourceRange() << (int)ACK << LEnum << L << R;"}},
[k]={
[Uc]={"clang/test/CXX/expr/expr.arith.conv/p2.cpp:13:11: warning: arithmetic between enumeration type \'enum E1\' and floating-point type \'double\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:14:10: warning: arithmetic between floating-point type \'double\' and enumeration type \'enum E1\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:18:11: warning: arithmetic between enumeration type \'enum E1\' and floating-point type \'double\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:19:10: warning: arithmetic between floating-point type \'double\' and enumeration type \'enum E1\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:30:11: warning: comparison of enumeration type \'enum E1\' with floating-point type \'double\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:31:10: warning: comparison of floating-point type \'double\' with enumeration type \'enum E1\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:35:11: warning: comparison of enumeration type \'enum E1\' with floating-point type \'double\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:36:10: warning: comparison of floating-point type \'double\' with enumeration type \'enum E1\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:40:10: warning: conditional expression between enumeration type \'enum E1\' and floating-point type \'double\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:41:10: warning: conditional expression between floating-point type \'double\' and enumeration type \'enum E1\' is deprecated [-Wdeprecated-enum-float-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:51:10: warning: compound assignment of floating-point type \'double\' from enumeration type \'enum E1\' is deprecated [-Wdeprecated-enum-float-conversion]"}
}
},
},
["warn_arith_conv_mixed_anon_enum_types"]={
["warn_arith_conv_mixed_anon_enum_types"]={
[c]="... different enumeration types (A and B) [-Wanon-enum-enum-conversion]",
[f]="... different enumeration types (A and B) [-Wanon-enum-enum-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"anon-enum-enum-conversion"},
[r]={"anon-enum-enum-conversion"},
[q]="anon-enum-enum-conversion",
[q]="anon-enum-enum-conversion",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wanon\\-enum\\-enum\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wanon\\-enum\\-enum\\-conversion[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={kc,1575504770,mc},
[i]={zc,1575504770,Ac},
[j]={{C,1517,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_anon_enum_types_cxx20 : diag::warn_arith_conv_mixed_anon_enum_types;"}}
[j]={{D,1517,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_anon_enum_types_cxx20 : diag::warn_arith_conv_mixed_anon_enum_types;"}}
},
},
["warn_arith_conv_mixed_anon_enum_types_cxx20"]={
["warn_arith_conv_mixed_anon_enum_types_cxx20"]={
[c]="... different enumeration types (A and B) is deprecated [-Wdeprecated-anon-enum-enum-conversion]",
[f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-anon-enum-enum-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"anon-enum-enum-conversion",Ab,"deprecated-anon-enum-enum-conversion"},
[r]={"anon-enum-enum-conversion",Cb,"deprecated-anon-enum-enum-conversion"},
[q]="deprecated-anon-enum-enum-conversion",
[q]="deprecated-anon-enum-enum-conversion",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-anon\\-enum\\-enum\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-anon\\-enum\\-enum\\-conversion[^\\]]*\\]",
[e]=Ib,
[h]=Wb,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,1516,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_anon_enum_types_cxx20 : diag::warn_arith_conv_mixed_anon_enum_types;"}}
[j]={{D,1516,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_anon_enum_types_cxx20 : diag::warn_arith_conv_mixed_anon_enum_types;"}}
},
},
["warn_arith_conv_mixed_enum_types"]={
["warn_arith_conv_mixed_enum_types"]={
[c]="... different enumeration types (A and B) [-Wenum-enum-conversion]",
[f]="... different enumeration types (A and B) [-Wenum-enum-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={Bb,fc,"enum-enum-conversion",Eb},
[r]={Kb,tc,"enum-enum-conversion",Jb},
[q]="enum-enum-conversion",
[q]="enum-enum-conversion",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-enum\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wenum\\-enum\\-conversion[^\\]]*\\]",
[e]=Vb,
[h]=hc,
[i]={kc,1575504770,mc},
[i]={zc,1575504770,Ac},
[j]={{C,1533,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n    } else {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}}
[j]={{D,1533,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n    } else {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}},
[k]={
[Uc]={"clang/test/CXX/expr/expr.arith.conv/p2.cpp:12:11: warning: arithmetic between different enumeration types (\'enum E1\' and \'enum E2\') [-Wenum-enum-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:17:11: warning: arithmetic between different enumeration types (\'enum E1\' and \'enum E2\') [-Wenum-enum-conversion]"}
}
},
},
["warn_arith_conv_mixed_enum_types_cxx20"]={
["warn_arith_conv_mixed_enum_types_cxx20"]={
[c]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-enum-conversion]",
[f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-enum-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={Bb,Ab,"deprecated-enum-enum-conversion",fc,"enum-enum-conversion",Eb},
[r]={Kb,Cb,"deprecated-enum-enum-conversion",tc,"enum-enum-conversion",Jb},
[q]="deprecated-enum-enum-conversion",
[q]="deprecated-enum-enum-conversion",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-enum\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-enum\\-conversion[^\\]]*\\]",
[e]=Ib,
[h]=Wb,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,1532,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n    } else {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}}
[j]={{D,1532,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n    } else {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}},
[k]={
[Uc]={"clang/test/CXX/expr/expr.arith.conv/p2.cpp:12:11: warning: arithmetic between different enumeration types (\'enum E1\' and \'enum E2\') is deprecated [-Wdeprecated-enum-enum-conversion]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:17:11: warning: arithmetic between different enumeration types (\'enum E1\' and \'enum E2\') is deprecated [-Wdeprecated-enum-enum-conversion]"}
}
},
},
["warn_arm_interrupt_calling_convention"]={
["warn_arm_interrupt_calling_convention"]={
[c]="call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]",
[f]="call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]",
[d]=s,
[f]=r,
[p]={l,T,Ac},
[q]=Ac,
[h]="call to function without interrupt attribute could clobber interruptee\'s VFP registers",
[b]=t,
[b]=t,
[g]="call to function without interrupt attribute could clobber interruptee\'s VFP registers",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wextra[^\\]]*\\]",
[r]={m,U,Mc},
[e]=k,
[q]=Mc,
[d]="call to function without interrupt attribute could clobber interruptee\'s VFP registers",
[e]=u,
[a]="call to function without interrupt attribute could clobber interruptee\'s VFP registers",
[g]=" \\[(?:\\-Werror,)?\\-Wextra[^\\]]*\\]",
[h]=l,
[i]={"8277c41a899b",1484753471,"Warn when calling a non interrupt function from an interrupt on ARM"},
[i]={"8277c41a899b",1484753471,"Warn when calling a non interrupt function from an interrupt on ARM"},
[j]={{C,7358,"/// 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  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<ARMInterruptAttr>()) {\n      if (VFP && (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())) {\n        Diag(Fn->getExprLoc(), diag::warn_arm_interrupt_calling_convention);"}}
[j]={{D,7358,"/// 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  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<ARMInterruptAttr>()) {\n      if (VFP && (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())) {\n        Diag(Fn->getExprLoc(), diag::warn_arm_interrupt_calling_convention);"}},
[k]={
["clang/test/Sema/arm-interrupt-attr.c"]={"clang/test/Sema/arm-interrupt-attr.c:34:3: warning: call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]","clang/test/Sema/arm-interrupt-attr.c:40:3: warning: call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]"}
}
},
},
["warn_array_index_exceeds_bounds"]={
["warn_array_index_exceeds_bounds"]={
[c]="array index A is past the end of the array (that has type B...) [-Warray-bounds]",
[f]="array index A is past the end of the array (that has type B...) [-Warray-bounds]",
[d]=s,
[f]=r,
[p]={ac},
[q]=ac,
[h]="array index %0 is past the end of the array (that has type %1%select{|, cast to %3}2)",
[b]=t,
[b]=t,
[g]="array index (.*?) is past the end of the array \\(that has type (.*?)(?:|, cast to (.*?))\\)",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
[r]={ic},
[e]=k,
[q]=ic,
[d]="array index %0 is past the end of the array (that has type %1%select{|, cast to %3}2)",
[e]=u,
[a]="array index (.*?) is past the end of the array \\(that has type (.*?)(?:|, cast to (.*?))\\)",
[g]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
[h]=l,
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[j]={{F,17168,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n    unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}}
[j]={{F,17168,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n    unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}},
[k]={
["clang/test/SemaCXX/array-bounds-system-header.cpp"]={"clang/test/SemaCXX/array-bounds-system-header.cpp:6:15: warning: array index 3 is past the end of the array (that has type \'char[3]\') [-Warray-bounds]","clang/test/SemaCXX/array-bounds-system-header.cpp:8:7: warning: array index 3 is past the end of the array (that has type \'char[3]\') [-Warray-bounds]"}
}
},
},
["warn_array_index_exceeds_max_addressable_bounds"]={
["warn_array_index_exceeds_max_addressable_bounds"]={
[c]="array index A refers past the last possible element for an array in B-bit address space containing C-bit (D-byte) elements (max possible E elementF) [-Warray-bounds]",
[f]="array index A refers past the last possible element for an array in B-bit address space containing C-bit (D-byte) elements (max possible E elementF) [-Warray-bounds]",
[d]=s,
[f]=r,
[p]={ac},
[q]=ac,
[h]="array index %0 refers past the last possible element for an array in %1-bit address space containing %2-bit (%3-byte) elements (max possible %4 element%s5)",
[b]=t,
[b]=t,
[g]="array index (.*?) refers past the last possible element for an array in (.*?)\\-bit address space containing (.*?)\\-bit \\((.*?)\\-byte\\) elements \\(max possible (.*?) element(.*?)\\)",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
[r]={ic},
[e]=k,
[q]=ic,
[d]="array index %0 refers past the last possible element for an array in %1-bit address space containing %2-bit (%3-byte) elements (max possible %4 element%s5)",
[e]=u,
[a]="array index (.*?) refers past the last possible element for an array in (.*?)\\-bit address space containing (.*?)\\-bit \\((.*?)\\-byte\\) elements \\(max possible (.*?) element(.*?)\\)",
[g]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
[h]=l,
[i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays"},
[i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays"},
[j]={{F,17078,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}}
[j]={{F,17078,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}},
[k]={
["clang/test/Sema/const-eval.c"]={"clang/test/Sema/const-eval.c:148:20: warning: array index 18446744073709551615 refers past the last possible element for an array in 64-bit address space containing 64-bit (8-byte) elements (max possible 2305843009213693952 elements) [-Warray-bounds]"}
}
},
},
["warn_array_index_precedes_bounds"]={
["warn_array_index_precedes_bounds"]={
[c]="array index A is before the beginning of the array [-Warray-bounds]",
[f]="array index A is before the beginning of the array [-Warray-bounds]",
[d]=s,
[f]=r,
[p]={ac},
[q]=ac,
[h]="array index %0 is before the beginning of the array",
[b]=t,
[b]=t,
[g]="array index (.*?) is before the beginning of the array",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
[r]={ic},
[e]=k,
[q]=ic,
[d]="array index %0 is before the beginning of the array",
[e]=u,
[a]="array index (.*?) is before the beginning of the array",
[g]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
[h]=l,
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[j]={{F,17178,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n  } else {\n    unsigned DiagID = diag::warn_array_index_precedes_bounds;"}}
[j]={{F,17178,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n  } else {\n    unsigned DiagID = diag::warn_array_index_precedes_bounds;"}},
[k]={
["clang/test/SemaCXX/array-bounds.cpp"]={"clang/test/SemaCXX/array-bounds.cpp:16:10: warning: array index -1 is before the beginning of the array [-Warray-bounds]","clang/test/SemaCXX/array-bounds.cpp:300:41: warning: array index -1 is before the beginning of the array [-Warray-bounds]","clang/test/SemaCXX/array-bounds.cpp:307:14: warning: array index -1 is before the beginning of the array [-Warray-bounds]","clang/test/SemaCXX/array-bounds.cpp:307:14: warning: array index -1 is before the beginning of the array [-Warray-bounds]"}
}
},
},
["warn_asm_label_on_auto_decl"]={
["warn_asm_label_on_auto_decl"]={
[c]="ignored asm label \'A\' on automatic variable",
[f]="ignored asm label \'A\' on automatic variable",
[d]=s,
[f]=r,
[h]="ignored asm label \'%0\' on automatic variable",
[b]=t,
[b]=t,
[g]="ignored asm label \'(.*?)\' on automatic variable",
[c]=s,
[a]=ub,
[d]="ignored asm label \'%0\' on automatic variable",
[e]="Inline Assembly Issue",
[e]=u,
[a]="ignored asm label \'(.*?)\' on automatic variable",
[g]=ub,
[h]="Inline Assembly Issue",
[i]={"133922318641",1294759012,"Added warning about invalid register specification for local variables."},
[i]={"133922318641",1294759012,"Added warning about invalid register specification for local variables."},
[j]={{v,7939,"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_Auto:\n        Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;"}}
[j]={{w,7939,"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_Auto:\n        Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;"}},
[k]={
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:112:14: warning: ignored asm label \'a_asm\' on automatic variable","clang/test/Sema/asm.c:113:20: warning: ignored asm label \'aa_asm\' on automatic variable"}
}
},
},
["warn_asm_mismatched_size_modifier"]={
["warn_asm_mismatched_size_modifier"]={
[c]="value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]",
[f]="value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"asm","asm-operand-widths"},
[r]={"asm","asm-operand-widths"},
[q]="asm-operand-widths",
[q]="asm-operand-widths",
[h]="value size does not match register size specified by the constraint and modifier",
[d]="value size does not match register size specified by the constraint and modifier",
[b]=t,
[e]=u,
[g]="value size does not match register size specified by the constraint and modifier",
[a]="value size does not match register size specified by the constraint and modifier",
[a]=" \\[(?:\\-Werror,)?\\-Wasm\\-operand\\-widths[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wasm\\-operand\\-widths[^\\]]*\\]",
[e]="Inline Assembly Issue",
[h]="Inline Assembly Issue",
[i]={"9d1ee1175de3",1351207728,"Recommit Eric\'s code to validate ASM string\'s constraints and modifiers."},
[i]={"9d1ee1175de3",1351207728,"Recommit Eric\'s code to validate ASM string\'s constraints and modifiers."},
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",550,"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  // Validate constraints and modifiers.\n  for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n    if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n      targetDiag(Exprs[ConstraintIdx]->getBeginLoc(), diag::warn_asm_mismatched_size_modifier);"}}
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",550,"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  // Validate constraints and modifiers.\n  for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n    if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n      targetDiag(Exprs[ConstraintIdx]->getBeginLoc(), diag::warn_asm_mismatched_size_modifier);"}},
[k]={
["clang/test/Sema/arm64-inline-asm.c"]={"clang/test/Sema/arm64-inline-asm.c:8:33: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]"}
}
},
},
["warn_assume_aligned_too_great"]={
["warn_assume_aligned_too_great"]={
[c]="requested alignment must be A bytes or smaller; maximum alignment assumed [-Wbuiltin-assume-aligned-alignment]",
[f]="requested alignment must be A bytes or smaller; maximum alignment assumed [-Wbuiltin-assume-aligned-alignment]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"builtin-assume-aligned-alignment"},
[r]={"builtin-assume-aligned-alignment"},
[q]="builtin-assume-aligned-alignment",
[q]="builtin-assume-aligned-alignment",
[h]="requested alignment must be %0 bytes or smaller; maximum alignment assumed",
[d]="requested alignment must be %0 bytes or smaller; maximum alignment assumed",
[b]=t,
[e]=u,
[g]="requested alignment must be (.*?) bytes or smaller; maximum alignment assumed",
[a]="requested alignment must be (.*?) bytes or smaller; maximum alignment assumed",
[a]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-assume\\-aligned\\-alignment[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-assume\\-aligned\\-alignment[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{F,6745,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (I > Sema::MaximumAlignment)\n          Diag(Arg->getExprLoc(), diag::warn_assume_aligned_too_great) << Arg->getSourceRange() << Sema::MaximumAlignment;"},{F,8678,"/// 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 > Sema::MaximumAlignment)\n      Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great) << SecondArg->getSourceRange() << Sema::MaximumAlignment;"},{u,1717,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (*I > Sema::MaximumAlignment)\n      Diag(CI.getLoc(), diag::warn_assume_aligned_too_great) << CI.getRange() << Sema::MaximumAlignment;"}}
[j]={{F,6745,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (I > Sema::MaximumAlignment)\n          Diag(Arg->getExprLoc(), diag::warn_assume_aligned_too_great) << Arg->getSourceRange() << Sema::MaximumAlignment;"},{F,8678,"/// 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 > Sema::MaximumAlignment)\n      Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great) << SecondArg->getSourceRange() << Sema::MaximumAlignment;"},{v,1717,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (*I > Sema::MaximumAlignment)\n      Diag(CI.getLoc(), diag::warn_assume_aligned_too_great) << CI.getRange() << Sema::MaximumAlignment;"}},
[k]={
["clang/test/Sema/alloc-align-attr.c"]={"clang/test/Sema/alloc-align-attr.c:30:31: warning: requested alignment must be 4294967296 bytes or smaller; maximum alignment assumed [-Wbuiltin-assume-aligned-alignment]"}
}
},
},
["warn_assume_attribute_string_unknown"]={
["warn_assume_attribute_string_unknown"]={
[c]="unknown assumption string \'A\'; attribute is potentially ignored [-Wunknown-assumption]",
[f]="unknown assumption string \'A\'; attribute is potentially ignored [-Wunknown-assumption]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"unknown-assumption"},
[r]={"unknown-assumption"},
[q]="unknown-assumption",
[q]="unknown-assumption",
[h]="unknown assumption string \'%0\'; attribute is potentially ignored",
[d]="unknown assumption string \'%0\'; attribute is potentially ignored",
[b]=t,
[e]=u,
[g]="unknown assumption string \'(.*?)\'; attribute is potentially ignored",
[a]="unknown assumption string \'(.*?)\'; attribute is potentially ignored",
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-assumption[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-assumption[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={pb,1590001902,ob},
[i]={rb,1590001902,pb},
[j]={{u,1784,"/// Check if \\p AssumptionStr is a known assumption and warn if not.\nstatic void checkAssumptionAttr(Sema &S, SourceLocation Loc, StringRef AssumptionStr) {\n  if (!Suggestion.empty())\n  else\n    S.Diag(Loc, diag::warn_assume_attribute_string_unknown) << AssumptionStr;"}}
[j]={{v,1784,"/// Check if \\p AssumptionStr is a known assumption and warn if not.\nstatic void checkAssumptionAttr(Sema &S, SourceLocation Loc, StringRef AssumptionStr) {\n  if (!Suggestion.empty())\n  else\n    S.Diag(Loc, diag::warn_assume_attribute_string_unknown) << AssumptionStr;"}},
[k]={
["clang/test/Sema/attr-assume.c"]={"clang/test/Sema/attr-assume.c:6:37: warning: unknown assumption string \'QQQQ\'; attribute is potentially ignored [-Wunknown-assumption]"}
}
},
},
["warn_assume_attribute_string_unknown_suggested"]={
["warn_assume_attribute_string_unknown_suggested"]={
[c]="unknown assumption string \'A\' may be misspelled; attribute is potentially ignored, did you mean \'B\'? [-Wmisspelled-assumption]",
[f]="unknown assumption string \'A\' may be misspelled; attribute is potentially ignored, did you mean \'B\'? [-Wmisspelled-assumption]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"misspelled-assumption"},
[r]={"misspelled-assumption"},
[q]="misspelled-assumption",
[q]="misspelled-assumption",
[h]="unknown assumption string \'%0\' may be misspelled; attribute is potentially ignored, did you mean \'%1\'?",
[d]="unknown assumption string \'%0\' may be misspelled; attribute is potentially ignored, did you mean \'%1\'?",
[b]=t,
[e]=u,
[g]="unknown assumption string \'(.*?)\' may be misspelled; attribute is potentially ignored, did you mean \'(.*?)\'\\?",
[a]="unknown assumption string \'(.*?)\' may be misspelled; attribute is potentially ignored, did you mean \'(.*?)\'\\?",
[a]=" \\[(?:\\-Werror,)?\\-Wmisspelled\\-assumption[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wmisspelled\\-assumption[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={pb,1590001902,ob},
[i]={rb,1590001902,pb},
[j]={{u,1781,"/// Check if \\p AssumptionStr is a known assumption and warn if not.\nstatic void checkAssumptionAttr(Sema &S, SourceLocation Loc, StringRef AssumptionStr) {\n  if (!Suggestion.empty())\n    S.Diag(Loc, diag::warn_assume_attribute_string_unknown_suggested) << AssumptionStr << Suggestion;"}}
[j]={{v,1781,"/// Check if \\p AssumptionStr is a known assumption and warn if not.\nstatic void checkAssumptionAttr(Sema &S, SourceLocation Loc, StringRef AssumptionStr) {\n  if (!Suggestion.empty())\n    S.Diag(Loc, diag::warn_assume_attribute_string_unknown_suggested) << AssumptionStr << Suggestion;"}},
[k]={
["clang/test/Sema/attr-assume.c"]={"clang/test/Sema/attr-assume.c:8:37: warning: unknown assumption string \'omp_noopenmp\' may be misspelled; attribute is potentially ignored, did you mean \'omp_no_openmp\'? [-Wmisspelled-assumption]","clang/test/Sema/attr-assume.c:9:37: warning: unknown assumption string \'omp_no_openmp_routine\' may be misspelled; attribute is potentially ignored, did you mean \'omp_no_openmp_routines\'? [-Wmisspelled-assumption]","clang/test/Sema/attr-assume.c:10:37: warning: unknown assumption string \'omp_no_openmp1\' may be misspelled; attribute is potentially ignored, did you mean \'omp_no_openmp\'? [-Wmisspelled-assumption]"}
}
},
},
["warn_assume_side_effects"]={
["warn_assume_side_effects"]={
[c]="the argument to A has side effects that will be discarded [-Wassume]",
[f]="the argument to A has side effects that will be discarded [-Wassume]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"assume"},
[r]={"assume"},
[q]="assume",
[q]="assume",
[h]="the argument to %0 has side effects that will be discarded",
[d]="the argument to %0 has side effects that will be discarded",
[b]=t,
[e]=u,
[g]="the argument to (.*?) has side effects that will be discarded",
[a]="the argument to (.*?) has side effects that will be discarded",
[a]=" \\[(?:\\-Werror,)?\\-Wassume[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wassume[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"f04173358502",1405607155,"Add an __assume side-effects warning"},
[i]={"f04173358502",1405607155,"Add an __assume side-effects warning"},
[j]={{F,8605,"/// SemaBuiltinAssume - Handle __assume (MS Extension).\n// __assume does not evaluate its arguments, and should warn if its argument\n// has side effects.\nbool Sema::SemaBuiltinAssume(CallExpr *TheCall) {\n  if (Arg->HasSideEffects(Context))\n    Diag(Arg->getBeginLoc(), diag::warn_assume_side_effects) << Arg->getSourceRange() << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier();"}}
[j]={{F,8605,"/// SemaBuiltinAssume - Handle __assume (MS Extension).\n// __assume does not evaluate its arguments, and should warn if its argument\n// has side effects.\nbool Sema::SemaBuiltinAssume(CallExpr *TheCall) {\n  if (Arg->HasSideEffects(Context))\n    Diag(Arg->getBeginLoc(), diag::warn_assume_side_effects) << Arg->getSourceRange() << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier();"}},
[k]={
["clang/test/Sema/stmtexprs.c"]={"clang/test/Sema/stmtexprs.c:8:21: warning: the argument to \'__builtin_assume\' has side effects that will be discarded [-Wassume]"}
}
},
},
["warn_at_available_unchecked_use"]={
["warn_at_available_unchecked_use"]={
[c]="... does not guard availability here; use if (...) instead [-Wunsupported-availability-guard]",
[f]="... does not guard availability here; use if (...) instead [-Wunsupported-availability-guard]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"unsupported-availability-guard"},
[r]={"unsupported-availability-guard"},
[q]="unsupported-availability-guard",
[q]="unsupported-availability-guard",
[h]="%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead",
[d]="%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead",
[b]=t,
[e]=u,
[g]="(?:@available|__builtin_available) does not guard availability here; use if \\((?:@available|__builtin_available)\\) instead",
[a]="(?:@available|__builtin_available) does not guard availability here; use if \\((?:@available|__builtin_available)\\) instead",
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-availability\\-guard[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-availability\\-guard[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"0a484baa8516",1495638929,"Warn about uses of `@available` that can\'t suppress the"},
[i]={"0a484baa8516",1495638929,"Warn about uses of `@available` that can\'t suppress the"},
[j]={{Kb,730,"/// This class implements -Wunguarded-availability.\n///\n/// This is done with a traversal of the AST of a function that makes reference\n/// to a partially available declaration. Whenever we encounter an \\c if of the\n/// form: \\c if(@available(...)), we use the version from the condition to visit\n/// the then statement.\nclass DiagnoseUnguardedAvailability : public RecursiveASTVisitor<DiagnoseUnguardedAvailability> {\n  bool VisitObjCAvailabilityCheckExpr(ObjCAvailabilityCheckExpr *E) {\n    SemaRef.Diag(E->getBeginLoc(), diag::warn_at_available_unchecked_use) << (!SemaRef.getLangOpts().ObjC);"}}
[j]={{Vb,730,"/// This class implements -Wunguarded-availability.\n///\n/// This is done with a traversal of the AST of a function that makes reference\n/// to a partially available declaration. Whenever we encounter an \\c if of the\n/// form: \\c if(@available(...)), we use the version from the condition to visit\n/// the then statement.\nclass DiagnoseUnguardedAvailability : public RecursiveASTVisitor<DiagnoseUnguardedAvailability> {\n  bool VisitObjCAvailabilityCheckExpr(ObjCAvailabilityCheckExpr *E) {\n    SemaRef.Diag(E->getBeginLoc(), diag::warn_at_available_unchecked_use) << (!SemaRef.getLangOpts().ObjC);"}},
[k]={
["clang/test/SemaObjC/unguarded-availability.m"]={"clang/test/SemaObjC/unguarded-availability.m:169:7: warning: @available does not guard availability here; use if (@available) instead [-Wunsupported-availability-guard]","clang/test/SemaObjC/unguarded-availability.m:175:22: warning: @available does not guard availability here; use if (@available) instead [-Wunsupported-availability-guard]"}
}
},
},
["warn_atimport_in_framework_header"]={
["warn_atimport_in_framework_header"]={
[c]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules [-Watimport-in-framework-header]",
[f]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules [-Watimport-in-framework-header]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"atimport-in-framework-header"},
[r]={"atimport-in-framework-header"},
[q]="atimport-in-framework-header",
[q]="atimport-in-framework-header",
[h]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules",
[d]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules",
[b]=t,
[e]=u,
[g]="use of \'@import\' in framework header is discouraged, including this header requires \\-fmodules",
[a]="use of \'@import\' in framework header is discouraged, including this header requires \\-fmodules",
[a]=" \\[(?:\\-Werror,)?\\-Watimport\\-in\\-framework\\-header[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Watimport\\-in\\-framework\\-header[^\\]]*\\]",
[e]=Q,
[h]=Q,
[i]={"03e0d2d82be7",1530131376,"[Modules][ObjC] Warn on the use of \'@import\' in framework headers"},
[i]={"03e0d2d82be7",1530131376,"[Modules][ObjC] Warn on the use of \'@import\' in framework headers"},
[j]={{"clang/lib/Parse/Parser.cpp",2606,"/// 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  // Using \'@import\' in framework headers requires modules to be enabled so that\n  // the header is parseable. Emit a warning to make the user aware.\n  if (IsObjCAtImport && AtLoc.isValid()) {\n    if (FE && llvm::sys::path::parent_path(FE->getDir().getName()).endswith(\".framework\"))\n      Diags.Report(AtLoc, diag::warn_atimport_in_framework_header);"}}
[j]={{"clang/lib/Parse/Parser.cpp",2606,"/// 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  // Using \'@import\' in framework headers requires modules to be enabled so that\n  // the header is parseable. Emit a warning to make the user aware.\n  if (IsObjCAtImport && AtLoc.isValid()) {\n    if (FE && llvm::sys::path::parent_path(FE->getDir().getName()).endswith(\".framework\"))\n      Diags.Report(AtLoc, diag::warn_atimport_in_framework_header);"}},
[k]={
["clang/test/Modules/self-import-header.m"]={"clang/test/Modules/Inputs/self-import-header/af.framework/Headers/a1.h:1:1: warning: use of \'@import\' in framework header is discouraged, including this header requires -fmodules [-Watimport-in-framework-header]"}
}
},
},
["warn_atl_uuid_deprecated"]={
["warn_atl_uuid_deprecated"]={
[c]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead [-Wdeprecated-declarations]",
[f]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead [-Wdeprecated-declarations]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={Ab,"deprecated-declarations"},
[r]={Cb,"deprecated-declarations"},
[q]="deprecated-declarations",
[q]="deprecated-declarations",
[h]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead",
[d]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead",
[b]=t,
[e]=u,
[g]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead",
[a]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[e]=Ib,
[h]=Wb,
[i]={"469891e7a293",1494003956,"Warn that the [] spelling of uuid(...) is deprecated."},
[i]={"469891e7a293",1494003956,"Warn that the [] spelling of uuid(...) is deprecated."},
[j]={{u,7040,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FIXME: It\'d be nice to also emit a fixit removing uuid(...) (and, if it\'s\n  // the only thing in the [] list, the [] too), and add an insertion of\n  // __declspec(uuid(...)).  But sadly, neither the SourceLocs of the commas\n  // separating attributes nor of the [ and the ] are in the AST.\n  // Cf \"SourceLocations of attribute list delimiters - [[ ... , ... ]] etc\"\n  // on cfe-dev.\n  if (AL.isMicrosoftAttribute()) // Check for [uuid(...)] spelling.\n    S.Diag(AL.getLoc(), diag::warn_atl_uuid_deprecated);"}}
[j]={{v,7040,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FIXME: It\'d be nice to also emit a fixit removing uuid(...) (and, if it\'s\n  // the only thing in the [] list, the [] too), and add an insertion of\n  // __declspec(uuid(...)).  But sadly, neither the SourceLocs of the commas\n  // separating attributes nor of the [ and the ] are in the AST.\n  // Cf \"SourceLocations of attribute list delimiters - [[ ... , ... ]] etc\"\n  // on cfe-dev.\n  if (AL.isMicrosoftAttribute()) // Check for [uuid(...)] spelling.\n    S.Diag(AL.getLoc(), diag::warn_atl_uuid_deprecated);"}},
[k]={
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:71:2: warning: specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead [-Wdeprecated-declarations]"}
}
},
},
["warn_atomic_implicit_seq_cst"]={
["warn_atomic_implicit_seq_cst"]={
[c]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[f]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"atomic-implicit-seq-cst"},
[r]={"atomic-implicit-seq-cst"},
[q]="atomic-implicit-seq-cst",
[q]="atomic-implicit-seq-cst",
[h]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary",
[d]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary",
[b]=t,
[e]=u,
[g]="implicit use of sequentially\\-consistent atomic may incur stronger memory barriers than necessary",
[a]="implicit use of sequentially\\-consistent atomic may incur stronger memory barriers than necessary",
[a]=" \\[(?:\\-Werror,)?\\-Watomic\\-implicit\\-seq\\-cst[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Watomic\\-implicit\\-seq\\-cst[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"e77b48b07840",1536612176,"Implement -Watomic-implicit-seq-cst"},
[i]={"e77b48b07840",1536612176,"Implement -Watomic-implicit-seq-cst"},
[j]={{F,2356,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__sync_synchronize:\n    Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) << TheCall->getCallee()->getSourceRange();"},{F,7817,"/// 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  Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) << Callee->getSourceRange();"},{F,14185,"/// Analyze the given simple or compound assignment for warning-worthy\n/// operations.\nstatic void AnalyzeAssignment(Sema &S, BinaryOperator *E) {\n  // Diagnose implicitly sequentially-consistent atomic assignment.\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getRHS()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,14356,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getOperatorLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,14673,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (Source->isAtomicType())\n    S.Diag(E->getExprLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,15288,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  // Skip past explicit casts.\n  if (auto *CE = dyn_cast<ExplicitCastExpr>(E)) {\n    if (!CE->getType()->isVoidType() && E->getType()->isAtomicType())\n      S.Diag(E->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,15355,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E)) {\n    if (U->getOpcode() == UO_LNot) {\n    } else if (U->getOpcode() != UO_AddrOf) {\n      if (U->getSubExpr()->getType()->isAtomicType())\n        S.Diag(U->getSubExpr()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"}}
[j]={{F,2356,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__sync_synchronize:\n    Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) << TheCall->getCallee()->getSourceRange();"},{F,7817,"/// 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  Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) << Callee->getSourceRange();"},{F,14185,"/// Analyze the given simple or compound assignment for warning-worthy\n/// operations.\nstatic void AnalyzeAssignment(Sema &S, BinaryOperator *E) {\n  // Diagnose implicitly sequentially-consistent atomic assignment.\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getRHS()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,14356,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getOperatorLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,14673,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (Source->isAtomicType())\n    S.Diag(E->getExprLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,15288,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  // Skip past explicit casts.\n  if (auto *CE = dyn_cast<ExplicitCastExpr>(E)) {\n    if (!CE->getType()->isVoidType() && E->getType()->isAtomicType())\n      S.Diag(E->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,15355,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E)) {\n    if (U->getOpcode() == UO_LNot) {\n    } else if (U->getOpcode() != UO_AddrOf) {\n      if (U->getSubExpr()->getType()->isAtomicType())\n        S.Diag(U->getSubExpr()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"}},
[k]={
["clang/test/Sema/atomic-implicit-seq_cst.c"]={
[1]="clang/test/Sema/atomic-implicit-seq_cst.c:10:5: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[2]="clang/test/Sema/atomic-implicit-seq_cst.c:14:5: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[3]="clang/test/Sema/atomic-implicit-seq_cst.c:18:3: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[4]="clang/test/Sema/atomic-implicit-seq_cst.c:22:3: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[5]="clang/test/Sema/atomic-implicit-seq_cst.c:26:13: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[6]="clang/test/Sema/atomic-implicit-seq_cst.c:30:11: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[7]="clang/test/Sema/atomic-implicit-seq_cst.c:34:11: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[8]="clang/test/Sema/atomic-implicit-seq_cst.c:38:11: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[9]="clang/test/Sema/atomic-implicit-seq_cst.c:42:11: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[10]="clang/test/Sema/atomic-implicit-seq_cst.c:46:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[11]="clang/test/Sema/atomic-implicit-seq_cst.c:50:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[12]="clang/test/Sema/atomic-implicit-seq_cst.c:54:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[13]="clang/test/Sema/atomic-implicit-seq_cst.c:58:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[14]="clang/test/Sema/atomic-implicit-seq_cst.c:62:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[15]="clang/test/Sema/atomic-implicit-seq_cst.c:66:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[16]="clang/test/Sema/atomic-implicit-seq_cst.c:70:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[17]="clang/test/Sema/atomic-implicit-seq_cst.c:74:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[18]="clang/test/Sema/atomic-implicit-seq_cst.c:78:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[19]="clang/test/Sema/atomic-implicit-seq_cst.c:82:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[20]="clang/test/Sema/atomic-implicit-seq_cst.c:86:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[21]="clang/test/Sema/atomic-implicit-seq_cst.c:90:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[22]="clang/test/Sema/atomic-implicit-seq_cst.c:94:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[23]="clang/test/Sema/atomic-implicit-seq_cst.c:98:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[24]="clang/test/Sema/atomic-implicit-seq_cst.c:102:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[25]="clang/test/Sema/atomic-implicit-seq_cst.c:106:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[26]="clang/test/Sema/atomic-implicit-seq_cst.c:110:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[27]="clang/test/Sema/atomic-implicit-seq_cst.c:114:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[28]="clang/test/Sema/atomic-implicit-seq_cst.c:118:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[29]="clang/test/Sema/atomic-implicit-seq_cst.c:122:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[30]="clang/test/Sema/atomic-implicit-seq_cst.c:126:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[31]="clang/test/Sema/atomic-implicit-seq_cst.c:130:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[32]="clang/test/Sema/atomic-implicit-seq_cst.c:134:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[33]="clang/test/Sema/atomic-implicit-seq_cst.c:138:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[34]="clang/test/Sema/atomic-implicit-seq_cst.c:142:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[35]="clang/test/Sema/atomic-implicit-seq_cst.c:146:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[36]="clang/test/Sema/atomic-implicit-seq_cst.c:150:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[37]="clang/test/Sema/atomic-implicit-seq_cst.c:154:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[38]="clang/test/Sema/atomic-implicit-seq_cst.c:158:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[39]="clang/test/Sema/atomic-implicit-seq_cst.c:162:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[40]="clang/test/Sema/atomic-implicit-seq_cst.c:166:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[41]="clang/test/Sema/atomic-implicit-seq_cst.c:170:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[42]="clang/test/Sema/atomic-implicit-seq_cst.c:174:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[43]="clang/test/Sema/atomic-implicit-seq_cst.c:178:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[44]="clang/test/Sema/atomic-implicit-seq_cst.c:182:12: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[45]="clang/test/Sema/atomic-implicit-seq_cst.c:186:16: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[46]="clang/test/Sema/atomic-implicit-seq_cst.c:190:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[47]="clang/test/Sema/atomic-implicit-seq_cst.c:194:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[48]="clang/test/Sema/atomic-implicit-seq_cst.c:198:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[49]="clang/test/Sema/atomic-implicit-seq_cst.c:202:15: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[50]="clang/test/Sema/atomic-implicit-seq_cst.c:205:14: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[51]="clang/test/Sema/atomic-implicit-seq_cst.c:209:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[52]="clang/test/Sema/atomic-implicit-seq_cst.c:213:18: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[53]="clang/test/Sema/atomic-implicit-seq_cst.c:217:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[54]="clang/test/Sema/atomic-implicit-seq_cst.c:221:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[55]="clang/test/Sema/atomic-implicit-seq_cst.c:225:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[56]="clang/test/Sema/atomic-implicit-seq_cst.c:229:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[57]="clang/test/Sema/atomic-implicit-seq_cst.c:233:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[58]="clang/test/Sema/atomic-implicit-seq_cst.c:237:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[59]="clang/test/Sema/atomic-implicit-seq_cst.c:241:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[60]="clang/test/Sema/atomic-implicit-seq_cst.c:245:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[61]="clang/test/Sema/atomic-implicit-seq_cst.c:249:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[62]="clang/test/Sema/atomic-implicit-seq_cst.c:253:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[63]="clang/test/Sema/atomic-implicit-seq_cst.c:257:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[64]="clang/test/Sema/atomic-implicit-seq_cst.c:261:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[65]="clang/test/Sema/atomic-implicit-seq_cst.c:265:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[66]="clang/test/Sema/atomic-implicit-seq_cst.c:269:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[67]="clang/test/Sema/atomic-implicit-seq_cst.c:273:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[68]="clang/test/Sema/atomic-implicit-seq_cst.c:277:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[69]="clang/test/Sema/atomic-implicit-seq_cst.c:281:10: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[70]="clang/test/Sema/atomic-implicit-seq_cst.c:285:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[71]="clang/test/Sema/atomic-implicit-seq_cst.c:289:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[72]="clang/test/Sema/atomic-implicit-seq_cst.c:293:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[73]="clang/test/Sema/atomic-implicit-seq_cst.c:297:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[74]="clang/test/Sema/atomic-implicit-seq_cst.c:301:8: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[75]="clang/test/Sema/atomic-implicit-seq_cst.c:305:9: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]",
[76]="clang/test/Sema/atomic-implicit-seq_cst.c:309:19: warning: implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]"
}
}
},
},
["warn_atomic_member_access"]={
["warn_atomic_member_access"]={
[c]="accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]",
[f]="accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]",
[d]=tb,
[b]=vb,
[f]=oc,
[c]=Gc,
[p]={"atomic-access"},
[r]={"atomic-access"},
[q]="atomic-access",
[q]="atomic-access",
[h]="accessing a member of an atomic structure or union is undefined behavior",
[d]="accessing a member of an atomic structure or union is undefined behavior",
[b]=lc,
[e]=Lc,
[g]="accessing a member of an atomic structure or union is undefined behavior",
[a]="accessing a member of an atomic structure or union is undefined behavior",
[a]=" \\[[^\\]]*\\-Watomic\\-access[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Watomic\\-access[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[j]={{"clang/lib/Sema/SemaExprMember.cpp",1306,"/// 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  // If the base type is an atomic type, this access is undefined behavior per\n  // C11 6.5.2.3p5. Instead of giving a typecheck error, we\'ll warn the user\n  // about the UB and recover by converting the atomic lvalue into a non-atomic\n  // lvalue. Because this is inherently unsafe as an atomic operation, the\n  // warning defaults to an error.\n  if (const auto *ATy = BaseType->getAs<AtomicType>()) {\n    S.DiagRuntimeBehavior(OpLoc, nullptr, S.PDiag(diag::warn_atomic_member_access));"}}
[j]={{"clang/lib/Sema/SemaExprMember.cpp",1306,"/// 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  // If the base type is an atomic type, this access is undefined behavior per\n  // C11 6.5.2.3p5. Instead of giving a typecheck error, we\'ll warn the user\n  // about the UB and recover by converting the atomic lvalue into a non-atomic\n  // lvalue. Because this is inherently unsafe as an atomic operation, the\n  // warning defaults to an error.\n  if (const auto *ATy = BaseType->getAs<AtomicType>()) {\n    S.DiagRuntimeBehavior(OpLoc, nullptr, S.PDiag(diag::warn_atomic_member_access));"}},
[k]={
["clang/test/Sema/atomic-expr.c"]={"clang/test/Sema/atomic-expr.c:86:4: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:87:5: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:93:4: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:94:5: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:97:15: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:98:12: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:99:15: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:100:12: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:104:4: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]","clang/test/Sema/atomic-expr.c:105:15: error: accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]"}
}
},
},
["warn_atomic_op_has_invalid_memory_order"]={
["warn_atomic_op_has_invalid_memory_order"]={
[c]="memory order argument to atomic operation is invalid [-Watomic-memory-ordering]",
[f]="memory order argument to atomic operation is invalid [-Watomic-memory-ordering]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"atomic-memory-ordering"},
[r]={"atomic-memory-ordering"},
[q]="atomic-memory-ordering",
[q]="atomic-memory-ordering",
[h]="memory order argument to atomic operation is invalid",
[d]="memory order argument to atomic operation is invalid",
[b]=t,
[e]=u,
[g]="memory order argument to atomic operation is invalid",
[a]="memory order argument to atomic operation is invalid",
[a]=" \\[(?:\\-Werror,)?\\-Watomic\\-memory\\-ordering[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Watomic\\-memory\\-ordering[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"c83472e0ff4c",1394537710,"Sema: demote invalid atomic ordering message to warning."},
[i]={"c83472e0ff4c",1394537710,"Sema: demote invalid atomic ordering message to warning."},
[j]={{F,4449,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // Check validity of memory ordering as per C11 / C++11\'s memody model.\n  // Only fence needs check. Atomic dec/inc allow all memory orders.\n  if (!llvm::isValidAtomicOrderingCABI(Ord))\n    return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,4456,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  case llvm::AtomicOrderingCABI::consume:\n    if (BuiltinID == AMDGPU::BI__builtin_amdgcn_fence)\n      return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,7427,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (SubExprs.size() >= 2 && Form != Init) {\n    if (std::optional<llvm::APSInt> Result = SubExprs[1]->getIntegerConstantExpr(Context))\n      if (!isValidOrderingForOp(Result->getSExtValue(), Op))\n        Diag(SubExprs[1]->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << SubExprs[1]->getSourceRange();"}}
[j]={{F,4449,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // Check validity of memory ordering as per C11 / C++11\'s memody model.\n  // Only fence needs check. Atomic dec/inc allow all memory orders.\n  if (!llvm::isValidAtomicOrderingCABI(Ord))\n    return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,4456,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  case llvm::AtomicOrderingCABI::consume:\n    if (BuiltinID == AMDGPU::BI__builtin_amdgcn_fence)\n      return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,7427,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (SubExprs.size() >= 2 && Form != Init) {\n    if (std::optional<llvm::APSInt> Result = SubExprs[1]->getIntegerConstantExpr(Context))\n      if (!isValidOrderingForOp(Result->getSExtValue(), Op))\n        Diag(SubExprs[1]->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << SubExprs[1]->getSourceRange();"}},
[k]={
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:20:33: warning: memory order argument to atomic operation is invalid [-Watomic-memory-ordering]","clang/test/SemaCUDA/atomic-ops.cu:43:31: warning: memory order argument to atomic operation is invalid [-Watomic-memory-ordering]","clang/test/SemaCUDA/atomic-ops.cu:44:31: warning: memory order argument to atomic operation is invalid [-Watomic-memory-ordering]","clang/test/SemaCUDA/atomic-ops.cu:45:31: warning: memory order argument to atomic operation is invalid [-Watomic-memory-ordering]"}
}
},
},
["warn_atomic_op_misaligned"]={
["warn_atomic_op_misaligned"]={
[c]="misaligned atomic operation may incur significant performance penalty; the expected alignment (A bytes) exceeds the actual alignment (B bytes) [-Watomic-alignment]",
[f]="misaligned atomic operation may incur significant performance penalty; the expected alignment (A bytes) exceeds the actual alignment (B bytes) [-Watomic-alignment]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"atomic-alignment"},
[r]={"atomic-alignment"},
[q]="atomic-alignment",
[q]="atomic-alignment",
[h]="misaligned atomic operation may incur significant performance penalty; the expected alignment (%0 bytes) exceeds the actual alignment (%1 bytes)",
[d]="misaligned atomic operation may incur significant performance penalty; the expected alignment (%0 bytes) exceeds the actual alignment (%1 bytes)",
[b]=t,
[e]=u,
[g]="misaligned atomic operation may incur significant performance penalty; the expected alignment \\((.*?) bytes\\) exceeds the actual alignment \\((.*?) bytes\\)",
[a]="misaligned atomic operation may incur significant performance penalty; the expected alignment \\((.*?) bytes\\) exceeds the actual alignment \\((.*?) bytes\\)",
[a]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"9dc1d0c74eb1",1524471384,"[Atomics] warn about atomic accesses using libcalls"},
[i]={"9dc1d0c74eb1",1524471384,"[Atomics] warn about atomic accesses using libcalls"},
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",847,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Misaligned) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned) << (int)TInfo.Width.getQuantity() << (int)Ptr.getAlignment().getQuantity();"}}
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",847,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Misaligned) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned) << (int)TInfo.Width.getQuantity() << (int)Ptr.getAlignment().getQuantity();"}},
[k]={
["clang/test/CodeGen/atomic-arm64.c"]={"clang/test/CodeGen/atomic-arm64.c:69:3: warning: misaligned atomic operation may incur significant performance penalty; the expected alignment (32 bytes) exceeds the actual alignment (8 bytes) [-Watomic-alignment]"}
}
},
},
["warn_atomic_op_oversized"]={
["warn_atomic_op_oversized"]={
[c]="large atomic operation may incur significant performance penalty; the access size (A bytes) exceeds the max lock-free size (B  bytes) [-Watomic-alignment]",
[f]="large atomic operation may incur significant performance penalty; the access size (A bytes) exceeds the max lock-free size (B  bytes) [-Watomic-alignment]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"atomic-alignment"},
[r]={"atomic-alignment"},
[q]="atomic-alignment",
[q]="atomic-alignment",
[h]="large atomic operation may incur significant performance penalty; the access size (%0 bytes) exceeds the max lock-free size (%1  bytes)",
[d]="large atomic operation may incur significant performance penalty; the access size (%0 bytes) exceeds the max lock-free size (%1  bytes)",
[b]=t,
[e]=u,
[g]="large atomic operation may incur significant performance penalty; the access size \\((.*?) bytes\\) exceeds the max lock\\-free size \\((.*?)  bytes\\)",
[a]="large atomic operation may incur significant performance penalty; the access size \\((.*?) bytes\\) exceeds the max lock\\-free size \\((.*?)  bytes\\)",
[a]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"e18c6ef6b41a",1596564601,"[clang] improve diagnostics for misaligned and large atomics"},
[i]={"e18c6ef6b41a",1596564601,"[clang] improve diagnostics for misaligned and large atomics"},
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",853,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Oversized) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_oversized) << (int)TInfo.Width.getQuantity() << (int)MaxInlineWidth.getQuantity();"}}
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",853,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Oversized) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_oversized) << (int)TInfo.Width.getQuantity() << (int)MaxInlineWidth.getQuantity();"}},
[k]={
["clang/test/CodeGen/arm-atomics-m0.c"]={"clang/test/CodeGen/arm-atomics-m0.c:15:3: warning: large atomic operation may incur significant performance penalty; the access size (4 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:17:3: warning: large atomic operation may incur significant performance penalty; the access size (4 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:20:3: warning: large atomic operation may incur significant performance penalty; the access size (4 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:23:3: warning: large atomic operation may incur significant performance penalty; the access size (4 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:26:3: warning: large atomic operation may incur significant performance penalty; the access size (8 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:28:3: warning: large atomic operation may incur significant performance penalty; the access size (8 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:31:3: warning: large atomic operation may incur significant performance penalty; the access size (8 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]","clang/test/CodeGen/arm-atomics-m0.c:34:3: warning: large atomic operation may incur significant performance penalty; the access size (8 bytes) exceeds the max lock-free size (0  bytes) [-Watomic-alignment]"}
}
},
},
["warn_atomic_property_rule"]={
["warn_atomic_property_rule"]={
[c]="writable atomic property A cannot pair a synthesized ... with a user defined ... [-Watomic-property-with-user-defined-accessor]",
[f]="writable atomic property A cannot pair a synthesized ... with a user defined ... [-Watomic-property-with-user-defined-accessor]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"atomic-property-with-user-defined-accessor"},
[r]={"atomic-property-with-user-defined-accessor"},
[q]="atomic-property-with-user-defined-accessor",
[q]="atomic-property-with-user-defined-accessor",
[h]="writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2",
[d]="writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2",
[b]=t,
[e]=u,
[g]="writable atomic property (.*?) cannot pair a synthesized (?:getter|setter) with a user defined (?:getter|setter)",
[a]="writable atomic property (.*?) cannot pair a synthesized (?:getter|setter) with a user defined (?:getter|setter)",
[a]=" \\[(?:\\-Werror,)?\\-Watomic\\-property\\-with\\-user\\-defined\\-accessor[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Watomic\\-property\\-with\\-user\\-defined\\-accessor[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"13e0c90fc1a9",1257979211,"writable atomic property\'s setter/getter must be in \'lock\' step of"},
[i]={"13e0c90fc1a9",1257979211,"writable atomic property\'s setter/getter must be in \'lock\' step of"},
[j]={{E,2228,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(MethodLoc, diag::warn_atomic_property_rule) << Property->getIdentifier() << (GetterMethod != nullptr) << (SetterMethod != nullptr);"}}
[j]={{G,2228,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(MethodLoc, diag::warn_atomic_property_rule) << Property->getIdentifier() << (GetterMethod != nullptr) << (SetterMethod != nullptr);"}},
[k]={
["clang/test/SemaObjC/atomic-property-synthesis-rules.m"]={"clang/test/SemaObjC/atomic-property-synthesis-rules.m:251:1: warning: writable atomic property \'Get\' cannot pair a synthesized setter with a user defined getter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:252:1: warning: writable atomic property \'Set\' cannot pair a synthesized getter with a user defined setter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:269:1: warning: writable atomic property \'Get_ReadWriteInExt\' cannot pair a synthesized setter with a user defined getter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:270:1: warning: writable atomic property \'Set_ReadWriteInExt\' cannot pair a synthesized getter with a user defined setter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:279:1: warning: writable atomic property \'Get_LateSynthesize\' cannot pair a synthesized setter with a user defined getter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:280:1: warning: writable atomic property \'Set_LateSynthesize\' cannot pair a synthesized getter with a user defined setter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:297:1: warning: writable atomic property \'Get_ReadWriteInExt_LateSynthesize\' cannot pair a synthesized setter with a user defined getter [-Watomic-property-with-user-defined-accessor]","clang/test/SemaObjC/atomic-property-synthesis-rules.m:298:1: warning: writable atomic property \'Set_ReadWriteInExt_LateSynthesize\' cannot pair a synthesized getter with a user defined setter [-Watomic-property-with-user-defined-accessor]"}
}
},
},
["warn_attr_abi_tag_namespace"]={
["warn_attr_abi_tag_namespace"]={
[c]="\'abi_tag\' attribute on ... namespace ignored [-Wignored-attributes]",
[f]="\'abi_tag\' attribute on ... namespace ignored [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'abi_tag\' attribute on %select{non-inline|anonymous}0 namespace ignored",
[b]=t,
[b]=t,
[g]="\'abi_tag\' attribute on (?:non\\-inline|anonymous) namespace ignored",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="\'abi_tag\' attribute on %select{non-inline|anonymous}0 namespace ignored",
[e]=u,
[a]="\'abi_tag\' attribute on (?:non\\-inline|anonymous) namespace ignored",
[g]=L,
[h]=l,
[i]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support"},
[i]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support"},
[j]={{u,7331,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (!NS->isInline()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 0;"},{u,7335,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (NS->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 1;"}}
[j]={{v,7331,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (!NS->isInline()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 0;"},{v,7335,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (NS->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 1;"}},
[k]={
["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:5:26: warning: \'abi_tag\' attribute on non-inline namespace ignored [-Wignored-attributes]","clang/test/SemaCXX/attr-abi-tag-syntax.cpp:8:28: warning: \'abi_tag\' attribute on non-inline namespace ignored [-Wignored-attributes]","clang/test/SemaCXX/attr-abi-tag-syntax.cpp:15:33: warning: \'abi_tag\' attribute on anonymous namespace ignored [-Wignored-attributes]"}
}
},
},
["warn_attr_on_unconsumable_class"]={
["warn_attr_on_unconsumable_class"]={
[c]="consumed analysis attribute is attached to member of class A which isn\'t marked as consumable [-Wconsumed]",
[f]="consumed analysis attribute is attached to member of class A which isn\'t marked as consumable [-Wconsumed]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"consumed"},
[r]={"consumed"},
[q]="consumed",
[q]="consumed",
[h]="consumed analysis attribute is attached to member of class %0 which isn\'t marked as consumable",
[d]="consumed analysis attribute is attached to member of class %0 which isn\'t marked as consumable",
[b]=t,
[e]=u,
[g]="consumed analysis attribute is attached to member of class (.*?) which isn\'t marked as consumable",
[a]="consumed analysis attribute is attached to member of class (.*?) which isn\'t marked as consumable",
[a]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute."},
[i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute."},
[j]={{u,1231,"static bool checkForConsumableClass(Sema &S, const CXXMethodDecl *MD, const ParsedAttr &AL) {\n  if (const CXXRecordDecl *RD = ThisType->getAsCXXRecordDecl()) {\n    if (!RD->hasAttr<ConsumableAttr>()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class) << RD;"}}
[j]={{v,1231,"static bool checkForConsumableClass(Sema &S, const CXXMethodDecl *MD, const ParsedAttr &AL) {\n  if (const CXXRecordDecl *RD = ThisType->getAsCXXRecordDecl()) {\n    if (!RD->hasAttr<ConsumableAttr>()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class) << RD;"}},
[k]={
[Ec]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:51:25: warning: consumed analysis attribute is attached to member of class \'AttrTester2\' which isn\'t marked as consumable [-Wconsumed]","clang/test/SemaCXX/warn-consumed-parsing.cpp:52:25: warning: consumed analysis attribute is attached to member of class \'AttrTester2\' which isn\'t marked as consumable [-Wconsumed]","clang/test/SemaCXX/warn-consumed-parsing.cpp:53:25: warning: consumed analysis attribute is attached to member of class \'AttrTester2\' which isn\'t marked as consumable [-Wconsumed]"}
}
},
},
["warn_attr_swift_name_decl_kind"]={
["warn_attr_swift_name_decl_kind"]={
[c]="A attribute cannot be applied to this declaration [-Wswift-name-attribute]",
[f]="A attribute cannot be applied to this declaration [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute cannot be applied to this declaration",
[b]=t,
[b]=t,
[g]="(.*?) attribute cannot be applied to this declaration",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute cannot be applied to this declaration",
[j]={{u,6856,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n  } else {\n    Diag(Loc, diag::warn_attr_swift_name_decl_kind) << AL;"}}
[e]=u,
[a]="(.*?) attribute cannot be applied to this declaration",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6856,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n  } else {\n    Diag(Loc, diag::warn_attr_swift_name_decl_kind) << AL;"}}
},
},
["warn_attr_swift_name_decl_missing_params"]={
["warn_attr_swift_name_decl_missing_params"]={
[c]="A attribute cannot be applied to a ... with no parameters [-Wswift-name-attribute]",
[f]="A attribute cannot be applied to a ... with no parameters [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute cannot be applied to a %select{function|method}1 with no parameters",
[b]=t,
[b]=t,
[g]="(.*?) attribute cannot be applied to a (?:function|method) with no parameters",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={pb,1590001902,ob},
[d]="%0 attribute cannot be applied to a %select{function|method}1 with no parameters",
[j]={{u,6794,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    // The async name drops the last callback parameter.\n    if (IsAsync) {\n      if (ParamCount == 0) {\n        Diag(Loc, diag::warn_attr_swift_name_decl_missing_params) << AL << isa<ObjCMethodDecl>(D);"}}
[e]=u,
[a]="(.*?) attribute cannot be applied to a (?:function|method) with no parameters",
[g]=qb,
[h]=l,
[i]={rb,1590001902,pb},
[j]={{v,6794,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    // The async name drops the last callback parameter.\n    if (IsAsync) {\n      if (ParamCount == 0) {\n        Diag(Loc, diag::warn_attr_swift_name_decl_missing_params) << AL << isa<ObjCMethodDecl>(D);"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:191:42: warning: \'__swift_async_name__\' attribute cannot be applied to a method with no parameters [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:201:43: warning: \'__swift_async_name__\' attribute cannot be applied to a function with no parameters [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_function"]={
["warn_attr_swift_name_function"]={
[c]="A attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]",
[f]="A attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute argument must be a string literal specifying a Swift function name",
[b]=t,
[b]=t,
[g]="(.*?) attribute argument must be a string literal specifying a Swift function name",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute argument must be a string literal specifying a Swift function name",
[j]={{u,6602,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Name.back() != \')\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"},{u,6664,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.back() != \':\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"}}
[e]=u,
[a]="(.*?) attribute argument must be a string literal specifying a Swift function name",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6602,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Name.back() != \')\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"},{v,6664,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.back() != \':\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:27:45: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:57:42: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:59:42: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:82:27: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:161:34: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:164:46: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:167:43: warning: \'__swift_name__\' attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_getter_parameters"]={
["warn_attr_swift_name_getter_parameters"]={
[c]="A attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]",
[f]="A attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute for getter must not have any parameters besides \'self:\'",
[b]=t,
[b]=t,
[g]="(.*?) attribute for getter must not have any parameters besides \'self\\:\'",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute for getter must not have any parameters besides \'self:\'",
[j]={{u,6720,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}}
[e]=u,
[a]="(.*?) attribute for getter must not have any parameters besides \'self\\:\'",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6720,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:104:78: warning: \'__swift_name__\' attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:158:38: warning: \'__swift_name__\' attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_invalid_identifier"]={
["warn_attr_swift_name_invalid_identifier"]={
[c]="A attribute has invalid identifier for the ... name [-Wswift-name-attribute]",
[f]="A attribute has invalid identifier for the ... name [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute has invalid identifier for the %select{base|context|parameter}1 name",
[b]=t,
[b]=t,
[g]="(.*?) attribute has invalid identifier for the (?:base|context|parameter) name",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute has invalid identifier for the %select{base|context|parameter}1 name",
[j]={{u,6618,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (BaseName.empty()) {\n  } else if (ContextName.empty() || !isValidAsciiIdentifier(ContextName)) {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{u,6626,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (!isValidAsciiIdentifier(BaseName) || BaseName == \"_\") {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"},{u,6676,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (!isValidAsciiIdentifier(CurrentParam)) {\n      S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*parameter*/ 2;"},{u,6845,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (BaseName.empty()) {\n    } else if (!isValidAsciiIdentifier(ContextName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{u,6851,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (!isValidAsciiIdentifier(BaseName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"}}
[e]=u,
[a]="(.*?) attribute has invalid identifier for the (?:base|context|parameter) name",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6618,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (BaseName.empty()) {\n  } else if (ContextName.empty() || !isValidAsciiIdentifier(ContextName)) {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{v,6626,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (!isValidAsciiIdentifier(BaseName) || BaseName == \"_\") {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"},{v,6676,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (!isValidAsciiIdentifier(CurrentParam)) {\n      S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*parameter*/ 2;"},{v,6845,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (BaseName.empty()) {\n    } else if (!isValidAsciiIdentifier(ContextName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{v,6851,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (!isValidAsciiIdentifier(BaseName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:61:53: warning: \'__swift_name__\' attribute has invalid identifier for the base name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:63:53: warning: \'__swift_name__\' attribute has invalid identifier for the parameter name [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:73:21: warning: \'__swift_name__\' attribute has invalid identifier for the base name [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_missing_parameters"]={
["warn_attr_swift_name_missing_parameters"]={
[c]="A attribute is missing parameter label clause [-Wswift-name-attribute]",
[f]="A attribute is missing parameter label clause [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute is missing parameter label clause",
[b]=t,
[b]=t,
[g]="(.*?) attribute is missing parameter label clause",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute is missing parameter label clause",
[j]={{u,6640,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    S.Diag(Loc, diag::warn_attr_swift_name_missing_parameters) << AL;"}}
[e]=u,
[a]="(.*?) attribute is missing parameter label clause",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6640,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    S.Diag(Loc, diag::warn_attr_swift_name_missing_parameters) << AL;"}}
},
},
["warn_attr_swift_name_multiple_selfs"]={
["warn_attr_swift_name_multiple_selfs"]={
[c]="A attribute cannot specify more than one \'self:\' parameter [-Wswift-name-attribute]",
[f]="A attribute cannot specify more than one \'self:\' parameter [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute cannot specify more than one \'self:\' parameter",
[b]=t,
[b]=t,
[g]="(.*?) attribute cannot specify more than one \'self\\:\' parameter",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute cannot specify more than one \'self:\' parameter",
[j]={{u,6686,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (IsMember && CurrentParam == \"self\") {\n      // More than one \"self\"?\n      if (SelfLocation) {\n        S.Diag(Loc, diag::warn_attr_swift_name_multiple_selfs) << AL;"}}
[e]=u,
[a]="(.*?) attribute cannot specify more than one \'self\\:\' parameter",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6686,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (IsMember && CurrentParam == \"self\") {\n      // More than one \"self\"?\n      if (SelfLocation) {\n        S.Diag(Loc, diag::warn_attr_swift_name_multiple_selfs) << AL;"}}
},
},
["warn_attr_swift_name_num_params"]={
["warn_attr_swift_name_num_params"]={
[c]="too ... parameters in the signature specified by the A attribute (expected B; got C) [-Wswift-name-attribute]",
[f]="too ... parameters in the signature specified by the A attribute (expected B; got C) [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="too %select{few|many}0 parameters in the signature specified by the %1 attribute (expected %2; got %3)",
[b]=t,
[b]=t,
[g]="too (?:few|many) parameters in the signature specified by the (.*?) attribute \\(expected (.*?); got (.*?)\\)",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="too %select{few|many}0 parameters in the signature specified by the %1 attribute (expected %2; got %3)",
[j]={{u,6828,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (!ParamCountValid) {\n      Diag(Loc, diag::warn_attr_swift_name_num_params) << (SwiftParamCount > ParamCount) << AL << ParamCount << SwiftParamCount;"}}
[e]=u,
[a]="too (?:few|many) parameters in the signature specified by the (.*?) attribute \\(expected (.*?); got (.*?)\\)",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6828,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (!ParamCountValid) {\n      Diag(Loc, diag::warn_attr_swift_name_num_params) << (SwiftParamCount > ParamCount) << AL << ParamCount << SwiftParamCount;"}},
[k]={
["clang/test/SemaObjCXX/attr-swift_name-cxx.mm"]={"clang/test/SemaObjCXX/attr-swift_name-cxx.mm:12:85: warning: too few parameters in the signature specified by the \'__swift_async_name__\' attribute (expected 1; got 0) [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_setter_parameters"]={
["warn_attr_swift_name_setter_parameters"]={
[c]="A attribute for setter must have one parameter for new value [-Wswift-name-attribute]",
[f]="A attribute for setter must have one parameter for new value [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute for setter must have one parameter for new value",
[b]=t,
[b]=t,
[g]="(.*?) attribute for setter must have one parameter for new value",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute for setter must have one parameter for new value",
[j]={{u,6656,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    if (IsSetter) {\n      S.Diag(Loc, diag::warn_attr_swift_name_setter_parameters) << AL;"},{u,6721,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}}
[e]=u,
[a]="(.*?) attribute for setter must have one parameter for new value",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6656,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    if (IsSetter) {\n      S.Diag(Loc, diag::warn_attr_swift_name_setter_parameters) << AL;"},{v,6721,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:113:88: warning: \'__swift_name__\' attribute for setter must have one parameter for new value [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_subscript_getter_newValue"]={
["warn_attr_swift_name_subscript_getter_newValue"]={
[c]="A attribute for \'subscript\' getter cannot have a \'newValue:\' parameter [-Wswift-name-attribute]",
[f]="A attribute for \'subscript\' getter cannot have a \'newValue:\' parameter [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute for \'subscript\' getter cannot have a \'newValue:\' parameter",
[b]=t,
[b]=t,
[g]="(.*?) attribute for \'subscript\' getter cannot have a \'newValue\\:\' parameter",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute for \'subscript\' getter cannot have a \'newValue:\' parameter",
[j]={{u,6751,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n      } else {\n        // Subscript getters should have no \'newValue:\' parameter.\n        if (NewValueLocation) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_getter_newValue) << AL;"}}
[e]=u,
[a]="(.*?) attribute for \'subscript\' getter cannot have a \'newValue\\:\' parameter",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6751,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n      } else {\n        // Subscript getters should have no \'newValue:\' parameter.\n        if (NewValueLocation) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_getter_newValue) << AL;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:131:94: warning: \'__swift_name__\' attribute for \'subscript\' getter cannot have a \'newValue:\' parameter [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_subscript_invalid_parameter"]={
["warn_attr_swift_name_subscript_invalid_parameter"]={
[c]="A attribute for \'subscript\' must ... [-Wswift-name-attribute]",
[f]="A attribute for \'subscript\' must ... [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute for \'subscript\' must %select{be a getter or setter|have at least one parameter|have a \'self:\' parameter}1",
[b]=t,
[b]=t,
[g]="(.*?) attribute for \'subscript\' must (?:be a getter or setter|have at least one parameter|have a \'self\\:\' parameter)",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute for \'subscript\' must %select{be a getter or setter|have at least one parameter|have a \'self:\' parameter}1",
[j]={{u,6634,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // A subscript accessor must be a getter or setter.\n  if (IsSubscript && !IsGetter && !IsSetter) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* getter or setter */ 0;"},{u,6650,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    // Setters and subscripts must have at least one parameter.\n    if (IsSubscript) {\n      S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* have at least one parameter */ 1;"},{u,6707,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Only instance subscripts are currently supported.\n  if (IsSubscript && !SelfLocation) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /*have a \'self:\' parameter*/ 2;"}}
[e]=u,
[a]="(.*?) attribute for \'subscript\' must (?:be a getter or setter|have at least one parameter|have a \'self\\:\' parameter)",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6634,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // A subscript accessor must be a getter or setter.\n  if (IsSubscript && !IsGetter && !IsSetter) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* getter or setter */ 0;"},{v,6650,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    // Setters and subscripts must have at least one parameter.\n    if (IsSubscript) {\n      S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* have at least one parameter */ 1;"},{v,6707,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Only instance subscripts are currently supported.\n  if (IsSubscript && !SelfLocation) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /*have a \'self:\' parameter*/ 2;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:125:80: warning: \'__swift_name__\' attribute for \'subscript\' must be a getter or setter [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:137:53: warning: \'__swift_name__\' attribute for \'subscript\' must have a \'self:\' parameter [-Wswift-name-attribute]","clang/test/SemaObjC/attr-swift_name.m:140:53: warning: \'__swift_name__\' attribute for \'subscript\' must have at least one parameter [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_subscript_setter_multiple_newValues"]={
["warn_attr_swift_name_subscript_setter_multiple_newValues"]={
[c]="A attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters [-Wswift-name-attribute]",
[f]="A attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters",
[b]=t,
[b]=t,
[g]="(.*?) attribute for \'subscript\' setter cannot have multiple \'newValue\\:\' parameters",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters",
[j]={{u,6744,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n        if (NewValueCount > 1) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_multiple_newValues) << AL;"}}
[e]=u,
[a]="(.*?) attribute for \'subscript\' setter cannot have multiple \'newValue\\:\' parameters",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6744,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n        if (NewValueCount > 1) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_multiple_newValues) << AL;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:128:97: warning: \'__swift_name__\' attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters [-Wswift-name-attribute]"}
}
},
},
["warn_attr_swift_name_subscript_setter_no_newValue"]={
["warn_attr_swift_name_subscript_setter_no_newValue"]={
[c]="A attribute for \'subscript\' setter must have a \'newValue:\' parameter [-Wswift-name-attribute]",
[f]="A attribute for \'subscript\' setter must have a \'newValue:\' parameter [-Wswift-name-attribute]",
[d]=s,
[f]=r,
[p]={R},
[q]=R,
[h]="%0 attribute for \'subscript\' setter must have a \'newValue:\' parameter",
[b]=t,
[b]=t,
[g]="(.*?) attribute for \'subscript\' setter must have a \'newValue\\:\' parameter",
[c]=s,
[a]=qb,
[r]={T},
[e]=k,
[q]=T,
[i]={eb,1582847864,cb},
[d]="%0 attribute for \'subscript\' setter must have a \'newValue:\' parameter",
[j]={{u,6739,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n        if (!NewValueLocation) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_no_newValue) << AL;"}}
[e]=u,
[a]="(.*?) attribute for \'subscript\' setter must have a \'newValue\\:\' parameter",
[g]=qb,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{v,6739,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n        if (!NewValueLocation) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_no_newValue) << AL;"}},
[k]={
[Hb]={"clang/test/SemaObjC/attr-swift_name.m:122:83: warning: \'__swift_name__\' attribute for \'subscript\' setter must have a \'newValue:\' parameter [-Wswift-name-attribute]"}
}
},
},
["warn_attribute_address_multiple_identical_qualifiers"]={
["warn_attribute_address_multiple_identical_qualifiers"]={
[c]="multiple identical address spaces specified for type [-Wduplicate-decl-specifier]",
[f]="multiple identical address spaces specified for type [-Wduplicate-decl-specifier]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"duplicate-decl-specifier"},
[r]={"duplicate-decl-specifier"},
[q]="duplicate-decl-specifier",
[q]="duplicate-decl-specifier",
[h]="multiple identical address spaces specified for type",
[d]="multiple identical address spaces specified for type",
[b]=t,
[e]=u,
[g]="multiple identical address spaces specified for type",
[a]="multiple identical address spaces specified for type",
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"f29d777f847b",1529483484,"[Sema] Allow creating types with multiple of the same addrspace."},
[i]={"f29d777f847b",1529483484,"[Sema] Allow creating types with multiple of the same addrspace."},
[j]={{hb,4629,"// 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    S.Diag(AttrLoc, diag::warn_attribute_address_multiple_identical_qualifiers);"}}
[j]={{cb,4629,"// 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    S.Diag(AttrLoc, diag::warn_attribute_address_multiple_identical_qualifiers);"}},
[k]={
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:17:13: warning: multiple identical address spaces specified for type [-Wduplicate-decl-specifier]"}
}
},
},
["warn_attribute_after_definition_ignored"]={
["warn_attribute_after_definition_ignored"]={
[c]="attribute A after definition is ignored [-Wignored-attributes]",
[f]="attribute A after definition is ignored [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute %0 after definition is ignored",
[b]=t,
[b]=t,
[g]="attribute (.*?) after definition is ignored",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="attribute %0 after definition is ignored",
[e]=u,
[a]="attribute (.*?) after definition is ignored",
[g]=L,
[h]=l,
[i]={"06e1b13209a8",1342067550,"Ignore visibility attributes after definitions. This matches newer (4.7) gcc\'s"},
[i]={"06e1b13209a8",1342067550,"Ignore visibility attributes after definitions. This matches newer (4.7) gcc\'s"},
[j]={{y,10383,"void Sema::ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc, Decl *TagDecl, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &AttrList) {\n  for (const ParsedAttr &AL : AttrList) {\n    Diag(AL.getLoc(), diag::warn_attribute_after_definition_ignored) << AL;"}}
[j]={{z,10383,"void Sema::ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc, Decl *TagDecl, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &AttrList) {\n  for (const ParsedAttr &AL : AttrList) {\n    Diag(AL.getLoc(), diag::warn_attribute_after_definition_ignored) << AL;"}},
[k]={
["clang/test/SemaCXX/attr-visibility.cpp"]={"clang/test/SemaCXX/attr-visibility.cpp:20:16: warning: attribute \'visibility\' after definition is ignored [-Wignored-attributes]"}
}
},
},
["warn_attribute_argument_n_negative"]={
["warn_attribute_argument_n_negative"]={
[c]="A attribute parameter B is negative and will be ignored [-Wcuda-compat]",
[f]="A attribute parameter B is negative and will be ignored [-Wcuda-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"cuda-compat"},
[r]={"cuda-compat"},
[q]="cuda-compat",
[q]="cuda-compat",
[h]="%0 attribute parameter %1 is negative and will be ignored",
[d]="%0 attribute parameter %1 is negative and will be ignored",
[b]=t,
[e]=u,
[g]="(.*?) attribute parameter (.*?) is negative and will be ignored",
[a]="(.*?) attribute parameter (.*?) is negative and will be ignored",
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"7093e4064116",1429656954,"[cuda] Allow using integral non-type template parameters as launch_bounds attribute arguments."},
[i]={"7093e4064116",1429656954,"[cuda] Allow using integral non-type template parameters as launch_bounds attribute arguments."},
[j]={{u,5624,"// 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 < 0)\n    S.Diag(E->getExprLoc(), diag::warn_attribute_argument_n_negative) << &AL << Idx << E->getSourceRange();"}}
[j]={{v,5624,"// 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 < 0)\n    S.Diag(E->getExprLoc(), diag::warn_attribute_argument_n_negative) << &AL << Idx << E->getSourceRange();"}},
[k]={
["clang/test/SemaCUDA/launch_bounds.cu"]={"clang/test/SemaCUDA/launch_bounds.cu:12:19: warning: \'launch_bounds\' attribute parameter 0 is negative and will be ignored [-Wcuda-compat]","clang/test/SemaCUDA/launch_bounds.cu:13:24: warning: \'launch_bounds\' attribute parameter 1 is negative and will be ignored [-Wcuda-compat]"}
}
},
},
["warn_attribute_cmse_entry_static"]={
["warn_attribute_cmse_entry_static"]={
[c]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage [-Wignored-attributes]",
[f]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage",
[b]=t,
[b]=t,
[g]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={ib,1576908663,jb},
[d]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage",
[j]={{u,2152,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FD->isExternallyVisible()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_cmse_entry_static);"}}
[e]=u,
[a]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage",
[g]=L,
[h]=l,
[i]={kb,1576908663,jb},
[j]={{v,2152,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FD->isExternallyVisible()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_cmse_entry_static);"}},
[k]={
["clang/test/Sema/arm-cmse.c"]={"clang/test/Sema/arm-cmse.c:17:38: warning: \'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage [-Wignored-attributes]"}
}
},
},
["warn_attribute_dll_instantiated_base_class"]={
["warn_attribute_dll_instantiated_base_class"]={
[c]="propagating dll attribute to ... base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]",
[f]="propagating dll attribute to ... base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"unsupported-dll-base-class-template"},
[r]={"unsupported-dll-base-class-template"},
[q]="unsupported-dll-base-class-template",
[q]="unsupported-dll-base-class-template",
[h]="propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported",
[d]="propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported",
[b]=t,
[e]=u,
[g]="propagating dll attribute to (?:already instantiated|explicitly specialized) base class template without dll attribute is not supported",
[a]="propagating dll attribute to (?:already instantiated|explicitly specialized) base class template without dll attribute is not supported",
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-dll\\-base\\-class\\-template[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-dll\\-base\\-class\\-template[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[j]={{y,6656,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  Diag(BaseLoc, diag::warn_attribute_dll_instantiated_base_class) << BaseTemplateSpec->isExplicitSpecialization();"}}
[j]={{z,6656,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  Diag(BaseLoc, diag::warn_attribute_dll_instantiated_base_class) << BaseTemplateSpec->isExplicitSpecialization();"}},
[k]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:501:80: warning: propagating dll attribute to explicitly specialized base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]","clang/test/SemaCXX/dllexport.cpp:513:81: warning: propagating dll attribute to already instantiated base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]"}
}
},
},
["warn_attribute_dll_redeclaration"]={
["warn_attribute_dll_redeclaration"]={
[c]="redeclaration of A should not add B attribute [-Wdll-attribute-on-redeclaration]",
[f]="redeclaration of A should not add B attribute [-Wdll-attribute-on-redeclaration]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"dll-attribute-on-redeclaration"},
[r]={"dll-attribute-on-redeclaration"},
[q]="dll-attribute-on-redeclaration",
[q]="dll-attribute-on-redeclaration",
[h]="redeclaration of %q0 should not add %q1 attribute",
[d]="redeclaration of %q0 should not add %q1 attribute",
[b]=t,
[e]=u,
[g]="redeclaration of (.*?) should not add (.*?) attribute",
[a]="redeclaration of (.*?) should not add (.*?) attribute",
[a]=" \\[(?:\\-Werror,)?\\-Wdll\\-attribute\\-on\\-redeclaration[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdll\\-attribute\\-on\\-redeclaration[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"dd96db2c034c",1409174860,"Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20..."},
[i]={"dd96db2c034c",1409174860,"Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20..."},
[j]={{v,7092,"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;"}}
[j]={{w,7092,"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;"}},
[k]={
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:52:34: warning: redeclaration of \'GlobalRedecl4\' should not add \'dllexport\' attribute [-Wdll-attribute-on-redeclaration]","clang/test/Sema/dllexport.c:112:28: warning: redeclaration of \'redecl6\' should not add \'dllexport\' attribute [-Wdll-attribute-on-redeclaration]"}
}
},
},
["warn_attribute_dllexport_explicit_instantiation_decl"]={
["warn_attribute_dllexport_explicit_instantiation_decl"]={
[c]="explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]",
[f]="explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"dllexport-explicit-instantiation-decl"},
[r]={"dllexport-explicit-instantiation-decl"},
[q]="dllexport-explicit-instantiation-decl",
[q]="dllexport-explicit-instantiation-decl",
[h]="explicit instantiation declaration should not be \'dllexport\'",
[d]="explicit instantiation declaration should not be \'dllexport\'",
[b]=t,
[e]=u,
[g]="explicit instantiation declaration should not be \'dllexport\'",
[a]="explicit instantiation declaration should not be \'dllexport\'",
[a]=" \\[(?:\\-Werror,)?\\-Wdllexport\\-explicit\\-instantiation\\-decl[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdllexport\\-explicit\\-instantiation\\-decl[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"fd76d9136601",1421356710,"Warn about dllexported explicit class template instantiation declarations (PR22035)"},
[i]={"fd76d9136601",1421356710,"Warn about dllexported explicit class template instantiation declarations (PR22035)"},
[j]={{x,9995,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation declarations,\n    // except for MinGW mode.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"},{x,10003,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    if (auto *A = ClassTemplate->getTemplatedDecl()->getAttr<DLLExportAttr>()) {\n      Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"}}
[j]={{y,9995,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation declarations,\n    // except for MinGW mode.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"},{y,10003,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    if (auto *A = ClassTemplate->getTemplatedDecl()->getAttr<DLLExportAttr>()) {\n      Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"}},
[k]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:383:1: warning: explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]","clang/test/SemaCXX/dllexport.cpp:418:1: warning: explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]","clang/test/SemaCXX/dllexport.cpp:425:1: warning: explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]"}
}
},
},
["warn_attribute_dllexport_explicit_instantiation_def"]={
["warn_attribute_dllexport_explicit_instantiation_def"]={
[c]="\'dllexport\' attribute ignored on explicit instantiation definition [-Wignored-attributes]",
[f]="\'dllexport\' attribute ignored on explicit instantiation definition [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'dllexport\' attribute ignored on explicit instantiation definition",
[b]=t,
[b]=t,
[g]="\'dllexport\' attribute ignored on explicit instantiation definition",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="\'dllexport\' attribute ignored on explicit instantiation definition",
[e]=u,
[a]="\'dllexport\' attribute ignored on explicit instantiation definition",
[g]=L,
[h]=l,
[i]={"5be69bc68a65",1556266191,"[MinGW] Fix dllexport of explicit template instantiation"},
[i]={"5be69bc68a65",1556266191,"[MinGW] Fix dllexport of explicit template instantiation"},
[j]={{x,10059,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDefinition && PrevDecl != nullptr && Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation definitions in MinGW\n    // mode, if a previous declaration of the instantiation was seen.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(AL.getLoc(), diag::warn_attribute_dllexport_explicit_instantiation_def);"}}
[j]={{y,10059,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDefinition && PrevDecl != nullptr && Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation definitions in MinGW\n    // mode, if a previous declaration of the instantiation was seen.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(AL.getLoc(), diag::warn_attribute_dllexport_explicit_instantiation_def);"}},
[k]={
["clang/test/CodeGenCXX/mingw-template-dllexport.cpp"]={"clang/test/CodeGenCXX/mingw-template-dllexport.cpp:23:27: warning: \'dllexport\' attribute ignored on explicit instantiation definition [-Wignored-attributes]"}
}
},
},
["warn_attribute_dllimport_static_field_definition"]={
["warn_attribute_dllimport_static_field_definition"]={
[c]="definition of dllimport static field [-Wdllimport-static-field-def]",
[f]="definition of dllimport static field [-Wdllimport-static-field-def]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"dllimport-static-field-def"},
[r]={"dllimport-static-field-def"},
[q]="dllimport-static-field-def",
[q]="dllimport-static-field-def",
[h]="definition of dllimport static field",
[d]="definition of dllimport static field",
[b]=t,
[e]=u,
[g]="definition of dllimport static field",
[a]="definition of dllimport static field",
[a]=" \\[(?:\\-Werror,)?\\-Wdllimport\\-static\\-field\\-def[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdllimport\\-static\\-field\\-def[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"e9af3164237f",1401841121,"Downgrade \"definition of dllimport static field\" error to warning for class templates (PR19902)"},
[i]={"e9af3164237f",1401841121,"Downgrade \"definition of dllimport static field\" error to warning for class templates (PR19902)"},
[j]={{v,14445,"/// 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]={{w,14445,"/// 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);"}},
[k]={
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1237:61: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1238:61: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1289:65: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1292:65: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1404:80: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1405:80: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1452:87: warning: definition of dllimport static field [-Wdllimport-static-field-def]","clang/test/SemaCXX/dllimport.cpp:1455:87: warning: definition of dllimport static field [-Wdllimport-static-field-def]"}
}
},
},
["warn_attribute_has_no_effect_on_compile_time_if"]={
["warn_attribute_has_no_effect_on_compile_time_if"]={
[c]="attribute A has no effect when annotating an \'if ...\' statement [-Wignored-attributes]",
[f]="attribute A has no effect when annotating an \'if ...\' statement [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute %0 has no effect when annotating an \'if %select{constexpr|consteval}1\' statement",
[b]=t,
[b]=t,
[g]="attribute (.*?) has no effect when annotating an \'if (?:constexpr|consteval)\' statement",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={Gb,1615397021,Cb},
[d]="attribute %0 has no effect when annotating an \'if %select{constexpr|consteval}1\' statement",
[j]={{O,909,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n    auto DiagnoseLikelihood = [&](const Stmt *S) {\n      if (const Attr *A = Stmt::getLikelihoodAttr(S)) {\n        Diags.Report(A->getLocation(), diag::warn_attribute_has_no_effect_on_compile_time_if) << A << ConstevalOrNegatedConsteval << A->getRange();"}}
[e]=u,
[a]="attribute (.*?) has no effect when annotating an \'if (?:constexpr|consteval)\' statement",
[g]=L,
[h]=l,
[i]={Mb,1615397021,Ib},
[j]={{P,909,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n    auto DiagnoseLikelihood = [&](const Stmt *S) {\n      if (const Attr *A = Stmt::getLikelihoodAttr(S)) {\n        Diags.Report(A->getLocation(), diag::warn_attribute_has_no_effect_on_compile_time_if) << A << ConstevalOrNegatedConsteval << A->getRange();"}},
[k]={
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:40:18: warning: attribute \'likely\' has no effect when annotating an \'if consteval\' statement [-Wignored-attributes]","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:45:10: warning: attribute \'unlikely\' has no effect when annotating an \'if consteval\' statement [-Wignored-attributes]"}
}
},
},
["warn_attribute_has_no_effect_on_infinite_loop"]={
["warn_attribute_has_no_effect_on_infinite_loop"]={
[c]="attribute A has no effect when annotating an infinite loop [-Wignored-attributes]",
[f]="attribute A has no effect when annotating an infinite loop [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute %0 has no effect when annotating an infinite loop",
[b]=t,
[b]=t,
[g]="attribute (.*?) has no effect when annotating an infinite loop",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={pb,1590001902,ob},
[d]="attribute %0 has no effect when annotating an infinite loop",
[j]={{"clang/lib/CodeGen/CGStmt.cpp",933,"void CodeGenFunction::EmitWhileStmt(const WhileStmt &S, ArrayRef<const Attr *> WhileAttrs) {\n  if (EmitBoolCondBranch) {\n  } else if (const Attr *A = Stmt::getLikelihoodAttr(S.getBody())) {\n    CGM.getDiags().Report(A->getLocation(), diag::warn_attribute_has_no_effect_on_infinite_loop) << A << A->getRange();"}}
[e]=u,
[a]="attribute (.*?) has no effect when annotating an infinite loop",
[g]=L,
[h]=l,
[i]={rb,1590001902,pb},
[j]={{"clang/lib/CodeGen/CGStmt.cpp",933,"void CodeGenFunction::EmitWhileStmt(const WhileStmt &S, ArrayRef<const Attr *> WhileAttrs) {\n  if (EmitBoolCondBranch) {\n  } else if (const Attr *A = Stmt::getLikelihoodAttr(S.getBody())) {\n    CGM.getDiags().Report(A->getLocation(), diag::warn_attribute_has_no_effect_on_infinite_loop) << A << A->getRange();"}},
[k]={
["clang/test/CodeGenCXX/attr-likelihood-iteration-stmt.cpp"]={"clang/test/CodeGenCXX/attr-likelihood-iteration-stmt.cpp:63:14: warning: attribute \'likely\' has no effect when annotating an infinite loop [-Wignored-attributes]"}
}
},
},
["warn_attribute_iboutlet"]={
["warn_attribute_iboutlet"]={
[c]="A attribute can only be applied to instance variables or properties [-Wignored-attributes]",
[f]="A attribute can only be applied to instance variables or properties [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute can only be applied to instance variables or properties",
[b]=t,
[b]=t,
[g]="(.*?) attribute can only be applied to instance variables or properties",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute can only be applied to instance variables or properties",
[e]=u,
[a]="(.*?) attribute can only be applied to instance variables or properties",
[g]=L,
[h]=l,
[i]={"d68ec818c351",1296802456,"Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance m..."},
[i]={"d68ec818c351",1296802456,"Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance m..."},
[j]={{u,1487,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_iboutlet) << AL;"}}
[j]={{v,1487,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_iboutlet) << AL;"}}
},
},
["warn_attribute_ignored"]={
["warn_attribute_ignored"]={
[c]="A attribute ignored [-Wignored-attributes]",
[f]="A attribute ignored [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute ignored",
[b]=t,
[b]=t,
[g]="(.*?) attribute ignored",
[c]=s,
[a]=J,
[r]={K,A},
[e]=l,
[q]=A,
[i]={L,1236199783,M},
[d]="%0 attribute ignored",
[j]={{Tb,3342,"/// 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          // GCC ignores this attribute when placed on the DeclSpec in [[]]\n          // syntax, so we do the same.\n          if (PA.getKind() == ParsedAttr::AT_VectorSize) {\n           Diag(PA.getLoc(), diag::warn_attribute_ignored) << PA;"},{"clang/lib/Parse/ParseStmt.cpp",343,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::kw_asm: {\n    for (const ParsedAttr &AL : CXX11Attrs)\n     (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"},{"clang/lib/Sema/ParsedAttr.cpp",184,"bool ParsedAttr::diagnoseLangOpts(Sema &S) const {\n S.Diag(getLoc(), diag::warn_attribute_ignored) << *this;"},{u,1428,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n  } else\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{u,2897,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // Visibility attributes don\'t mean anything on a typedef.\n if (isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored) << AL;"},{u,3846,"/// 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 if (!S.getLangOpts().CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{u,4887,"AlwaysInlineAttr *Sema::mergeAlwaysInlineAttr(Decl *D, const AttributeCommonInfo &CI, const IdentifierInfo *Ident) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n   Diag(CI.getLoc(), diag::warn_attribute_ignored) << Ident;"},{u,4943,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'minsize\'\";"},{u,4973,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(Inline->getLocation(), diag::warn_attribute_ignored) << Inline;"},{u,4978,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(MinSize->getLocation(), diag::warn_attribute_ignored) << MinSize;"},{u,8006,"DLLImportAttr *Sema::mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (D->hasAttr<DLLExportAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'dllimport\'\";"},{u,8019,"DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (DLLImportAttr *Import = D->getAttr<DLLImportAttr>()) {\n    Diag(Import->getLocation(), diag::warn_attribute_ignored) << Import;"},{u,8032,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (isa<ClassTemplatePartialSpecializationDecl>(D) && (S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n    S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored) << A;"},{hb,7805,"/// 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_CmseNSCall) {\n    // Ignore if we don\'t have CMSE enabled.\n    if (!S.getLangOpts().Cmse) {\n     S.Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"},{hb,8664,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n for (ParsedAttr &attr : AttrsCopy) {\n   case ParsedAttr::AT_NoDeref: {\n     // FIXME: `noderef` currently doesn\'t work correctly in [[]] syntax.\n     // See https://github.com/llvm/llvm-project/issues/55790 for details.\n      // For the time being, we simply emit a warning that the attribute is\n      // ignored.\n      if (attr.isStandardAttributeSyntax()) {\n        state.getSema().Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"}}
[e]=u,
[a]="(.*?) attribute ignored",
[g]=L,
[h]=m,
[i]={N,1236199783,M},
[j]={{Zb,3342,"/// 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         // GCC ignores this attribute when placed on the DeclSpec in [[]]\n          // syntax, so we do the same.\n          if (PA.getKind() == ParsedAttr::AT_VectorSize) {\n            Diag(PA.getLoc(), diag::warn_attribute_ignored) << PA;"},{"clang/lib/Parse/ParseStmt.cpp",343,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::kw_asm: {\n   for (const ParsedAttr &AL : CXX11Attrs)\n      (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"},{"clang/lib/Sema/ParsedAttr.cpp",184,"bool ParsedAttr::diagnoseLangOpts(Sema &S) const {\n  S.Diag(getLoc(), diag::warn_attribute_ignored) << *this;"},{v,1428,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n  } else\n   S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{v,2897,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n // Visibility attributes don\'t mean anything on a typedef.\n  if (isa<TypedefNameDecl>(D)) {\n   S.Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored) << AL;"},{v,3846,"/// 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  if (!S.getLangOpts().CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{v,4887,"AlwaysInlineAttr *Sema::mergeAlwaysInlineAttr(Decl *D, const AttributeCommonInfo &CI, const IdentifierInfo *Ident) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << Ident;"},{v,4943,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'minsize\'\";"},{v,4973,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(Inline->getLocation(), diag::warn_attribute_ignored) << Inline;"},{v,4978,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(MinSize->getLocation(), diag::warn_attribute_ignored) << MinSize;"},{v,8006,"DLLImportAttr *Sema::mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (D->hasAttr<DLLExportAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'dllimport\'\";"},{v,8019,"DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI) {\n if (DLLImportAttr *Import = D->getAttr<DLLImportAttr>()) {\n   Diag(Import->getLocation(), diag::warn_attribute_ignored) << Import;"},{v,8032,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n if (isa<ClassTemplatePartialSpecializationDecl>(D) && (S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n    S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored) << A;"},{cb,7805,"/// 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_CmseNSCall) {\n   // Ignore if we don\'t have CMSE enabled.\n   if (!S.getLangOpts().Cmse) {\n      S.Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"},{cb,8664,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    case ParsedAttr::AT_NoDeref: {\n      // FIXME: `noderef` currently doesn\'t work correctly in [[]] syntax.\n      // See https://github.com/llvm/llvm-project/issues/55790 for details.\n      // For the time being, we simply emit a warning that the attribute is\n      // ignored.\n      if (attr.isStandardAttributeSyntax()) {\n        state.getSema().Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"}},
[k]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:31:16: warning: \'always_inline\' attribute ignored [-Wignored-attributes]","clang/test/Sema/pragma-attribute.c:36:16: warning: \'always_inline\' attribute ignored [-Wignored-attributes]"}
}
},
},
["warn_attribute_ignored_for_field_of_type"]={
["warn_attribute_ignored_for_field_of_type"]={
[c]="A attribute ignored for field of type B [-Wignored-attributes]",
[f]="A attribute ignored for field of type B [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute ignored for field of type %1",
[b]=t,
[b]=t,
[g]="(.*?) attribute ignored for field of type (.*?)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="%0 attribute ignored for field of type %1",
[j]={{u,1415,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n    if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n      if (BitfieldByteAligned)\n        S.Diag(AL.getLoc(), diag::warn_attribute_ignored_for_field_of_type) << AL << FD->getType();"}}
[e]=u,
[a]="(.*?) attribute ignored for field of type (.*?)",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{v,1415,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n    if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n      if (BitfieldByteAligned)\n        S.Diag(AL.getLoc(), diag::warn_attribute_ignored_for_field_of_type) << AL << FD->getType();"}},
[k]={
["clang/test/Sema/struct-packed-align.c"]={"clang/test/Sema/struct-packed-align.c:154:29: warning: \'packed\' attribute ignored for field of type \'char\' [-Wignored-attributes]"}
}
},
},
["warn_attribute_ignored_no_calls_in_stmt"]={
["warn_attribute_ignored_no_calls_in_stmt"]={
[c]="A attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]",
[f]="A attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute is ignored because there exists no call expression inside the statement",
[b]=t,
[b]=t,
[g]="(.*?) attribute is ignored because there exists no call expression inside the statement",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute is ignored because there exists no call expression inside the statement",
[e]=u,
[a]="(.*?) attribute is ignored because there exists no call expression inside the statement",
[g]=L,
[h]=l,
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[j]={{"clang/lib/Sema/SemaStmtAttr.cpp",211,"static Attr *handleNoMergeAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!CEF.foundCallExpr() && !CEF.foundAsmStmt()) {\n    S.Diag(St->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"},{"clang/lib/Sema/SemaStmtAttr.cpp",238,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  if (!CEF.foundCallExpr()) {\n    return SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"}}
[j]={{"clang/lib/Sema/SemaStmtAttr.cpp",211,"static Attr *handleNoMergeAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!CEF.foundCallExpr() && !CEF.foundAsmStmt()) {\n    S.Diag(St->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"},{"clang/lib/Sema/SemaStmtAttr.cpp",238,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  if (!CEF.foundCallExpr()) {\n    return SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"}},
[k]={
["clang/test/Parser/stmt-attributes.m"]={"clang/test/Parser/stmt-attributes.m:31:28: warning: \'nomerge\' attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]","clang/test/Parser/stmt-attributes.m:37:28: warning: \'nomerge\' attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]","clang/test/Parser/stmt-attributes.m:51:28: warning: \'nomerge\' attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]","clang/test/Parser/stmt-attributes.m:54:28: warning: \'nomerge\' attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]"}
}
},
},
["warn_attribute_ignored_non_function_pointer"]={
["warn_attribute_ignored_non_function_pointer"]={
[c]="A attribute is ignored because B is not a function pointer [-Wignored-attributes]",
[f]="A attribute is ignored because B is not a function pointer [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute is ignored because %1 is not a function pointer",
[b]=t,
[b]=t,
[g]="(.*?) attribute is ignored because (.*?) is not a function pointer",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={Z,1625925174,Y},
[d]="%0 attribute is ignored because %1 is not a function pointer",
[j]={{u,8382,"static void handleNoMergeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VDecl && !VDecl->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored_non_function_pointer) << AL << VDecl;"}}
[e]=u,
[a]="(.*?) attribute is ignored because (.*?) is not a function pointer",
[g]=L,
[h]=l,
[i]={ab,1625925174,Z},
[j]={{v,8382,"static void handleNoMergeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VDecl && !VDecl->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored_non_function_pointer) << AL << VDecl;"}},
[k]={
["clang/test/Parser/stmt-attributes.c"]={"clang/test/Parser/stmt-attributes.c:91:16: warning: \'nomerge\' attribute is ignored because \'i\' is not a function pointer [-Wignored-attributes]"}
}
},
},
["warn_attribute_ignored_on_inline"]={
["warn_attribute_ignored_on_inline"]={
[c]="A attribute ignored on inline function [-Wignored-attributes]",
[f]="A attribute ignored on inline function [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute ignored on inline function",
[b]=t,
[b]=t,
[g]="(.*?) attribute ignored on inline function",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute ignored on inline function",
[e]=u,
[a]="(.*?) attribute ignored on inline function",
[g]=L,
[h]=l,
[i]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)"},
[i]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)"},
[j]={{u,8040,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isInlined() && A.getKind() == ParsedAttr::AT_DLLImport && !(S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n      S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored_on_inline) << A;"}}
[j]={{v,8040,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isInlined() && A.getKind() == ParsedAttr::AT_DLLImport && !(S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n      S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored_on_inline) << A;"}},
[k]={
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:172:12: warning: \'dllimport\' attribute ignored on inline function [-Wignored-attributes]","clang/test/Sema/dllimport.c:173:28: warning: \'dllimport\' attribute ignored on inline function [-Wignored-attributes]","clang/test/Sema/dllimport.c:217:12: warning: \'dllimport\' attribute ignored on inline function [-Wignored-attributes]"}
}
},
},
["warn_attribute_ignored_on_non_definition"]={
["warn_attribute_ignored_on_non_definition"]={
[c]="A attribute ignored on a non-definition declaration [-Wignored-attributes]",
[f]="A attribute ignored on a non-definition declaration [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute ignored on a non-definition declaration",
[b]=t,
[b]=t,
[g]="(.*?) attribute ignored on a non\\-definition declaration",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={pb,1590001902,ob},
[d]="%0 attribute ignored on a non-definition declaration",
[j]={{v,14471,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (UsedAttr *Attr = VD->getAttr<UsedAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"},{v,14478,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (RetainAttr *Attr = VD->getAttr<RetainAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"}}
[e]=u,
[a]="(.*?) attribute ignored on a non\\-definition declaration",
[g]=L,
[h]=l,
[i]={rb,1590001902,pb},
[j]={{w,14471,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (UsedAttr *Attr = VD->getAttr<UsedAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"},{w,14478,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (RetainAttr *Attr = VD->getAttr<RetainAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"}},
[k]={
["clang/test/Sema/attr-used.c"]={"clang/test/Sema/attr-used.c:3:30: warning: \'used\' attribute ignored on a non-definition declaration [-Wignored-attributes]","clang/test/Sema/attr-used.c:4:42: warning: \'used\' attribute ignored on a non-definition declaration [-Wignored-attributes]"}
}
},
},
["warn_attribute_invalid_on_definition"]={
["warn_attribute_invalid_on_definition"]={
[c]="\'A\' attribute cannot be specified on a definition [-Wignored-attributes]",
[f]="\'A\' attribute cannot be specified on a definition [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'%0\' attribute cannot be specified on a definition",
[b]=t,
[b]=t,
[g]="\'(.*?)\' attribute cannot be specified on a definition",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="\'%0\' attribute cannot be specified on a definition",
[e]=u,
[a]="\'(.*?)\' attribute cannot be specified on a definition",
[g]=L,
[h]=l,
[i]={"52d598e24269",1369086809,"Warn on and drop dllimport attrs from variable definitions"},
[i]={"52d598e24269",1369086809,"Warn on and drop dllimport attrs from variable definitions"},
[j]={{u,3195,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n      S.Diag(AL.getLoc(), diag::warn_attribute_invalid_on_definition) << \"weak_import\";"}}
[j]={{v,3195,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n      S.Diag(AL.getLoc(), diag::warn_attribute_invalid_on_definition) << \"weak_import\";"}},
[k]={
["clang/test/Sema/2009-03-09-WeakDeclarations-1.c"]={"clang/test/Sema/2009-03-09-WeakDeclarations-1.c:8:38: warning: \'weak_import\' attribute cannot be specified on a definition [-Wignored-attributes]","clang/test/Sema/2009-03-09-WeakDeclarations-1.c:9:50: warning: \'weak_import\' attribute cannot be specified on a definition [-Wignored-attributes]"}
}
},
},
["warn_attribute_no_builtin_invalid_builtin_name"]={
["warn_attribute_no_builtin_invalid_builtin_name"]={
[c]="\'A\' is not a valid builtin name for B [-Winvalid-no-builtin-names]",
[f]="\'A\' is not a valid builtin name for B [-Winvalid-no-builtin-names]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"invalid-no-builtin-names"},
[r]={"invalid-no-builtin-names"},
[q]="invalid-no-builtin-names",
[q]="invalid-no-builtin-names",
[h]="\'%0\' is not a valid builtin name for %1",
[d]="\'%0\' is not a valid builtin name for %1",
[b]=t,
[e]=u,
[g]="\'(.*?)\' is not a valid builtin name for (.*?)",
[a]="\'(.*?)\' is not a valid builtin name for (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-no\\-builtin\\-names[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-no\\-builtin\\-names[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{u,1153,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Add current attributes.\n  if (AL.getNumArgs() == 0)\n  else\n    for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n      if (Builtin::Context::isBuiltinFunc(BuiltinName))\n      else\n        S.Diag(LiteralLoc, diag::warn_attribute_no_builtin_invalid_builtin_name) << BuiltinName << AL;"}}
[j]={{v,1153,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Add current attributes.\n  if (AL.getNumArgs() == 0)\n  else\n    for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n      if (Builtin::Context::isBuiltinFunc(BuiltinName))\n      else\n        S.Diag(LiteralLoc, diag::warn_attribute_no_builtin_invalid_builtin_name) << BuiltinName << AL;"}},
[k]={
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:18:50: warning: \'not_a_builtin\' is not a valid builtin name for \'no_builtin\' [-Winvalid-no-builtin-names]"}
}
},
},
["warn_attribute_no_decl"]={
["warn_attribute_no_decl"]={
[c]="attribute A ignored, because it is not attached to a declaration [-Wignored-attributes]",
[f]="attribute A ignored, because it is not attached to a declaration [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute %0 ignored, because it is not attached to a declaration",
[b]=t,
[b]=t,
[g]="attribute (.*?) ignored, because it is not attached to a declaration",
[c]=s,
[a]=J,
[r]={K,A},
[e]=Q,
[q]=A,
[d]="attribute %0 ignored, because it is not attached to a declaration",
[e]=u,
[a]="attribute (.*?) ignored, because it is not attached to a declaration",
[g]=L,
[h]=Q,
[i]={"71d610329554",1330727390,"Issue warning when late-parsed attributes have no declaration."},
[i]={"71d610329554",1330727390,"Issue warning when late-parsed attributes have no declaration."},
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",767,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (LA.Decls.size() > 0) {\n  } else {\n    Diag(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName();"}}
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",767,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (LA.Decls.size() > 0) {\n  } else {\n    Diag(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName();"}},
[k]={
["clang/test/Parser/cxx-attributes.cpp"]={"clang/test/Parser/cxx-attributes.cpp:17:69: warning: attribute locks_excluded ignored, because it is not attached to a declaration [-Wignored-attributes]"}
}
},
},
["warn_attribute_nonnull_no_pointers"]={
["warn_attribute_nonnull_no_pointers"]={
[c]="\'nonnull\' attribute applied to function with no pointer arguments [-Wignored-attributes]",
[f]="\'nonnull\' attribute applied to function with no pointer arguments [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'nonnull\' attribute applied to function with no pointer arguments",
[b]=t,
[b]=t,
[g]="\'nonnull\' attribute applied to function with no pointer arguments",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="\'nonnull\' attribute applied to function with no pointer arguments",
[j]={{u,1618,"static void handleNonNullAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // If no arguments were specified to __attribute__((nonnull)) then all pointer\n  // arguments have a nonnull attribute; warn if there aren\'t any. Skip this\n  // check if the attribute came from a macro expansion or a template\n  // instantiation.\n  if (NonNullArgs.empty() && AL.getLoc().isFileID() && !S.inTemplateInstantiation()) {\n    if (!AnyPointers)\n      S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_no_pointers);"}}
[e]=u,
[a]="\'nonnull\' attribute applied to function with no pointer arguments",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{v,1618,"static void handleNonNullAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // If no arguments were specified to __attribute__((nonnull)) then all pointer\n  // arguments have a nonnull attribute; warn if there aren\'t any. Skip this\n  // check if the attribute came from a macro expansion or a template\n  // instantiation.\n  if (NonNullArgs.empty() && AL.getLoc().isFileID() && !S.inTemplateInstantiation()) {\n    if (!AnyPointers)\n      S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_no_pointers);"}},
[k]={
["clang/test/Sema/attr-nonnull.c"]={"clang/test/Sema/attr-nonnull.c:7:30: warning: \'nonnull\' attribute applied to function with no pointer arguments [-Wignored-attributes]"}
}
},
},
["warn_attribute_nonnull_parm_no_args"]={
["warn_attribute_nonnull_parm_no_args"]={
[c]="\'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]",
[f]="\'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'nonnull\' attribute when used on parameters takes no arguments",
[b]=t,
[b]=t,
[g]="\'nonnull\' attribute when used on parameters takes no arguments",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="\'nonnull\' attribute when used on parameters takes no arguments",
[e]=u,
[a]="\'nonnull\' attribute when used on parameters takes no arguments",
[g]=L,
[h]=l,
[i]={"9aedc159ef4c",1389939896,"Enhance attribute \'nonnull\' to be applicable to parameters directly (infix)."},
[i]={"9aedc159ef4c",1389939896,"Enhance attribute \'nonnull\' to be applicable to parameters directly (infix)."},
[j]={{u,1633,"static void handleNonNullAttrParameter(Sema &S, ParmVarDecl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (D->getFunctionType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_parm_no_args) << D->getSourceRange();"}}
[j]={{v,1633,"static void handleNonNullAttrParameter(Sema &S, ParmVarDecl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (D->getFunctionType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_parm_no_args) << D->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/nonnull.m"]={"clang/test/SemaObjC/nonnull.m:106:60: warning: \'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]"}
}
},
},
["warn_attribute_not_on_decl"]={
["warn_attribute_not_on_decl"]={
[c]="A attribute ignored when parsing type [-Wignored-attributes]",
[f]="A attribute ignored when parsing type [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute ignored when parsing type",
[b]=t,
[b]=t,
[g]="(.*?) attribute ignored when parsing type",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute ignored when parsing type",
[e]=u,
[a]="(.*?) attribute ignored when parsing type",
[g]=L,
[h]=l,
[i]={"42856de54283",1317446223,"Hey, maybe we shouldn\'t silently ignore decl attributes"},
[i]={"42856de54283",1317446223,"Hey, maybe we shouldn\'t silently ignore decl attributes"},
[j]={{u,9621,"/// checkUnusedDeclAttributes - Check a list of attributes to see if it\n/// contains any decl attributes that we should warn about.\nstatic void checkUnusedDeclAttributes(Sema &S, const ParsedAttributesView &A) {\n  for (const ParsedAttr &AL : A) {\n    if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_not_on_decl) << AL << AL.getRange();"}}
[j]={{v,9621,"/// checkUnusedDeclAttributes - Check a list of attributes to see if it\n/// contains any decl attributes that we should warn about.\nstatic void checkUnusedDeclAttributes(Sema &S, const ParsedAttributesView &A) {\n  for (const ParsedAttr &AL : A) {\n    if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_not_on_decl) << AL << AL.getRange();"}},
[k]={
["clang/test/SemaCXX/using-declspec.cpp"]={"clang/test/SemaCXX/using-declspec.cpp:5:27: warning: \'align\' attribute ignored when parsing type [-Wignored-attributes]","clang/test/SemaCXX/using-declspec.cpp:15:21: warning: \'align\' attribute ignored when parsing type [-Wignored-attributes]"}
}
},
},
["warn_attribute_on_function_definition"]={
["warn_attribute_on_function_definition"]={
[c]="GCC does not allow A attribute in this position on a function definition [-Wgcc-compat]",
[f]="GCC does not allow A attribute in this position on a function definition [-Wgcc-compat]",
[d]=s,
[f]=r,
[p]={cc},
[q]=cc,
[h]="GCC does not allow %0 attribute in this position on a function definition",
[b]=t,
[b]=t,
[g]="GCC does not allow (.*?) attribute in this position on a function definition",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[r]={uc},
[e]=Q,
[q]=uc,
[d]="GCC does not allow %0 attribute in this position on a function definition",
[e]=u,
[a]="GCC does not allow (.*?) attribute in this position on a function definition",
[g]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[h]=Q,
[i]={"3fc6e4a7cda9",1329411043,"Allow thread safety attributes on function definitions."},
[i]={"3fc6e4a7cda9",1329411043,"Allow thread safety attributes on function definitions."},
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",772,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (OnDefinition && !Attrs.empty() && !Attrs.begin()->isCXX11Attribute() && Attrs.begin()->isKnownToGCC())\n    Diag(Tok, diag::warn_attribute_on_function_definition) << &LA.AttrName;"},{"clang/lib/Parse/Parser.cpp",1295,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // Check to make sure that any normal attributes are allowed to be on\n  // a definition.  Late parsed attributes are checked at the end.\n  if (Tok.isNot(tok::equal)) {\n    for (const ParsedAttr &AL : D.getAttributes())\n      if (AL.isKnownToGCC() && !AL.isStandardAttributeSyntax())\n        Diag(AL.getLoc(), diag::warn_attribute_on_function_definition) << AL;"}}
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",772,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (OnDefinition && !Attrs.empty() && !Attrs.begin()->isCXX11Attribute() && Attrs.begin()->isKnownToGCC())\n    Diag(Tok, diag::warn_attribute_on_function_definition) << &LA.AttrName;"},{"clang/lib/Parse/Parser.cpp",1295,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // Check to make sure that any normal attributes are allowed to be on\n  // a definition.  Late parsed attributes are checked at the end.\n  if (Tok.isNot(tok::equal)) {\n    for (const ParsedAttr &AL : D.getAttributes())\n      if (AL.isKnownToGCC() && !AL.isStandardAttributeSyntax())\n        Diag(AL.getLoc(), diag::warn_attribute_on_function_definition) << AL;"}},
[k]={
["clang/test/Parser/attributes.c"]={"clang/test/Parser/attributes.c:67:40: warning: GCC does not allow \'nonnull\' attribute in this position on a function definition [-Wgcc-compat]","clang/test/Parser/attributes.c:73:39: warning: GCC does not allow \'noreturn\' attribute in this position on a function definition [-Wgcc-compat]","clang/test/Parser/attributes.c:78:40: warning: GCC does not allow \'nonnull\' attribute in this position on a function definition [-Wgcc-compat]","clang/test/Parser/attributes.c:80:38: warning: GCC does not allow \'pure\' attribute in this position on a function definition [-Wgcc-compat]","clang/test/Parser/attributes.c:85:40: warning: GCC does not allow \'nonnull\' attribute in this position on a function definition [-Wgcc-compat]","clang/test/Parser/attributes.c:87:36: warning: GCC does not allow \'pure\' attribute in this position on a function definition [-Wgcc-compat]"}
}
},
},
["warn_attribute_packed_for_bitfield"]={
["warn_attribute_packed_for_bitfield"]={
[c]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang [-Wattribute-packed-for-bitfield]",
[f]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang [-Wattribute-packed-for-bitfield]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"attribute-packed-for-bitfield"},
[r]={"attribute-packed-for-bitfield"},
[q]="attribute-packed-for-bitfield",
[q]="attribute-packed-for-bitfield",
[h]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang",
[d]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang",
[b]=t,
[e]=u,
[g]="\'packed\' attribute was ignored on bit\\-fields with single\\-byte alignment in older versions of GCC and Clang",
[a]="\'packed\' attribute was ignored on bit\\-fields with single\\-byte alignment in older versions of GCC and Clang",
[a]=" \\[(?:\\-Werror,)?\\-Wattribute\\-packed\\-for\\-bitfield[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wattribute\\-packed\\-for\\-bitfield[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"830dfccfb2c0",1449135289,"PR25575: Make GCC 4.4+ comatible layout for packed bit-fileds of char type, patch by D. Polukhin"},
[i]={"830dfccfb2c0",1449135289,"PR25575: Make GCC 4.4+ comatible layout for packed bit-fileds of char type, patch by D. Polukhin"},
[j]={{u,1422,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n    if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n    } else {\n      // Report warning about changed offset in the newer compiler versions.\n      if (BitfieldByteAligned)\n        S.Diag(AL.getLoc(), diag::warn_attribute_packed_for_bitfield);"}}
[j]={{v,1422,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n    if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n    } else {\n      // Report warning about changed offset in the newer compiler versions.\n      if (BitfieldByteAligned)\n        S.Diag(AL.getLoc(), diag::warn_attribute_packed_for_bitfield);"}},
[k]={
["clang/test/Sema/struct-packed-align.c"]={"clang/test/Sema/struct-packed-align.c:157:29: warning: \'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang [-Wattribute-packed-for-bitfield]"}
}
},
},
["warn_attribute_pointer_or_reference_only"]={
["warn_attribute_pointer_or_reference_only"]={
[c]="A attribute only applies to a pointer or reference (B is invalid) [-Wignored-attributes]",
[f]="A attribute only applies to a pointer or reference (B is invalid) [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute only applies to a pointer or reference (%1 is invalid)",
[b]=t,
[b]=t,
[g]="(.*?) attribute only applies to a pointer or reference \\((.*?) is invalid\\)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute only applies to a pointer or reference (%1 is invalid)",
[e]=u,
[a]="(.*?) attribute only applies to a pointer or reference \\((.*?) is invalid\\)",
[g]=L,
[h]=l,
[i]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute"},
[i]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute"},
[j]={{u,4323,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!T->isDependentType() && !T->isAnyPointerType() && !T->isReferenceType() && !T->isMemberPointerType()) {\n    Diag(AttrLoc, diag::warn_attribute_pointer_or_reference_only) << &TmpAttr << T << D->getSourceRange();"}}
[j]={{v,4323,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!T->isDependentType() && !T->isAnyPointerType() && !T->isReferenceType() && !T->isMemberPointerType()) {\n    Diag(AttrLoc, diag::warn_attribute_pointer_or_reference_only) << &TmpAttr << T << D->getSourceRange();"}},
[k]={
["clang/test/Sema/align_value.c"]={"clang/test/Sema/align_value.c:26:28: warning: \'align_value\' attribute only applies to a pointer or reference (\'int\' is invalid) [-Wignored-attributes]"}
}
},
},
["warn_attribute_pointers_only"]={
["warn_attribute_pointers_only"]={
[c]="A attribute only applies to... pointer arguments [-Wignored-attributes]",
[f]="A attribute only applies to... pointer arguments [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute only applies to%select{| constant}1 pointer arguments",
[b]=t,
[b]=t,
[g]="(.*?) attribute only applies to(?:| constant) pointer arguments",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute only applies to%select{| constant}1 pointer arguments",
[e]=u,
[a]="(.*?) attribute only applies to(?:| constant) pointer arguments",
[g]=L,
[h]=l,
[i]={"cedaaea69127",1388077669,"This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diag..."},
[i]={"cedaaea69127",1388077669,"This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diag..."},
[j]={{u,1577,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n    else\n      S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AttrParmRange << TypeRange << 0;"},{u,1664,"static void handleNoEscapeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.isValidPointerAttrType(T, /* RefOkay */ true)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AL.getRange() << 0;"}}
[j]={{v,1577,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n    else\n      S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AttrParmRange << TypeRange << 0;"},{v,1664,"static void handleNoEscapeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.isValidPointerAttrType(T, /* RefOkay */ true)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AL.getRange() << 0;"}},
[k]={
["clang/test/SemaObjC/nonnull.m"]={"clang/test/SemaObjC/nonnull.m:104:66: warning: \'nonnull\' attribute only applies to pointer arguments [-Wignored-attributes]"}
}
},
},
["warn_attribute_precede_definition"]={
["warn_attribute_precede_definition"]={
[c]="attribute declaration must precede definition [-Wignored-attributes]",
[f]="attribute declaration must precede definition [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute declaration must precede definition",
[b]=t,
[b]=t,
[g]="attribute declaration must precede definition",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="attribute declaration must precede definition",
[e]=u,
[a]="attribute declaration must precede definition",
[g]=L,
[h]=l,
[i]={"e5dc8594ea99",1248560984,"PR3575 - warn on declared variable or function attributes after a definition, which are currently ig..."},
[i]={"e5dc8594ea99",1248560984,"PR3575 - warn on declared variable or function attributes after a definition, which are currently ig..."},
[j]={{v,3122,"/// 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    S.Diag(NewAttribute->getLocation(), diag::warn_attribute_precede_definition);"}}
[j]={{w,3122,"/// 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    S.Diag(NewAttribute->getLocation(), diag::warn_attribute_precede_definition);"}},
[k]={
["clang/test/Sema/attr-target-mv.c"]={"clang/test/Sema/attr-target-mv.c:60:20: warning: attribute declaration must precede definition [-Wignored-attributes]"}
}
},
},
["warn_attribute_protected_visibility"]={
["warn_attribute_protected_visibility"]={
[c]="target does not support \'protected\' visibility; using \'default\' [-Wunsupported-visibility]",
[f]="target does not support \'protected\' visibility; using \'default\' [-Wunsupported-visibility]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"unsupported-visibility"},
[r]={"unsupported-visibility"},
[q]="unsupported-visibility",
[q]="unsupported-visibility",
[h]="target does not support \'protected\' visibility; using \'default\'",
[d]="target does not support \'protected\' visibility; using \'default\'",
[b]=t,
[e]=u,
[g]="target does not support \'protected\' visibility; using \'default\'",
[a]="target does not support \'protected\' visibility; using \'default\'",
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-visibility[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-visibility[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"eed64c77d27f",1327800030,"Complain about attempts to use \'protected\' visibility on targets"},
[i]={"eed64c77d27f",1327800030,"Complain about attempts to use \'protected\' visibility on targets"},
[j]={{u,2926,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // Complain about attempts to use protected visibility on targets\n  // (like Darwin) that don\'t support it.\n  if (type == VisibilityAttr::Protected && !S.Context.getTargetInfo().hasProtectedVisibility()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_protected_visibility);"}}
[j]={{v,2926,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // Complain about attempts to use protected visibility on targets\n  // (like Darwin) that don\'t support it.\n  if (type == VisibilityAttr::Protected && !S.Context.getTargetInfo().hasProtectedVisibility()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_protected_visibility);"}},
[k]={
["clang/test/Sema/attr-visibility.c"]={"clang/test/Sema/attr-visibility.c:8:33: warning: target does not support \'protected\' visibility; using \'default\' [-Wunsupported-visibility]"}
}
},
},
["warn_attribute_return_pointers_only"]={
["warn_attribute_return_pointers_only"]={
[c]="A attribute only applies to return values that are pointers [-Wignored-attributes]",
[f]="A attribute only applies to return values that are pointers [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute only applies to return values that are pointers",
[b]=t,
[b]=t,
[g]="(.*?) attribute only applies to return values that are pointers",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute only applies to return values that are pointers",
[e]=u,
[a]="(.*?) attribute only applies to return values that are pointers",
[g]=L,
[h]=l,
[i]={"dbf62e3eee51",1390197047,"Wire up basic parser/sema support for attribute \'returns_nonnull\'."},
[i]={"dbf62e3eee51",1390197047,"Wire up basic parser/sema support for attribute \'returns_nonnull\'."},
[j]={{u,835,"static void handleAllocSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RetTy->isPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL;"},{u,1574,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n      S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << AttrParmRange << TypeRange;"},{u,2058,"static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << getFunctionOrMethodResultSourceRange(D);"}}
[j]={{v,835,"static void handleAllocSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RetTy->isPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL;"},{v,1574,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n      S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << AttrParmRange << TypeRange;"},{v,2058,"static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << getFunctionOrMethodResultSourceRange(D);"}},
[k]={
["clang/test/Sema/alloc-size.c"]={"clang/test/Sema/alloc-size.c:15:33: warning: \'alloc_size\' attribute only applies to return values that are pointers [-Wignored-attributes]"}
}
},
},
["warn_attribute_return_pointers_refs_only"]={
["warn_attribute_return_pointers_refs_only"]={
[c]="A attribute only applies to return values that are pointers or references [-Wignored-attributes]",
[f]="A attribute only applies to return values that are pointers or references [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute only applies to return values that are pointers or references",
[b]=t,
[b]=t,
[g]="(.*?) attribute only applies to return values that are pointers or references",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 attribute only applies to return values that are pointers or references",
[e]=u,
[a]="(.*?) attribute only applies to return values that are pointers or references",
[g]=L,
[h]=l,
[i]={"ee90a223ead9",1411707870,"Support the assume_aligned function attribute"},
[i]={"ee90a223ead9",1411707870,"Support the assume_aligned function attribute"},
[j]={{u,1691,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << TmpAttr.getRange() << SR;"},{u,1740,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  if (!ResultType->isDependentType() && !isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << CI.getRange() << getFunctionOrMethodResultSourceRange(D);"}}
[j]={{v,1691,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << TmpAttr.getRange() << SR;"},{v,1740,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  if (!ResultType->isDependentType() && !isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << CI.getRange() << getFunctionOrMethodResultSourceRange(D);"}},
[k]={
["clang/test/Sema/alloc-align-attr.c"]={"clang/test/Sema/alloc-align-attr.c:4:49: warning: \'alloc_align\' attribute only applies to return values that are pointers or references [-Wignored-attributes]"}
}
},
},
["warn_attribute_section_drectve"]={
["warn_attribute_section_drectve"]={
[c]="#pragma A(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]",
[f]="#pragma A(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"microsoft","microsoft-drectve-section"},
[r]={"microsoft","microsoft-drectve-section"},
[q]="microsoft-drectve-section",
[q]="microsoft-drectve-section",
[h]="#pragma %0(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead",
[d]="#pragma %0(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead",
[b]=t,
[e]=u,
[g]="\\#pragma (.*?)\\(\"\\.drectve\"\\) has undefined behavior, use \\#pragma comment\\(linker, \\.\\.\\.\\) instead",
[a]="\\#pragma (.*?)\\(\"\\.drectve\"\\) has undefined behavior, use \\#pragma comment\\(linker, \\.\\.\\.\\) instead",
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-drectve\\-section[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-drectve\\-section[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"9801621616b2",1562630543,"clang-cl: Port cl.exe\'s C4659 to clang-cl"},
[i]={"9801621616b2",1562630543,"clang-cl: Port cl.exe\'s C4659 to clang-cl"},
[j]={{sb,756,"/// Called on well formed \\#pragma bss_seg().\nvoid Sema::ActOnPragmaMSSeg(SourceLocation PragmaLocation, PragmaMsStackAction Action, llvm::StringRef StackSlotLabel, StringLiteral *SegmentName, llvm::StringRef PragmaName) {\n  if (SegmentName) {\n    if (SegmentName->getString() == \".drectve\" && Context.getTargetInfo().getCXXABI().isMicrosoft())\n      Diag(PragmaLocation, diag::warn_attribute_section_drectve) << PragmaName;"}}
[j]={{wb,756,"/// Called on well formed \\#pragma bss_seg().\nvoid Sema::ActOnPragmaMSSeg(SourceLocation PragmaLocation, PragmaMsStackAction Action, llvm::StringRef StackSlotLabel, StringLiteral *SegmentName, llvm::StringRef PragmaName) {\n  if (SegmentName) {\n    if (SegmentName->getString() == \".drectve\" && Context.getTargetInfo().getCXXABI().isMicrosoft())\n      Diag(PragmaLocation, diag::warn_attribute_section_drectve) << PragmaName;"}},
[k]={
["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:46:9: warning: #pragma bss_seg(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]","clang/test/Sema/pragma-section.c:47:9: warning: #pragma code_seg(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]","clang/test/Sema/pragma-section.c:48:9: warning: #pragma const_seg(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]","clang/test/Sema/pragma-section.c:49:9: warning: #pragma data_seg(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]"}
}
},
},
["warn_attribute_section_on_redeclaration"]={
["warn_attribute_section_on_redeclaration"]={
[c]="section attribute is specified on redeclared variable [-Wsection]",
[f]="section attribute is specified on redeclared variable [-Wsection]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"section"},
[r]={"section"},
[q]="section",
[q]="section",
[h]="section attribute is specified on redeclared variable",
[d]="section attribute is specified on redeclared variable",
[b]=t,
[e]=u,
[g]="section attribute is specified on redeclared variable",
[a]="section attribute is specified on redeclared variable",
[a]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. "},
[i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. "},
[j]={{v,3272,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // This redeclaration adds a section attribute.\n  if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) {\n    if (auto *VD = dyn_cast<VarDecl>(New)) {\n      if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly) {\n        Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration);"}}
[j]={{w,3272,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // This redeclaration adds a section attribute.\n  if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) {\n    if (auto *VD = dyn_cast<VarDecl>(New)) {\n      if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly) {\n        Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration);"}},
[k]={
["clang/test/SemaCXX/attr-section.cpp"]={"clang/test/SemaCXX/attr-section.cpp:21:12: warning: section attribute is specified on redeclared variable [-Wsection]"}
}
},
},
["warn_attribute_sentinel_named_arguments"]={
["warn_attribute_sentinel_named_arguments"]={
[c]="\'sentinel\' attribute requires named arguments [-Wignored-attributes]",
[f]="\'sentinel\' attribute requires named arguments [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'sentinel\' attribute requires named arguments",
[b]=t,
[b]=t,
[g]="\'sentinel\' attribute requires named arguments",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="\'sentinel\' attribute requires named arguments",
[e]=u,
[a]="\'sentinel\' attribute requires named arguments",
[g]=L,
[h]=l,
[i]={"9363e3106edc",1237331027,"don\'t crash when sentinel attribute is used on function without a prototype,"},
[i]={"9363e3106edc",1237331027,"don\'t crash when sentinel attribute is used on function without a prototype,"},
[j]={{u,3091,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (isa<FunctionNoProtoType>(FT)) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_named_arguments);"}}
[j]={{v,3091,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (isa<FunctionNoProtoType>(FT)) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_named_arguments);"}},
[k]={
["clang/test/Sema/sentinel-attribute.c"]={"clang/test/Sema/sentinel-attribute.c:19:26: warning: \'sentinel\' attribute requires named arguments [-Wignored-attributes]"}
}
},
},
["warn_attribute_sentinel_not_variadic"]={
["warn_attribute_sentinel_not_variadic"]={
[c]="\'sentinel\' attribute only supported for variadic ... [-Wignored-attributes]",
[f]="\'sentinel\' attribute only supported for variadic ... [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="\'sentinel\' attribute only supported for variadic %select{functions|blocks}0",
[b]=t,
[b]=t,
[g]="\'sentinel\' attribute only supported for variadic (?:functions|blocks)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="\'sentinel\' attribute only supported for variadic %select{functions|blocks}0",
[j]={{u,3096,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{u,3101,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n    if (!MD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{u,3106,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n    if (!BD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 1;"},{u,3119,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n      if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n        S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << m;"}}
[e]=u,
[a]="\'sentinel\' attribute only supported for variadic (?:functions|blocks)",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{v,3096,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{v,3101,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n    if (!MD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{v,3106,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n    if (!BD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 1;"},{v,3119,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n      if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n        S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << m;"}},
[k]={
["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:9:40: warning: \'sentinel\' attribute only supported for variadic functions [-Wignored-attributes]"}
}
},
},
["warn_attribute_type_not_supported"]={
["warn_attribute_type_not_supported"]={
[c]="A attribute argument not supported: B [-Wignored-attributes]",
[f]="A attribute argument not supported: B [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute argument not supported: %1",
[b]=t,
[b]=t,
[g]="(.*?) attribute argument not supported\\: (.*?)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="%0 attribute argument not supported: %1",
[j]={{Tb,1574,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (Tok.isNot(tok::kw_struct) && Tok.isNot(tok::kw_enum)) {\n    Diag(Tok, diag::warn_attribute_type_not_supported) << &AttrName << Tok.getIdentifierInfo();"},{u,1212,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ConsumableAttr::ConvertStrToConsumedState(IL->Ident->getName(), DefaultState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,1264,"static void handleCallableWhenAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned ArgIndex = 0; ArgIndex < AL.getNumArgs(); ++ArgIndex) {\n    if (!CallableWhenAttr::ConvertStrToConsumedState(StateString, CallableState)) {\n      S.Diag(Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{u,1284,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ParamTypestateAttr::ConvertStrToConsumedState(StateString, ParamState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{u,1316,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ReturnTypestateAttr::ConvertStrToConsumedState(IL->Ident->getName(), ReturnState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,1363,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!SetTypestateAttr::ConvertStrToConsumedState(Param, NewState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{u,1385,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!TestTypestateAttr::ConvertStrToConsumedState(Param, TestState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{u,2917,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  if (!VisibilityAttr::ConvertStrToVisibilityType(TypeStr, type)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << TypeStr;"},{u,2975,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ObjCMethodFamilyAttr::ConvertStrToFamilyKind(IL->Ident->getName(), F)) {\n    S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,3041,"static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!BlocksAttr::ConvertStrToBlockType(II->getName(), type)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,3763,"static void handleEnumExtensibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!EnumExtensibilityAttr::ConvertStrToKind(II->getName(), ExtensibilityKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,3962,"/// 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 (Kind == InvalidFormat) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II->getName();"},{u,6427,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftErrorAttr::ConvertStrToConventionKind(Loc->Ident->getName(), Convention)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Loc->Ident;"},{u,6543,"static void handleSwiftAsyncError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncErrorAttr::ConvertStrToConventionKind(IDLoc->Ident->getName(), ConvKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << IDLoc->Ident;"},{u,6900,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftNewTypeAttr::ConvertStrToNewtypeKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,7192,"static void handleHLSLShaderAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HLSLShaderAttr::ConvertStrToShaderType(Str, ShaderType) ||\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,7368,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ARMInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,7477,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!MipsInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << \"\'\" + std::string(Str) + \"\'\";"},{u,7798,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RISCVInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,8344,"static void handleZeroCallUsedRegsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ZeroCallUsedRegsAttr::ConvertStrToZeroCallUsedRegsKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{u,8362,"static void handleFunctionReturnThunksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FunctionReturnThunksAttr::ConvertStrToKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{u,8600,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CFGuardAttr::ConvertStrToGuardArg(II->getName(), Arg)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{hb,6953,"/// 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 (II->isStr(\"none\"))\n  else if (II->isStr(\"strong\"))\n  else if (II->isStr(\"weak\"))\n  else if (II->isStr(\"autoreleasing\"))\n  else {\n    S.Diag(AttrLoc, diag::warn_attribute_type_not_supported) << attr << II;"},{hb,7126,"/// 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 (II->isStr(\"weak\"))\n  else if (II->isStr(\"strong\"))\n  else {\n    S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported) << attr << II;"}}
[e]=u,
[a]="(.*?) attribute argument not supported\\: (.*?)",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{Zb,1574,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (Tok.isNot(tok::kw_struct) && Tok.isNot(tok::kw_enum)) {\n    Diag(Tok, diag::warn_attribute_type_not_supported) << &AttrName << Tok.getIdentifierInfo();"},{v,1212,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ConsumableAttr::ConvertStrToConsumedState(IL->Ident->getName(), DefaultState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{v,1264,"static void handleCallableWhenAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned ArgIndex = 0; ArgIndex < AL.getNumArgs(); ++ArgIndex) {\n    if (!CallableWhenAttr::ConvertStrToConsumedState(StateString, CallableState)) {\n      S.Diag(Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{v,1284,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ParamTypestateAttr::ConvertStrToConsumedState(StateString, ParamState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{v,1316,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ReturnTypestateAttr::ConvertStrToConsumedState(IL->Ident->getName(), ReturnState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{v,1363,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!SetTypestateAttr::ConvertStrToConsumedState(Param, NewState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{v,1385,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!TestTypestateAttr::ConvertStrToConsumedState(Param, TestState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{v,2917,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  if (!VisibilityAttr::ConvertStrToVisibilityType(TypeStr, type)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << TypeStr;"},{v,2975,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ObjCMethodFamilyAttr::ConvertStrToFamilyKind(IL->Ident->getName(), F)) {\n    S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{v,3041,"static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!BlocksAttr::ConvertStrToBlockType(II->getName(), type)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{v,3763,"static void handleEnumExtensibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!EnumExtensibilityAttr::ConvertStrToKind(II->getName(), ExtensibilityKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{v,3962,"/// 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 (Kind == InvalidFormat) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II->getName();"},{v,6427,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftErrorAttr::ConvertStrToConventionKind(Loc->Ident->getName(), Convention)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Loc->Ident;"},{v,6543,"static void handleSwiftAsyncError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncErrorAttr::ConvertStrToConventionKind(IDLoc->Ident->getName(), ConvKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << IDLoc->Ident;"},{v,6900,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftNewTypeAttr::ConvertStrToNewtypeKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{v,7192,"static void handleHLSLShaderAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HLSLShaderAttr::ConvertStrToShaderType(Str, ShaderType) ||\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{v,7368,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ARMInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{v,7477,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!MipsInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << \"\'\" + std::string(Str) + \"\'\";"},{v,7798,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RISCVInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{v,8344,"static void handleZeroCallUsedRegsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ZeroCallUsedRegsAttr::ConvertStrToZeroCallUsedRegsKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{v,8362,"static void handleFunctionReturnThunksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FunctionReturnThunksAttr::ConvertStrToKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{v,8600,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CFGuardAttr::ConvertStrToGuardArg(II->getName(), Arg)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{cb,6953,"/// 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 (II->isStr(\"none\"))\n  else if (II->isStr(\"strong\"))\n  else if (II->isStr(\"weak\"))\n  else if (II->isStr(\"autoreleasing\"))\n  else {\n    S.Diag(AttrLoc, diag::warn_attribute_type_not_supported) << attr << II;"},{cb,7126,"/// 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 (II->isStr(\"weak\"))\n  else if (II->isStr(\"strong\"))\n  else {\n    S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported) << attr << II;"}},
[k]={
[Ec]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:39:39: warning: \'callable_when\' attribute argument not supported: foo [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:45:55: warning: \'return_typestate\' attribute argument not supported: \'not_a_state\' [-Wignored-attributes]"}
}
},
},
["warn_attribute_type_not_supported_global"]={
["warn_attribute_type_not_supported_global"]={
[c]="A attribute argument \'B\' not supported on a global variable [-Wignored-attributes]",
[f]="A attribute argument \'B\' not supported on a global variable [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 attribute argument \'%1\' not supported on a global variable",
[b]=t,
[b]=t,
[g]="(.*?) attribute argument \'(.*?)\' not supported on a global variable",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={Z,1625925174,Y},
[d]="%0 attribute argument \'%1\' not supported on a global variable",
[j]={{u,8234,"static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n    if (parseSanitizerValue(SanitizerName, /*AllowGroups=*/true) == SanitizerMask() && SanitizerName != \"coverage\")\n    else if (isGlobalVar(D) && !isSanitizerAttributeAllowedOnGlobals(SanitizerName))\n      S.Diag(D->getLocation(), diag::warn_attribute_type_not_supported_global) << AL << SanitizerName;"}}
[e]=u,
[a]="(.*?) attribute argument \'(.*?)\' not supported on a global variable",
[g]=L,
[h]=l,
[i]={ab,1625925174,Z},
[j]={{v,8234,"static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n    if (parseSanitizerValue(SanitizerName, /*AllowGroups=*/true) == SanitizerMask() && SanitizerName != \"coverage\")\n    else if (isGlobalVar(D) && !isSanitizerAttributeAllowedOnGlobals(SanitizerName))\n      S.Diag(D->getLocation(), diag::warn_attribute_type_not_supported_global) << AL << SanitizerName;"}},
[k]={
["clang/test/SemaCXX/attr-no-sanitize.cpp"]={"clang/test/SemaCXX/attr-no-sanitize.cpp:9:41: warning: \'no_sanitize\' attribute argument \'all\' not supported on a global variable [-Wignored-attributes]"}
}
},
},
["warn_attribute_unknown_visibility"]={
["warn_attribute_unknown_visibility"]={
[c]="unknown visibility A [-Wignored-attributes]",
[f]="unknown visibility A [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="unknown visibility %0",
[b]=t,
[b]=t,
[g]="unknown visibility (.*?)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="unknown visibility %0",
[j]={{sb,1304,"void Sema::ActOnPragmaVisibility(const IdentifierInfo *VisType, SourceLocation PragmaLoc) {\n  if (VisType) {\n    if (!VisibilityAttr::ConvertStrToVisibilityType(VisType->getName(), T)) {\n      Diag(PragmaLoc, diag::warn_attribute_unknown_visibility) << VisType;"}}
[e]=u,
[a]="unknown visibility (.*?)",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{wb,1304,"void Sema::ActOnPragmaVisibility(const IdentifierInfo *VisType, SourceLocation PragmaLoc) {\n  if (VisType) {\n    if (!VisibilityAttr::ConvertStrToVisibilityType(VisType->getName(), T)) {\n      Diag(PragmaLoc, diag::warn_attribute_unknown_visibility) << VisType;"}}
},
},
["warn_attribute_void_function_method"]={
["warn_attribute_void_function_method"]={
[c]="attribute A cannot be applied to ... without return value [-Wignored-attributes]",
[f]="attribute A cannot be applied to ... without return value [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value",
[b]=t,
[b]=t,
[g]="attribute (.*?) cannot be applied to (?:functions|Objective\\-C method) without return value",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value",
[e]=u,
[a]="attribute (.*?) cannot be applied to (?:functions|Objective\\-C method) without return value",
[g]=L,
[h]=l,
[i]={"5cab26d058d3",1269973335,"Add Support for \'warn_unused_result\" attribute on"},
[i]={"5cab26d058d3",1269973335,"Add Support for \'warn_unused_result\" attribute on"},
[j]={{u,3141,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() && D->getFunctionType()->getReturnType()->isVoidType() && !isa<CXXConstructorDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 0;"},{u,3146,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D))\n    if (MD->getReturnType()->isVoidType()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 1;"}}
[j]={{v,3141,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() && D->getFunctionType()->getReturnType()->isVoidType() && !isa<CXXConstructorDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 0;"},{v,3146,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D))\n    if (MD->getReturnType()->isVoidType()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 1;"}},
[k]={
["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:107:30: warning: attribute \'warn_unused_result\' cannot be applied to functions without return value [-Wignored-attributes]"}
}
},
},
["warn_attribute_weak_on_field"]={
["warn_attribute_weak_on_field"]={
[c]="__weak attribute cannot be specified on a field declaration [-Wignored-attributes]",
[f]="__weak attribute cannot be specified on a field declaration [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="__weak attribute cannot be specified on a field declaration",
[b]=t,
[b]=t,
[g]="__weak attribute cannot be specified on a field declaration",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="__weak attribute cannot be specified on a field declaration",
[j]={{v,18265,"/// 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 (T.isObjCGCWeak())\n    Diag(Loc, diag::warn_attribute_weak_on_field);"}}
[e]=u,
[a]="__weak attribute cannot be specified on a field declaration",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{w,18265,"/// 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 (T.isObjCGCWeak())\n    Diag(Loc, diag::warn_attribute_weak_on_field);"}},
[k]={
["clang/test/SemaObjC/objc2-warn-weak-decl.m"]={"clang/test/SemaObjC/objc2-warn-weak-decl.m:4:13: warning: __weak attribute cannot be specified on a field declaration [-Wignored-attributes]"}
}
},
},
["warn_attribute_weak_on_local"]={
["warn_attribute_weak_on_local"]={
[c]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled [-Wignored-attributes]",
[f]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled",
[b]=t,
[b]=t,
[g]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled",
[j]={{v,8651,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n    else {\n      Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);"}}
[e]=u,
[a]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{w,8651,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n    else {\n      Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);"}}
},
},
["warn_attribute_wrong_decl_type"]={
["warn_attribute_wrong_decl_type"]={
[c]="A... only applies to ... [-Wignored-attributes]",
[f]="A... only applies to ... [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%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]=t,
[b]=t,
[g]="(.*?)(?: attribute|) only applies to (?:functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non\\-K&R\\-style functions)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={L,1236199783,M},
[d]="%0%select{ attribute|}1 only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}2",
[j]={{yc,1186,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n   if (PrevDecl != nullptr && !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))\n      for (const auto &WI : WeakIDs.second)\n        Diag(WI.getLocation(), diag::warn_attribute_wrong_decl_type) << \"\'weak\'\" << /*isRegularKeyword=*/0 << ExpectedVariableOrFunction;"},{u,2186,"static void handleNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(Attrs.getLoc(), diag::warn_attribute_wrong_decl_type) << Attrs << Attrs.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,2250,"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;"},{u,3123,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,3129,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,3202,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n    else if (isa<ObjCPropertyDecl>(D) || isa<ObjCMethodDecl>(D) || (S.Context.getTargetInfo().getTriple().isOSDarwin() && (isa<ObjCInterfaceDecl>(D) || isa<EnumDecl>(D)))) {\n    } else\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariableOrFunction;"},{u,4218,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RD || !RD->isUnion()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedUnion;"},{u,4904,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{u,4925,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLocation(), diag::warn_attribute_wrong_decl_type) << &AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{u,5125,"static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,6012,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (S.getLangOpts().ObjCAutoRefCount && hasDeclarator(D) && (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *Param = dyn_cast<ParmVarDecl>(D)) {\n  } else if (AL.isUsedAsTypeAttr()) {\n  } else {\n    S.Diag(D->getBeginLoc(), diag::warn_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedDeclKind;"},{u,6784,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (const auto *Method = dyn_cast<ObjCMethodDecl>(D)) {\n    } else {\n      if (!F->hasWrittenPrototype()) {\n        Diag(Loc, diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{u,7380,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // MSP430 \'interrupt\' attribute is applied to\n  // a function with no parameters and void return type.\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,7453,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,7528,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Semantic checks for a function with the \'interrupt\' attribute.\n  // a) Must be a function.\n  // b) Must have the \'void\' return type.\n  // c) Must take 1 or 2 arguments.\n  // d) The 1st argument must be a pointer.\n  // e) The 2nd argument (if any) must be an unsigned integer.\n  if (!isFunctionOrMethod(D) || !hasFunctionProto(D) || isInstanceMethod(D) || CXXMethodDecl::isStaticOverloadedOperator(cast<NamedDecl>(D)->getDeclName().getCXXOverloadedOperator())) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{u,7585,"static void handleAVRInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7598,"static void handleAVRSignalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7655,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7779,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() == nullptr) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7974,"static void handleX86ForceAlignArgPointerAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Attribute can only be applied to function types.\n  if (!isa<FunctionDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"}}
[e]=u,
[a]="(.*?)(?: 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)",
[g]=L,
[h]=l,
[i]={N,1236199783,M},
[j]={{yc,1186,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n    if (PrevDecl != nullptr && !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))\n      for (const auto &WI : WeakIDs.second)\n        Diag(WI.getLocation(), diag::warn_attribute_wrong_decl_type) << \"\'weak\'\" << /*isRegularKeyword=*/0 << ExpectedVariableOrFunction;"},{v,2186,"static void handleNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(Attrs.getLoc(), diag::warn_attribute_wrong_decl_type) << Attrs << Attrs.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{v,2250,"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;"},{v,3123,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{v,3129,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{v,3202,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n    else if (isa<ObjCPropertyDecl>(D) || isa<ObjCMethodDecl>(D) || (S.Context.getTargetInfo().getTriple().isOSDarwin() && (isa<ObjCInterfaceDecl>(D) || isa<EnumDecl>(D)))) {\n    } else\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariableOrFunction;"},{v,4218,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RD || !RD->isUnion()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedUnion;"},{v,4904,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{v,4925,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLocation(), diag::warn_attribute_wrong_decl_type) << &AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{v,5125,"static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{v,6012,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (S.getLangOpts().ObjCAutoRefCount && hasDeclarator(D) && (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *Param = dyn_cast<ParmVarDecl>(D)) {\n  } else if (AL.isUsedAsTypeAttr()) {\n  } else {\n    S.Diag(D->getBeginLoc(), diag::warn_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedDeclKind;"},{v,6784,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (const auto *Method = dyn_cast<ObjCMethodDecl>(D)) {\n    } else {\n      if (!F->hasWrittenPrototype()) {\n        Diag(Loc, diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{v,7380,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // MSP430 \'interrupt\' attribute is applied to\n  // a function with no parameters and void return type.\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{v,7453,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{v,7528,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Semantic checks for a function with the \'interrupt\' attribute.\n  // a) Must be a function.\n  // b) Must have the \'void\' return type.\n  // c) Must take 1 or 2 arguments.\n  // d) The 1st argument must be a pointer.\n  // e) The 2nd argument (if any) must be an unsigned integer.\n  if (!isFunctionOrMethod(D) || !hasFunctionProto(D) || isInstanceMethod(D) || CXXMethodDecl::isStaticOverloadedOperator(cast<NamedDecl>(D)->getDeclName().getCXXOverloadedOperator())) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{v,7585,"static void handleAVRInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{v,7598,"static void handleAVRSignalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{v,7655,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{v,7779,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() == nullptr) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{v,7974,"static void handleX86ForceAlignArgPointerAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Attribute can only be applied to function types.\n  if (!isa<FunctionDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"}},
[k]={
[Ec]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:25:10: warning: \'set_typestate\' attribute only applies to functions [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:26:10: warning: \'test_typestate\' attribute only applies to functions [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:27:10: warning: \'callable_when\' attribute only applies to functions [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:31:18: warning: \'set_typestate\' attribute only applies to functions [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:32:18: warning: \'test_typestate\' attribute only applies to functions [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:33:18: warning: \'callable_when\' attribute only applies to functions [-Wignored-attributes]"}
}
},
},
["warn_attribute_wrong_decl_type_str"]={
["warn_attribute_wrong_decl_type_str"]={
[c]="A... only applies to B [-Wignored-attributes]",
[f]="A... only applies to B [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0%select{ attribute|}1 only applies to %2",
[b]=t,
[b]=t,
[g]="(.*?)(?: attribute|) only applies to (.*?)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0%select{ attribute|}1 only applies to %2",
[e]=u,
[a]="(.*?)(?: attribute|) only applies to (.*?)",
[g]=L,
[h]=l,
[i]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th..."},
[i]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th..."},
[j]={{"clang/examples/Attribute/Attribute.cpp",46,"struct ExampleAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    // This attribute appertains to functions only.\n    if (!isa<FunctionDecl>(D)) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"functions\";"},{"clang/examples/CallSuperAttribute/CallSuperAttrInfo.cpp",172,"struct CallSuperAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    if (!TheMethod || !TheMethod->isVirtual()) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"virtual functions\";"},{u,3155,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n    // The standard attribute cannot be applied to variable declarations such\n    // as a function pointer.\n    if (isa<VarDecl>(D))\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"functions, classes, or enumerations\";"},{u,6905,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"typedefs\";"}}
[j]={{"clang/examples/Attribute/Attribute.cpp",46,"struct ExampleAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    // This attribute appertains to functions only.\n    if (!isa<FunctionDecl>(D)) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"functions\";"},{"clang/examples/CallSuperAttribute/CallSuperAttrInfo.cpp",172,"struct CallSuperAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    if (!TheMethod || !TheMethod->isVirtual()) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"virtual functions\";"},{v,3155,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n    // The standard attribute cannot be applied to variable declarations such\n    // as a function pointer.\n    if (isa<VarDecl>(D))\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"functions, classes, or enumerations\";"},{v,6905,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"typedefs\";"}},
[k]={
[Ec]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:28:10: warning: \'consumable\' attribute only applies to classes [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:29:10: warning: \'return_typestate\' attribute only applies to functions and parameters [-Wignored-attributes]","clang/test/SemaCXX/warn-consumed-parsing.cpp:34:18: warning: \'consumable\' attribute only applies to classes [-Wignored-attributes]"}
}
},
},
["warn_attributes_likelihood_ifstmt_conflict"]={
["warn_attributes_likelihood_ifstmt_conflict"]={
[c]="conflicting attributes A are ignored [-Wignored-attributes]",
[f]="conflicting attributes A are ignored [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="conflicting attributes %0 are ignored",
[b]=t,
[b]=t,
[g]="conflicting attributes (.*?) are ignored",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[i]={eb,1582847864,cb},
[d]="conflicting attributes %0 are ignored",
[j]={{O,929,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n  } else {\n    if (std::get<0>(LHC)) {\n      Diags.Report(ThenAttr->getLocation(), diag::warn_attributes_likelihood_ifstmt_conflict) << ThenAttr << ThenAttr->getRange();"}}
[e]=u,
[a]="conflicting attributes (.*?) are ignored",
[g]=L,
[h]=l,
[i]={hb,1582847864,ib},
[j]={{P,929,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n  } else {\n    if (std::get<0>(LHC)) {\n      Diags.Report(ThenAttr->getLocation(), diag::warn_attributes_likelihood_ifstmt_conflict) << ThenAttr << ThenAttr->getRange();"}},
[k]={
["clang/test/SemaCXX/attr-likelihood.cpp"]={"clang/test/SemaCXX/attr-likelihood.cpp:14:7: warning: conflicting attributes \'likely\' are ignored [-Wignored-attributes]","clang/test/SemaCXX/attr-likelihood.cpp:21:7: warning: conflicting attributes \'unlikely\' are ignored [-Wignored-attributes]"}
}
},
},
["warn_auto_implicit_atomic_property"]={
["warn_auto_implicit_atomic_property"]={
[c]="property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]",
[f]="property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"atomic-properties","implicit-atomic-properties"},
[r]={"atomic-properties","implicit-atomic-properties"},
[q]="implicit-atomic-properties",
[q]="implicit-atomic-properties",
[h]="property is assumed atomic when auto-synthesizing the property",
[d]="property is assumed atomic when auto-synthesizing the property",
[b]=t,
[e]=u,
[g]="property is assumed atomic when auto\\-synthesizing the property",
[a]="property is assumed atomic when auto\\-synthesizing the property",
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"},
[i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"},
[j]={{E,1127,"/// 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 ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      if (AtLoc.isValid())\n      else\n        Diag(IC->getLocation(), diag::warn_auto_implicit_atomic_property);"}}
[j]={{G,1127,"/// 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 ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      if (AtLoc.isValid())\n      else\n        Diag(IC->getLocation(), diag::warn_auto_implicit_atomic_property);"}},
[k]={
["clang/test/SemaObjC/warn-implicit-atomic-property.m"]={"clang/test/SemaObjC/warn-implicit-atomic-property.m:11:17: warning: property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]"}
}
},
},
["warn_auto_readonly_iboutlet_property"]={
["warn_auto_readonly_iboutlet_property"]={
[c]="readonly IBOutlet property A when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]",
[f]="readonly IBOutlet property A when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"readonly-iboutlet-property"},
[r]={"readonly-iboutlet-property"},
[q]="readonly-iboutlet-property",
[q]="readonly-iboutlet-property",
[h]="readonly IBOutlet property %0 when auto-synthesized may not work correctly with \'nib\' loader",
[d]="readonly IBOutlet property %0 when auto-synthesized may not work correctly with \'nib\' loader",
[b]=t,
[e]=u,
[g]="readonly IBOutlet property (.*?) when auto\\-synthesized may not work correctly with \'nib\' loader",
[a]="readonly IBOutlet property (.*?) when auto\\-synthesized may not work correctly with \'nib\' loader",
[a]=" \\[(?:\\-Werror,)?\\-Wreadonly\\-iboutlet\\-property[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wreadonly\\-iboutlet\\-property[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[i]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[j]={{E,1156,"/// 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 (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n      if (!ReadWriteProperty) {\n        Diag(property->getLocation(), diag::warn_auto_readonly_iboutlet_property) << property;"}}
[j]={{G,1156,"/// 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 (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n      if (!ReadWriteProperty) {\n        Diag(property->getLocation(), diag::warn_auto_readonly_iboutlet_property) << property;"}},
[k]={
["clang/test/SemaObjC/iboutlet.m"]={"clang/test/SemaObjC/iboutlet.m:10:66: warning: readonly IBOutlet property \'myView\' when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]","clang/test/SemaObjC/iboutlet.m:12:53: warning: readonly IBOutlet property \'myView1\' when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]","clang/test/SemaObjC/iboutlet.m:14:59: warning: readonly IBOutlet property \'myView2\' when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]","clang/test/SemaObjC/iboutlet.m:28:58: warning: readonly IBOutlet property \'autoReadOnlyReadOnly\' when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]"}
}
},
},
["warn_auto_storage_class"]={
["warn_auto_storage_class"]={
[c]="\'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]",
[f]="\'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"c++0x-compat","c++11-compat","c++11-compat-pedantic"},
[r]={"c++0x-compat","c++11-compat","c++11-compat-pedantic"},
[q]="c++11-compat",
[q]="c++11-compat",
[h]="\'auto\' storage class specifier is redundant and incompatible with C++11",
[d]="\'auto\' storage class specifier is redundant and incompatible with C++11",
[b]=t,
[e]=u,
[g]="\'auto\' storage class specifier is redundant and incompatible with C\\+\\+11",
[a]="\'auto\' storage class specifier is redundant and incompatible with C\\+\\+11",
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."},
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."},
[j]={{"clang/lib/Sema/DeclSpec.cpp",1372,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  if (S.getLangOpts().CPlusPlus && !S.getLangOpts().CPlusPlus11 && StorageClassSpec == SCS_auto)\n    S.Diag(StorageClassSpecLoc, diag::warn_auto_storage_class) << FixItHint::CreateRemoval(StorageClassSpecLoc);"}}
[j]={{"clang/lib/Sema/DeclSpec.cpp",1372,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  if (S.getLangOpts().CPlusPlus && !S.getLangOpts().CPlusPlus11 && StorageClassSpec == SCS_auto)\n    S.Diag(StorageClassSpecLoc, diag::warn_auto_storage_class) << FixItHint::CreateRemoval(StorageClassSpecLoc);"}},
[k]={
["clang/test/SemaCXX/auto-cxx98.cpp"]={"clang/test/SemaCXX/auto-cxx98.cpp:3:3: warning: \'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]","clang/test/SemaCXX/auto-cxx98.cpp:4:7: warning: \'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]"}
}
},
},
["warn_auto_synthesizing_protocol_property"]={
["warn_auto_synthesizing_protocol_property"]={
[c]="auto property synthesis will not synthesize property A declared in protocol B [-Wobjc-protocol-property-synthesis]",
[f]="auto property synthesis will not synthesize property A declared in protocol B [-Wobjc-protocol-property-synthesis]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-protocol-property-synthesis"},
[r]={"objc-protocol-property-synthesis"},
[q]="objc-protocol-property-synthesis",
[q]="objc-protocol-property-synthesis",
[h]="auto property synthesis will not synthesize property %0 declared in protocol %1",
[d]="auto property synthesis will not synthesize property %0 declared in protocol %1",
[b]=t,
[e]=u,
[g]="auto property synthesis will not synthesize property (.*?) declared in protocol (.*?)",
[a]="auto property synthesis will not synthesize property (.*?) declared in protocol (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-property\\-synthesis[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-property\\-synthesis[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"9e49b6a6ffae",1323910998,"objc: do not auto synthesize properties declared in"},
[i]={"9e49b6a6ffae",1323910998,"objc: do not auto synthesize properties declared in"},
[j]={{E,1935,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(IMPDecl->getLocation(), diag::warn_auto_synthesizing_protocol_property) << Prop << Proto;"}}
[j]={{G,1935,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(IMPDecl->getLocation(), diag::warn_auto_synthesizing_protocol_property) << Prop << Proto;"}},
[k]={
["clang/test/SemaObjC/default-synthesize.m"]={"clang/test/SemaObjC/default-synthesize.m:139:17: warning: auto property synthesis will not synthesize property \'requiredString\' declared in protocol \'MyProtocol\' [-Wobjc-protocol-property-synthesis]"}
}
},
},
["warn_auto_var_is_id"]={
["warn_auto_var_is_id"]={
[c]="\'auto\' deduced as \'id\' in declaration of A [-Wauto-var-id]",
[f]="\'auto\' deduced as \'id\' in declaration of A [-Wauto-var-id]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"auto-var-id"},
[r]={"auto-var-id"},
[q]="auto-var-id",
[q]="auto-var-id",
[h]="\'auto\' deduced as \'id\' in declaration of %0",
[d]="\'auto\' deduced as \'id\' in declaration of %0",
[b]=t,
[e]=u,
[g]="\'auto\' deduced as \'id\' in declaration of (.*?)",
[a]="\'auto\' deduced as \'id\' in declaration of (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wauto\\-var\\-id[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wauto\\-var\\-id[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d8d56694352c",1339195567,"Warn in ObjC++ when an \'auto\' variable deduces type \'id\'."},
[i]={"d8d56694352c",1339195567,"Warn in ObjC++ when an \'auto\' variable deduces type \'id\'."},
[j]={{v,12805,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // Warn if we deduced \'id\'. \'auto\' usually implies type-safety, but using\n  // \'id\' instead of a specific object type prevents most of our usual\n  // checks.\n  // We only want to warn outside of template instantiations, though:\n  // inside a template, the \'id\' could have come from a parameter.\n  if (!inTemplateInstantiation() && !DefaultedAnyToId && !IsInitCapture && !DeducedType.isNull() && DeducedType->isObjCIdType()) {\n    Diag(Loc, diag::warn_auto_var_is_id) << VN << Range;"},{O,2331,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // If the type contained \'auto\', deduce the \'auto\' to \'id\'.\n      if (FirstType->getContainedAutoType()) {\n        if (!inTemplateInstantiation()) {\n          Diag(Loc, diag::warn_auto_var_is_id) << D->getDeclName();"}}
[j]={{w,12805,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // Warn if we deduced \'id\'. \'auto\' usually implies type-safety, but using\n  // \'id\' instead of a specific object type prevents most of our usual\n  // checks.\n  // We only want to warn outside of template instantiations, though:\n  // inside a template, the \'id\' could have come from a parameter.\n  if (!inTemplateInstantiation() && !DefaultedAnyToId && !IsInitCapture && !DeducedType.isNull() && DeducedType->isObjCIdType()) {\n    Diag(Loc, diag::warn_auto_var_is_id) << VN << Range;"},{P,2331,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // If the type contained \'auto\', deduce the \'auto\' to \'id\'.\n      if (FirstType->getContainedAutoType()) {\n        if (!inTemplateInstantiation()) {\n          Diag(Loc, diag::warn_auto_var_is_id) << D->getDeclName();"}},
[k]={
["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:14:8: warning: \'auto\' deduced as \'id\' in declaration of \'thisKey\' [-Wauto-var-id]"}
}
},
},
["warn_autosynthesis_property_in_superclass"]={
["warn_autosynthesis_property_in_superclass"]={
[c]="auto property synthesis will not synthesize property A; it will be implemented by its superclass, use @dynamic to acknowledge intention [-Wobjc-property-synthesis]",
[f]="auto property synthesis will not synthesize property A; it will be implemented by its superclass, use @dynamic to acknowledge intention [-Wobjc-property-synthesis]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-property-synthesis"},
[r]={"objc-property-synthesis"},
[q]="objc-property-synthesis",
[q]="objc-property-synthesis",
[h]="auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention",
[d]="auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention",
[b]=t,
[e]=u,
[g]="auto property synthesis will not synthesize property (.*?); it will be implemented by its superclass, use @dynamic to acknowledge intention",
[a]="auto property synthesis will not synthesize property (.*?); it will be implemented by its superclass, use @dynamic to acknowledge intention",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"6c9ee7b0c856",1406407946,"Objective-C. Issue more warning diagnostic when certain"},
[i]={"6c9ee7b0c856",1406407946,"Objective-C. Issue more warning diagnostic when certain"},
[j]={{E,1957,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(Prop->getLocation(), diag::warn_autosynthesis_property_in_superclass) << Prop->getIdentifier();"}}
[j]={{G,1957,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(Prop->getLocation(), diag::warn_autosynthesis_property_in_superclass) << Prop->getIdentifier();"}},
[k]={
["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:44:46: warning: auto property synthesis will not synthesize property \'foo\'; it will be implemented by its superclass, use @dynamic to acknowledge intention [-Wobjc-property-synthesis]"}
}
},
},
["warn_autosynthesis_property_ivar_match"]={
["warn_autosynthesis_property_ivar_match"]={
[c]="autosynthesized property A will use ... instance variable B, not existing instance variable C [-Wobjc-autosynthesis-property-ivar-name-match]",
[f]="autosynthesized property A will use ... instance variable B, not existing instance variable C [-Wobjc-autosynthesis-property-ivar-name-match]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-autosynthesis-property-ivar-name-match"},
[r]={"objc-autosynthesis-property-ivar-name-match"},
[q]="objc-autosynthesis-property-ivar-name-match",
[q]="objc-autosynthesis-property-ivar-name-match",
[h]="autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3",
[d]="autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3",
[b]=t,
[e]=u,
[g]="autosynthesized property (.*?) will use (?:|synthesized) instance variable (.*?), not existing instance variable (.*?)",
[a]="autosynthesized property (.*?) will use (?:|synthesized) instance variable (.*?), not existing instance variable (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-autosynthesis\\-property\\-ivar\\-name\\-match[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-autosynthesis\\-property\\-ivar\\-name\\-match[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"63d40202fb47",1340146282,"objective-c: warn when autosynthesizing a property which has same"},
[i]={"63d40202fb47",1340146282,"objective-c: warn when autosynthesizing a property which has same"},
[j]={{E,1286,"/// 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 (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(PropertyDiagLoc, diag::warn_autosynthesis_property_ivar_match) << PropertyId << (Ivar == nullptr) << PropertyIvar << originalIvar->getIdentifier();"}}
[j]={{G,1286,"/// 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 (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(PropertyDiagLoc, diag::warn_autosynthesis_property_ivar_match) << PropertyId << (Ivar == nullptr) << PropertyIvar << originalIvar->getIdentifier();"}},
[k]={
["clang/test/SemaObjC/default-synthesize-2.m"]={"clang/test/SemaObjC/default-synthesize-2.m:50:1: warning: autosynthesized property \'uid\' will use synthesized instance variable \'_uid\', not existing instance variable \'uid\' [-Wobjc-autosynthesis-property-ivar-name-match]","clang/test/SemaObjC/default-synthesize-2.m:128:1: warning: autosynthesized property \'y\' will use  instance variable \'_y\', not existing instance variable \'y\' [-Wobjc-autosynthesis-property-ivar-name-match]"}
}
},
},
["warn_availability_and_unavailable"]={
["warn_availability_and_unavailable"]={
[c]="\'unavailable\' availability overrides all other availability information [-Wavailability]",
[f]="\'unavailable\' availability overrides all other availability information [-Wavailability]",
[d]=s,
[f]=r,
[p]={rb},
[q]=rb,
[h]="\'unavailable\' availability overrides all other availability information",
[b]=t,
[b]=t,
[g]="\'unavailable\' availability overrides all other availability information",
[c]=s,
[a]=dc,
[r]={tb},
[e]=Q,
[q]=tb,
[d]="\'unavailable\' availability overrides all other availability information",
[e]=u,
[a]="\'unavailable\' availability overrides all other availability information",
[g]=jc,
[h]=Q,
[i]={"7ab142b55a6e",1301110555,"Extend the new \'availability\' attribute with support for an"},
[i]={"7ab142b55a6e",1301110555,"Extend the new \'availability\' attribute with support for an"},
[j]={{Tb,1324,"/// 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  // The \'unavailable\' availability cannot be combined with any other\n  // availability changes. Make sure that hasn\'t happened.\n  if (UnavailableLoc.isValid()) {\n    for (unsigned Index = Introduced; Index != Unknown; ++Index) {\n      if (Changes[Index].KeywordLoc.isValid()) {\n        if (!Complained) {\n          Diag(UnavailableLoc, diag::warn_availability_and_unavailable) << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}}
[j]={{Zb,1324,"/// 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  // The \'unavailable\' availability cannot be combined with any other\n  // availability changes. Make sure that hasn\'t happened.\n  if (UnavailableLoc.isValid()) {\n    for (unsigned Index = Introduced; Index != Unknown; ++Index) {\n      if (Changes[Index].KeywordLoc.isValid()) {\n        if (!Complained) {\n          Diag(UnavailableLoc, diag::warn_availability_and_unavailable) << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}},
[k]={
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:19:50: warning: \'unavailable\' availability overrides all other availability information [-Wavailability]"}
}
},
},
["warn_availability_fuchsia_unavailable_minor"]={
["warn_availability_fuchsia_unavailable_minor"]={
[c]="Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]",
[f]="Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]",
[d]=s,
[f]=r,
[p]={rb},
[q]=rb,
[h]="Fuchsia API Level prohibits specifying a minor or sub-minor version",
[b]=t,
[b]=t,
[g]="Fuchsia API Level prohibits specifying a minor or sub\\-minor version",
[c]=s,
[a]=dc,
[r]={tb},
[e]=k,
[q]=tb,
[i]={Gb,1615397021,Cb},
[d]="Fuchsia API Level prohibits specifying a minor or sub-minor version",
[j]={{u,2651,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (II->isStr(\"fuchsia\")) {\n    if ((Min = Introduced.Version.getMinor()) || (Sub = Introduced.Version.getSubminor())) {\n      S.Diag(AL.getLoc(), diag::warn_availability_fuchsia_unavailable_minor);"}}
[e]=u,
[a]="Fuchsia API Level prohibits specifying a minor or sub\\-minor version",
[g]=jc,
[h]=l,
[i]={Mb,1615397021,Ib},
[j]={{v,2651,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (II->isStr(\"fuchsia\")) {\n    if ((Min = Introduced.Version.getMinor()) || (Sub = Introduced.Version.getSubminor())) {\n      S.Diag(AL.getLoc(), diag::warn_availability_fuchsia_unavailable_minor);"}},
[k]={
["clang/test/Sema/attr-availability-fuchsia.c"]={"clang/test/Sema/attr-availability-fuchsia.c:17:29: warning: Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]","clang/test/Sema/attr-availability-fuchsia.c:18:29: warning: Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]"}
}
},
},
["warn_availability_on_static_initializer"]={
["warn_availability_on_static_initializer"]={
[c]="ignoring availability attribute ... [-Wavailability]",
[f]="ignoring availability attribute ... [-Wavailability]",
[d]=s,
[f]=r,
[p]={rb},
[q]=rb,
[h]="ignoring availability attribute %select{on \'+load\' method|with constructor attribute|with destructor attribute}0",
[b]=t,
[b]=t,
[g]="ignoring availability attribute (?:on \'\\+load\' method|with constructor attribute|with destructor attribute)",
[c]=s,
[a]=dc,
[r]={tb},
[e]=k,
[q]=tb,
[d]="ignoring availability attribute %select{on \'+load\' method|with constructor attribute|with destructor attribute}0",
[e]=u,
[a]="ignoring availability attribute (?:on \'\\+load\' method|with constructor attribute|with destructor attribute)",
[g]=jc,
[h]=l,
[i]={"3bb4aa566e1f",1523921658,"[Availability] Improve availability to consider functions run at load time"},
[i]={"3bb4aa566e1f",1523921658,"[Availability] Improve availability to consider functions run at load time"},
[j]={{v,10778,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<ConstructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 1;"},{v,10783,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<DestructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 2;"},{B,5067,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // + load method cannot have availability attributes. It get called on\n  // startup, so it has to have the availability of the deployment target.\n  if (const auto *attr = ObjCMethod->getAttr<AvailabilityAttr>()) {\n    if (ObjCMethod->isClassMethod() && ObjCMethod->getSelector().getAsString() == \"load\") {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 0;"}}
[j]={{w,10778,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<ConstructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 1;"},{w,10783,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<DestructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 2;"},{C,5067,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // + load method cannot have availability attributes. It get called on\n  // startup, so it has to have the availability of the deployment target.\n  if (const auto *attr = ObjCMethod->getAttr<AvailabilityAttr>()) {\n    if (ObjCMethod->isClassMethod() && ObjCMethod->getSelector().getAsString() == \"load\") {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 0;"}},
[k]={
["clang/test/SemaObjC/unguarded-availability.m"]={"clang/test/SemaObjC/unguarded-availability.m:361:14: warning: ignoring availability attribute on \'+load\' method [-Wavailability]","clang/test/SemaObjC/unguarded-availability.m:389:1: warning: ignoring availability attribute with constructor attribute [-Wavailability]","clang/test/SemaObjC/unguarded-availability.m:394:1: warning: ignoring availability attribute with destructor attribute [-Wavailability]"}
}
},
},
["warn_availability_swift_unavailable_deprecated_only"]={
["warn_availability_swift_unavailable_deprecated_only"]={
[c]="only \'unavailable\' and \'deprecated\' are supported for Swift availability [-Wavailability]",
[f]="only \'unavailable\' and \'deprecated\' are supported for Swift availability [-Wavailability]",
[d]=s,
[f]=r,
[p]={rb},
[q]=rb,
[h]="only \'unavailable\' and \'deprecated\' are supported for Swift availability",
[b]=t,
[b]=t,
[g]="only \'unavailable\' and \'deprecated\' are supported for Swift availability",
[c]=s,
[a]=dc,
[r]={tb},
[e]=k,
[q]=tb,
[d]="only \'unavailable\' and \'deprecated\' are supported for Swift availability",
[e]=u,
[a]="only \'unavailable\' and \'deprecated\' are supported for Swift availability",
[g]=jc,
[h]=l,
[i]={"260e96240297",1541990673,"Support Swift in platform availability attribute"},
[i]={"260e96240297",1541990673,"Support Swift in platform availability attribute"},
[j]={{u,2642,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (II->isStr(\"swift\")) {\n    if (Introduced.isValid() || Obsoleted.isValid() || (!IsUnavailable && !Deprecated.isValid())) {\n      S.Diag(AL.getLoc(), diag::warn_availability_swift_unavailable_deprecated_only);"}}
[j]={{v,2642,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (II->isStr(\"swift\")) {\n    if (Introduced.isValid() || Obsoleted.isValid() || (!IsUnavailable && !Deprecated.isValid())) {\n      S.Diag(AL.getLoc(), diag::warn_availability_swift_unavailable_deprecated_only);"}},
[k]={
["clang/test/Sema/attr-availability-swift.c"]={"clang/test/Sema/attr-availability-swift.c:24:42: warning: only \'unavailable\' and \'deprecated\' are supported for Swift availability [-Wavailability]"}
}
},
},
["warn_availability_unknown_platform"]={
["warn_availability_unknown_platform"]={
[c]="unknown platform A in availability macro [-Wavailability]",
[f]="unknown platform A in availability macro [-Wavailability]",
[d]=s,
[f]=r,
[p]={rb},
[q]=rb,
[h]="unknown platform %0 in availability macro",
[b]=t,
[b]=t,
[g]="unknown platform (.*?) in availability macro",
[c]=s,
[a]=dc,
[r]={tb},
[e]=k,
[q]=tb,
[d]="unknown platform %0 in availability macro",
[e]=u,
[a]="unknown platform (.*?) in availability macro",
[g]=jc,
[h]=l,
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[j]={{u,2619,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AvailabilityAttr::getPrettyPlatformName(II->getName()).empty())\n    S.Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Platform->Ident;"}}
[j]={{v,2619,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AvailabilityAttr::getPrettyPlatformName(II->getName()).empty())\n    S.Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Platform->Ident;"}},
[k]={
["clang/test/Sema/attr-availability-square-brackets.c"]={"clang/test/Sema/attr-availability-square-brackets.c:25:29: warning: unknown platform \'this\' in availability macro [-Wavailability]"}
}
},
},
["warn_availability_version_ordering"]={
["warn_availability_version_ordering"]={
[c]="feature cannot be ... in A version B before it was ... in version C; attribute ignored [-Wavailability]",
[f]="feature cannot be ... in A version B before it was ... in version C; attribute ignored [-Wavailability]",
[d]=s,
[f]=r,
[p]={rb},
[q]=rb,
[h]="feature cannot be %select{introduced|deprecated|obsoleted}0 in %1 version %2 before it was %select{introduced|deprecated|obsoleted}3 in version %4; attribute ignored",
[b]=t,
[b]=t,
[g]="feature cannot be (?:introduced|deprecated|obsoleted) in (.*?) version (.*?) before it was (?:introduced|deprecated|obsoleted) in version (.*?); attribute ignored",
[c]=s,
[a]=dc,
[r]={tb},
[e]=k,
[q]=tb,
[d]="feature cannot be %select{introduced|deprecated|obsoleted}0 in %1 version %2 before it was %select{introduced|deprecated|obsoleted}3 in version %4; attribute ignored",
[e]=u,
[a]="feature cannot be (?:introduced|deprecated|obsoleted) in (.*?) version (.*?) before it was (?:introduced|deprecated|obsoleted) in version (.*?); attribute ignored",
[g]=jc,
[h]=l,
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[j]={{u,2398,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  // Ensure that Introduced <= Deprecated <= Obsoleted (although not all\n  // of these steps are needed).\n  if (!Introduced.empty() && !Deprecated.empty() && !(Introduced <= Deprecated)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 1 << PlatformName << Deprecated.getAsString() << 0 << Introduced.getAsString();"},{u,2406,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Introduced.empty() && !Obsoleted.empty() && !(Introduced <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 0 << Introduced.getAsString();"},{u,2414,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Deprecated.empty() && !Obsoleted.empty() && !(Deprecated <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 1 << Deprecated.getAsString();"}}
[j]={{v,2398,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  // Ensure that Introduced <= Deprecated <= Obsoleted (although not all\n  // of these steps are needed).\n  if (!Introduced.empty() && !Deprecated.empty() && !(Introduced <= Deprecated)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 1 << PlatformName << Deprecated.getAsString() << 0 << Introduced.getAsString();"},{v,2406,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Introduced.empty() && !Obsoleted.empty() && !(Introduced <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 0 << Introduced.getAsString();"},{v,2414,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Deprecated.empty() && !Obsoleted.empty() && !(Deprecated <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 1 << Deprecated.getAsString();"}},
[k]={
["clang/test/Sema/attr-availability-square-brackets.c"]={"clang/test/Sema/attr-availability-square-brackets.c:3:10: warning: feature cannot be deprecated in macOS version 10.2 before it was introduced in version 10.4; attribute ignored [-Wavailability]","clang/test/Sema/attr-availability-square-brackets.c:4:10: warning: feature cannot be obsoleted in iOS version 2.1 before it was deprecated in version 3.0; attribute ignored [-Wavailability]"}
}
},
},
["warn_avx_calling_convention"]={
["warn_avx_calling_convention"]={
[c]="AVX vector ... of type A without \'B\' enabled changes the ABI [-Wpsabi]",
[f]="AVX vector ... of type A without \'B\' enabled changes the ABI [-Wpsabi]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"psabi"},
[r]={"psabi"},
[q]="psabi",
[q]="psabi",
[h]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI",
[d]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI",
[b]=t,
[e]=u,
[g]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI",
[a]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI",
[a]=" \\[(?:\\-Werror,)?\\-Wpsabi[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wpsabi[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error"},
[i]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error"},
[j]={{"clang/lib/CodeGen/Targets/X86.cpp",1499,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  if (!CallerHasFeat && !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::warn_avx_calling_convention) << IsArgument << Ty << Feature;"}}
[j]={{"clang/lib/CodeGen/Targets/X86.cpp",1499,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  if (!CallerHasFeat && !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::warn_avx_calling_convention) << IsArgument << Ty << Feature;"}},
[k]={
["clang/test/CodeGen/convertvector.c"]={"clang/test/CodeGen/convertvector.c:84:12: warning: AVX vector argument of type \'vector8long\' (vector of 8 \'long\' values) without \'avx512f\' enabled changes the ABI [-Wpsabi]"}
}
},
},
["warn_bad_character_encoding"]={
["warn_bad_character_encoding"]={
[c]="illegal character encoding in character literal [-Winvalid-source-encoding]",
[f]="illegal character encoding in character literal [-Winvalid-source-encoding]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"invalid-source-encoding"},
[r]={"invalid-source-encoding"},
[q]="invalid-source-encoding",
[q]="invalid-source-encoding",
[h]="illegal character encoding in character literal",
[d]="illegal character encoding in character literal",
[b]=t,
[e]=u,
[g]="illegal character encoding in character literal",
[a]="illegal character encoding in character literal",
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[j]={{zc,1747,"/// \\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        if (NoErrorOnBadEncoding)\n          Msg = diag::warn_bad_character_encoding;"}}
[j]={{Oc,1747,"/// \\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        if (NoErrorOnBadEncoding)\n          Msg = diag::warn_bad_character_encoding;"}},
[k]={
["clang/test/Lexer/char-literal-encoding-error.c"]={"clang/test/Lexer/char-literal-encoding-error.c:6:9: warning: illegal character encoding in character literal [-Winvalid-source-encoding]","clang/test/Lexer/char-literal-encoding-error.c:13:32: warning: illegal character encoding in character literal [-Winvalid-source-encoding]","clang/test/Lexer/char-literal-encoding-error.c:14:17: warning: illegal character encoding in character literal [-Winvalid-source-encoding]"}
}
},
},
["warn_bad_cxx_cast_nested_pointer_addr_space"]={
["warn_bad_cxx_cast_nested_pointer_addr_space"]={
[c]="... from A to B changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]",
[f]="... from A to B changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"incompatible-pointer-types","incompatible-pointer-types-discards-qualifiers"},
[r]={"incompatible-pointer-types","incompatible-pointer-types-discards-qualifiers"},
[q]="incompatible-pointer-types-discards-qualifiers",
[q]="incompatible-pointer-types-discards-qualifiers",
[h]="%select{reinterpret_cast|C-style cast}0 from %1 to %2 changes address space of nested pointers",
[d]="%select{reinterpret_cast|C-style cast}0 from %1 to %2 changes address space of nested pointers",
[b]=t,
[e]=u,
[g]="(?:reinterpret_cast|C\\-style cast) from (.*?) to (.*?) changes address space of nested pointers",
[a]="(?:reinterpret_cast|C\\-style cast) from (.*?) to (.*?) changes address space of nested pointers",
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={vb,1576809732,yb},
[i]={Ab,1576809732,xb},
[j]={{mb,2583,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  while (!DestPtee.isNull() && !SrcPtee.isNull()) {\n    if (DestPtee.getAddressSpace() != SrcPtee.getAddressSpace()) {\n      Self.Diag(OpRange.getBegin(), diag::warn_bad_cxx_cast_nested_pointer_addr_space) << CStyle << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}
[j]={{nb,2583,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  while (!DestPtee.isNull() && !SrcPtee.isNull()) {\n    if (DestPtee.getAddressSpace() != SrcPtee.getAddressSpace()) {\n      Self.Diag(OpRange.getBegin(), diag::warn_bad_cxx_cast_nested_pointer_addr_space) << CStyle << SrcType << DestType << SrcExpr.get()->getSourceRange();"}},
[k]={
["clang/test/SemaOpenCLCXX/address-space-castoperators.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-castoperators.clcpp:11:12: warning: reinterpret_cast from \'__local int *__generic *\' to \'__generic int *__generic *\' changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]","clang/test/SemaOpenCLCXX/address-space-castoperators.clcpp:16:12: warning: reinterpret_cast from \'__constant int *__generic *\' to \'__generic int *__generic *\' changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]"}
}
},
},
["warn_bad_function_cast"]={
["warn_bad_function_cast"]={
[c]="cast from function call of type A to non-matching type B [-Wbad-function-cast]",
[f]="cast from function call of type A to non-matching type B [-Wbad-function-cast]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"bad-function-cast"},
[r]={"bad-function-cast"},
[q]="bad-function-cast",
[q]="bad-function-cast",
[h]="cast from function call of type %0 to non-matching type %1",
[d]="cast from function call of type %0 to non-matching type %1",
[b]=t,
[e]=u,
[g]="cast from function call of type (.*?) to non\\-matching type (.*?)",
[a]="cast from function call of type (.*?) to non\\-matching type (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wbad\\-function\\-cast[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbad\\-function\\-cast[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"91f548b04b7d",1345224154,"c: implement gcc\'s -Wbad-function-cast which warns"},
[i]={"91f548b04b7d",1345224154,"c: implement gcc\'s -Wbad-function-cast which warns"},
[j]={{mb,2877,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (Self.Diags.isIgnored(diag::warn_bad_function_cast, SrcExpr.get()->getExprLoc()))"},{mb,2906,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_bad_function_cast) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}
[j]={{nb,2877,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (Self.Diags.isIgnored(diag::warn_bad_function_cast, SrcExpr.get()->getExprLoc()))"},{nb,2906,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_bad_function_cast) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}},
[k]={
["clang/test/Sema/warn-bad-function-cast.c"]={"clang/test/Sema/warn-bad-function-cast.c:42:10: warning: cast from function call of type \'int\' to non-matching type \'float\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:43:11: warning: cast from function call of type \'char\' to non-matching type \'double\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:44:10: warning: cast from function call of type \'long\' to non-matching type \'_Bool\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:45:8: warning: cast from function call of type \'float\' to non-matching type \'int\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:46:9: warning: cast from function call of type \'double\' to non-matching type \'long\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:47:11: warning: cast from function call of type \'_Complex double\' to non-matching type \'double\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:48:8: warning: cast from function call of type \'enum e\' to non-matching type \'int\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:49:8: warning: cast from function call of type \'_Bool\' to non-matching type \'int\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:50:18: warning: cast from function call of type \'char *\' to non-matching type \'unsigned long\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:51:21: warning: cast from function call of type \'int *\' to non-matching type \'long\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:52:12: warning: cast from function call of type \'int\' to non-matching type \'_Fract\' [-Wbad-function-cast]","clang/test/Sema/warn-bad-function-cast.c:53:8: warning: cast from function call of type \'_Fract\' to non-matching type \'int\' [-Wbad-function-cast]"}
}
},
},
["warn_bad_receiver_type"]={
["warn_bad_receiver_type"]={
[c]="receiver type A is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]",
[f]="receiver type A is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"receiver-expr"},
[r]={"receiver-expr"},
[q]="receiver-expr",
[q]="receiver-expr",
[h]="receiver type %0 is not \'id\' or interface pointer, consider casting it to \'id\'",
[d]="receiver type %0 is not \'id\' or interface pointer, consider casting it to \'id\'",
[b]=t,
[e]=u,
[g]="receiver type (.*?) is not \'id\' or interface pointer, consider casting it to \'id\'",
[a]="receiver type (.*?) is not \'id\' or interface pointer, consider casting it to \'id\'",
[a]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-expr[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-expr[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{nb,2914,"/// 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 we have a receiver expression, perform appropriate promotions\n  // and determine receiver type.\n  if (Receiver) {\n    // If the receiver is an ObjC pointer, a block pointer, or an\n    // __attribute__((NSObject)) pointer, we don\'t need to do any\n    // special conversion in order to look up a receiver.\n    if (ReceiverType->isObjCRetainableType()) {\n    } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n      Diag(Loc, diag::warn_bad_receiver_type) << ReceiverType << RecRange;"}}
[j]={{sb,2914,"/// 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 we have a receiver expression, perform appropriate promotions\n  // and determine receiver type.\n  if (Receiver) {\n    // If the receiver is an ObjC pointer, a block pointer, or an\n    // __attribute__((NSObject)) pointer, we don\'t need to do any\n    // special conversion in order to look up a receiver.\n    if (ReceiverType->isObjCRetainableType()) {\n    } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n      Diag(Loc, diag::warn_bad_receiver_type) << ReceiverType << RecRange;"}},
[k]={
["clang/test/SemaObjC/deprecated-objc-introspection.m"]={"clang/test/SemaObjC/deprecated-objc-introspection.m:38:4: warning: receiver type \'struct objc_class *\' is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]","clang/test/SemaObjC/deprecated-objc-introspection.m:40:4: warning: receiver type \'struct objc_class *\' is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]"}
}
},
},
["warn_bad_string_encoding"]={
["warn_bad_string_encoding"]={
[c]="illegal character encoding in string literal [-Winvalid-source-encoding]",
[f]="illegal character encoding in string literal [-Winvalid-source-encoding]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"invalid-source-encoding"},
[r]={"invalid-source-encoding"},
[q]="invalid-source-encoding",
[q]="invalid-source-encoding",
[h]="illegal character encoding in string literal",
[d]="illegal character encoding in string literal",
[b]=t,
[e]=u,
[g]="illegal character encoding in string literal",
[a]="illegal character encoding in string literal",
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[j]={{zc,2264,"/// 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]={{Oc,2264,"/// 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);"}},
[k]={
["clang/test/Lexer/string-literal-encoding.c"]={"clang/test/Lexer/string-literal-encoding.c:16:22: warning: illegal character encoding in string literal [-Winvalid-source-encoding]","clang/test/Lexer/string-literal-encoding.c:18:24: warning: illegal character encoding in string literal [-Winvalid-source-encoding]","clang/test/Lexer/string-literal-encoding.c:30:26: warning: illegal character encoding in string literal [-Winvalid-source-encoding]","clang/test/Lexer/string-literal-encoding.c:32:28: warning: illegal character encoding in string literal [-Winvalid-source-encoding]"}
}
},
},
["warn_base_class_is_uninit"]={
["warn_base_class_is_uninit"]={
[c]="base class A is uninitialized when used here to access B [-Wuninitialized]",
[f]="base class A is uninitialized when used here to access B [-Wuninitialized]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,lb,"uninitialized"},
[r]={U,bb,mb,"uninitialized"},
[q]="uninitialized",
[q]="uninitialized",
[h]="base class %0 is uninitialized when used here to access %q1",
[d]="base class %0 is uninitialized when used here to access %q1",
[b]=t,
[e]=u,
[g]="base class (.*?) is uninitialized when used here to access (.*?)",
[a]="base class (.*?) is uninitialized when used here to access (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"3630c399727a",1416539430,"Extend -Wuninitialized to warn when accessing uninitialized base classes in a"},
[i]={"3630c399727a",1416539430,"Extend -Wuninitialized to warn when accessing uninitialized base classes in a"},
[j]={{y,3836,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    if (ImplicitCastExpr *BaseCast = dyn_cast<ImplicitCastExpr>(Base)) {\n      if (BaseCast->getCastKind() == CK_UncheckedDerivedToBase) {\n        if (T->isPointerType() && BaseClasses.count(T->getPointeeType())) {\n          S.Diag(FieldME->getExprLoc(), diag::warn_base_class_is_uninit) << T->getPointeeType() << FoundVD;"}}
[j]={{z,3836,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    if (ImplicitCastExpr *BaseCast = dyn_cast<ImplicitCastExpr>(Base)) {\n      if (BaseCast->getCastKind() == CK_UncheckedDerivedToBase) {\n        if (T->isPointerType() && BaseClasses.count(T->getPointeeType())) {\n          S.Diag(FieldME->getExprLoc(), diag::warn_base_class_is_uninit) << T->getPointeeType() << FoundVD;"}},
[k]={
["clang/test/SemaCXX/uninitialized.cpp"]={"clang/test/SemaCXX/uninitialized.cpp:1380:21: warning: base class \'base_class_access::A\' is uninitialized when used here to access \'base_class_access::A::i\' [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1383:21: warning: base class \'base_class_access::A\' is uninitialized when used here to access \'base_class_access::A::foo\' [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1395:21: warning: base class \'base_class_access::A\' is uninitialized when used here to access \'base_class_access::A::i\' [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1398:21: warning: base class \'base_class_access::A\' is uninitialized when used here to access \'base_class_access::A::foo\' [-Wuninitialized]"}
}
},
},
["warn_bind_ref_member_to_parameter"]={
["warn_bind_ref_member_to_parameter"]={
[c]="binding reference member A to stack allocated ... B [-Wdangling-field]",
[f]="binding reference member A to stack allocated ... B [-Wdangling-field]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"dangling","dangling-field"},
[r]={"dangling","dangling-field"},
[q]="dangling-field",
[q]="dangling-field",
[h]="binding reference member %0 to stack allocated %select{variable|parameter}2 %1",
[d]="binding reference member %0 to stack allocated %select{variable|parameter}2 %1",
[b]=t,
[e]=u,
[g]="binding reference member (.*?) to stack allocated (?:variable|parameter) (.*?)",
[a]="binding reference member (.*?) to stack allocated (?:variable|parameter) (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[j]={{U,8226,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(DiagLoc, IsPointer ? diag::warn_init_ptr_member_to_parameter_addr : diag::warn_bind_ref_member_to_parameter) << Member << VD << isa<ParmVarDecl>(VD) << DiagRange;"}}
[j]={{W,8226,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(DiagLoc, IsPointer ? diag::warn_init_ptr_member_to_parameter_addr : diag::warn_bind_ref_member_to_parameter) << Member << VD << isa<ParmVarDecl>(VD) << DiagRange;"}},
[k]={
["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:15:9: warning: binding reference member \'x\' to stack allocated parameter \'i\' [-Wdangling-field]","clang/test/SemaCXX/warn-dangling-field.cpp:33:17: warning: binding reference member \'x\' to stack allocated parameter \'i\' [-Wdangling-field]"}
}
},
},
["warn_binding_null_to_reference"]={
["warn_binding_null_to_reference"]={
[c]="binding dereferenced null pointer to reference has undefined behavior [-Wnull-dereference]",
[f]="binding dereferenced null pointer to reference has undefined behavior [-Wnull-dereference]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"null-dereference"},
[r]={"null-dereference"},
[q]="null-dereference",
[q]="null-dereference",
[h]="binding dereferenced null pointer to reference has undefined behavior",
[d]="binding dereferenced null pointer to reference has undefined behavior",
[b]=t,
[e]=u,
[g]="binding dereferenced null pointer to reference has undefined behavior",
[a]="binding dereferenced null pointer to reference has undefined behavior",
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"2eeddfb1efc8",1463247854,"Warn when a reference is bound to an empty l-value (dereferenced null pointer)."},
[i]={"2eeddfb1efc8",1463247854,"Warn when a reference is bound to an empty l-value (dereferenced null pointer)."},
[j]={{U,8453,"static void CheckForNullPointerDereference(Sema &S, const Expr *E) {\n  // Check to see if we are dereferencing a null pointer.  If so, this is\n  // undefined behavior, so warn about it.  This only handles the pattern\n  // \"*null\", which is a very syntactic check.\n  if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(E->IgnoreParenCasts()))\n    if (UO->getOpcode() == UO_Deref && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_binding_null_to_reference) << UO->getSubExpr()->getSourceRange());"}}
[j]={{W,8453,"static void CheckForNullPointerDereference(Sema &S, const Expr *E) {\n  // Check to see if we are dereferencing a null pointer.  If so, this is\n  // undefined behavior, so warn about it.  This only handles the pattern\n  // \"*null\", which is a very syntactic check.\n  if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(E->IgnoreParenCasts()))\n    if (UO->getOpcode() == UO_Deref && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_binding_null_to_reference) << UO->getSubExpr()->getSourceRange());"}},
[k]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:14:35: warning: binding dereferenced null pointer to reference has undefined behavior [-Wnull-dereference]"}
}
},
},
["warn_bitfield_too_small_for_enum"]={
["warn_bitfield_too_small_for_enum"]={
[c]="bit-field A is not wide enough to store all enumerators of B [-Wbitfield-enum-conversion]",
[f]="bit-field A is not wide enough to store all enumerators of B [-Wbitfield-enum-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"bitfield-enum-conversion",Bb,Eb},
[r]={"bitfield-enum-conversion",Kb,Jb},
[q]="bitfield-enum-conversion",
[q]="bitfield-enum-conversion",
[h]="bit-field %0 is not wide enough to store all enumerators of %1",
[d]="bit-field %0 is not wide enough to store all enumerators of %1",
[b]=t,
[e]=u,
[g]="bit\\-field (.*?) is not wide enough to store all enumerators of (.*?)",
[a]="bit\\-field (.*?) is not wide enough to store all enumerators of (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]",
[e]=Vb,
[h]=hc,
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[j]={{F,14109,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(InitLoc, diag::warn_bitfield_too_small_for_enum) << Bitfield << ED;"}}
[j]={{F,14109,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(InitLoc, diag::warn_bitfield_too_small_for_enum) << Bitfield << ED;"}},
[k]={
["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:28:14: warning: bit-field \'two_bits\' is not wide enough to store all enumerators of \'ThreeBits\' [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:29:14: warning: bit-field \'two_bits\' is not wide enough to store all enumerators of \'ThreeBitsSigned\' [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:34:21: warning: bit-field \'two_bits_signed\' is not wide enough to store all enumerators of \'ThreeBits\' [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:35:21: warning: bit-field \'two_bits_signed\' is not wide enough to store all enumerators of \'ThreeBitsSigned\' [-Wbitfield-enum-conversion]"}
}
},
},
["warn_bitfield_width_exceeds_type_width"]={
["warn_bitfield_width_exceeds_type_width"]={
[c]="width of bit-field A (B bits) exceeds the width of its type; value will be truncated to C bitD [-Wbitfield-width]",
[f]="width of bit-field A (B bits) exceeds the width of its type; value will be truncated to C bitD [-Wbitfield-width]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"bitfield-width"},
[r]={"bitfield-width"},
[q]="bitfield-width",
[q]="bitfield-width",
[h]="width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2",
[d]="width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2",
[b]=t,
[e]=u,
[g]="width of bit\\-field (.*?) \\((.*?) bits\\) exceeds the width of its type; value will be truncated to (.*?) bit(.*?)",
[a]="width of bit\\-field (.*?) \\((.*?) bits\\) exceeds the width of its type; value will be truncated to (.*?) bit(.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-width[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-width[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"},
[i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"},
[j]={{v,17961,"// 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    // Warn on types where the user might conceivably expect to get all\n    // specified bits as value bits: that\'s all integral types other than\n    // \'bool\'.\n    if (BitfieldIsOverwide && !FieldTy->isBooleanType() && FieldName) {\n      Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_width) << FieldName << toString(Value, 10) << (unsigned)TypeWidth;"}}
[j]={{w,17961,"// 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    // Warn on types where the user might conceivably expect to get all\n    // specified bits as value bits: that\'s all integral types other than\n    // \'bool\'.\n    if (BitfieldIsOverwide && !FieldTy->isBooleanType() && FieldName) {\n      Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_width) << FieldName << toString(Value, 10) << (unsigned)TypeWidth;"}},
[k]={
["clang/test/SemaCXX/bitfield-layout.cpp"]={"clang/test/SemaCXX/bitfield-layout.cpp:8:8: warning: width of bit-field \'c\' (9 bits) exceeds the width of its type; value will be truncated to 8 bits [-Wbitfield-width]","clang/test/SemaCXX/bitfield-layout.cpp:20:8: warning: width of bit-field \'c\' (16 bits) exceeds the width of its type; value will be truncated to 8 bits [-Wbitfield-width]","clang/test/SemaCXX/bitfield-layout.cpp:26:8: warning: width of bit-field \'c\' (32 bits) exceeds the width of its type; value will be truncated to 8 bits [-Wbitfield-width]","clang/test/SemaCXX/bitfield-layout.cpp:32:8: warning: width of bit-field \'c\' (64 bits) exceeds the width of its type; value will be truncated to 8 bits [-Wbitfield-width]","clang/test/SemaCXX/bitfield-layout.cpp:38:8: warning: width of bit-field \'c\' (4294967297 bits) exceeds the width of its type; value will be truncated to 8 bits [-Wbitfield-width]"}
}
},
},
["warn_bitwise_instead_of_logical"]={
["warn_bitwise_instead_of_logical"]={
[c]="use of bitwise \'A\' with boolean operands [-Wbitwise-instead-of-logical]",
[f]="use of bitwise \'A\' with boolean operands [-Wbitwise-instead-of-logical]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={T,ab,"bitwise-instead-of-logical","bool-operation",lb},
[r]={U,bb,"bitwise-instead-of-logical","bool-operation",mb},
[q]="bitwise-instead-of-logical",
[q]="bitwise-instead-of-logical",
[h]="use of bitwise \'%0\' with boolean operands",
[d]="use of bitwise \'%0\' with boolean operands",
[b]=t,
[e]=u,
[g]="use of bitwise \'(.*?)\' with boolean operands",
[a]="use of bitwise \'(.*?)\' with boolean operands",
[a]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-instead\\-of\\-logical[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-instead\\-of\\-logical[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Gb,1615397021,Cb},
[i]={Mb,1615397021,Ib},
[j]={{F,15248,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr))\n    if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && BO->getLHS()->isKnownToHaveBooleanValue() && BO->getRHS()->isKnownToHaveBooleanValue() && BO->getLHS()->HasSideEffects(S.Context) && BO->getRHS()->HasSideEffects(S.Context)) {\n      S.Diag(BO->getBeginLoc(), diag::warn_bitwise_instead_of_logical) << (BO->getOpcode() == BO_And ? \"&\" : \"|\") << OrigE->getSourceRange() << FixItHint::CreateReplacement(BO->getOperatorLoc(), (BO->getOpcode() == BO_And ? \"&&\" : \"||\"));"}}
[j]={{F,15248,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr))\n    if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && BO->getLHS()->isKnownToHaveBooleanValue() && BO->getRHS()->isKnownToHaveBooleanValue() && BO->getLHS()->HasSideEffects(S.Context) && BO->getRHS()->HasSideEffects(S.Context)) {\n      S.Diag(BO->getBeginLoc(), diag::warn_bitwise_instead_of_logical) << (BO->getOpcode() == BO_And ? \"&\" : \"|\") << OrigE->getSourceRange() << FixItHint::CreateReplacement(BO->getOperatorLoc(), (BO->getOpcode() == BO_And ? \"&&\" : \"||\"));"}},
[k]={
["clang/test/Sema/warn-bitwise-or-bool.c"]={"clang/test/Sema/warn-bitwise-or-bool.c:27:7: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]","clang/test/Sema/warn-bitwise-or-bool.c:32:7: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]","clang/test/Sema/warn-bitwise-or-bool.c:35:7: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]","clang/test/Sema/warn-bitwise-or-bool.c:40:7: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]","clang/test/Sema/warn-bitwise-or-bool.c:48:7: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]","clang/test/Sema/warn-bitwise-or-bool.c:52:7: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]","clang/test/Sema/warn-bitwise-or-bool.c:58:8: warning: use of bitwise \'|\' with boolean operands [-Wbitwise-instead-of-logical]"}
}
},
},
["warn_bitwise_negation_bool"]={
["warn_bitwise_negation_bool"]={
[c]="bitwise negation of a boolean expression... did you mean logical negation? [-Wbool-operation]",
[f]="bitwise negation of a boolean expression... did you mean logical negation? [-Wbool-operation]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={T,ab,"bool-operation",lb},
[r]={U,bb,"bool-operation",mb},
[q]="bool-operation",
[q]="bool-operation",
[h]="bitwise negation of a boolean expression%select{;| always evaluates to \'true\';}0 did you mean logical negation?",
[d]="bitwise negation of a boolean expression%select{;| always evaluates to \'true\';}0 did you mean logical negation?",
[b]=t,
[e]=u,
[g]="bitwise negation of a boolean expression(?:;| always evaluates to \'true\';) did you mean logical negation\\?",
[a]="bitwise negation of a boolean expression(?:;| always evaluates to \'true\';) did you mean logical negation\\?",
[a]=" \\[(?:\\-Werror,)?\\-Wbool\\-operation[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbool\\-operation[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{F,15238,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *UO = dyn_cast<UnaryOperator>(SourceExpr))\n    if (UO->getOpcode() == UO_Not && UO->getSubExpr()->isKnownToHaveBooleanValue())\n      S.Diag(UO->getBeginLoc(), diag::warn_bitwise_negation_bool) << OrigE->getSourceRange() << T->isBooleanType() << FixItHint::CreateReplacement(UO->getBeginLoc(), \"!\");"}}
[j]={{F,15238,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *UO = dyn_cast<UnaryOperator>(SourceExpr))\n    if (UO->getOpcode() == UO_Not && UO->getSubExpr()->isKnownToHaveBooleanValue())\n      S.Diag(UO->getBeginLoc(), diag::warn_bitwise_negation_bool) << OrigE->getSourceRange() << T->isBooleanType() << FixItHint::CreateReplacement(UO->getBeginLoc(), \"!\");"}},
[k]={
["clang/test/Sema/warn-bitwise-negation-bool.c"]={"clang/test/Sema/warn-bitwise-negation-bool.c:15:7: warning: bitwise negation of a boolean expression always evaluates to \'true\'; did you mean logical negation? [-Wbool-operation]","clang/test/Sema/warn-bitwise-negation-bool.c:17:7: warning: bitwise negation of a boolean expression always evaluates to \'true\'; did you mean logical negation? [-Wbool-operation]","clang/test/Sema/warn-bitwise-negation-bool.c:20:7: warning: bitwise negation of a boolean expression; did you mean logical negation? [-Wbool-operation]","clang/test/Sema/warn-bitwise-negation-bool.c:22:7: warning: bitwise negation of a boolean expression always evaluates to \'true\'; did you mean logical negation? [-Wbool-operation]"}
}
},
},
["warn_bitwise_op_in_bitwise_op"]={
["warn_bitwise_op_in_bitwise_op"]={
[c]="\'A\' within \'B\' [-Wbitwise-op-parentheses]",
[f]="\'A\' within \'B\' [-Wbitwise-op-parentheses]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={T,ab,"bitwise-op-parentheses","parentheses"},
[r]={U,bb,"bitwise-op-parentheses","parentheses"},
[q]="bitwise-op-parentheses",
[q]="bitwise-op-parentheses",
[h]="\'%0\' within \'%1\'",
[d]="\'%0\' within \'%1\'",
[b]=t,
[e]=u,
[g]="\'(.*?)\' within \'(.*?)\'",
[a]="\'(.*?)\' within \'(.*?)\'",
[a]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-op\\-parentheses[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-op\\-parentheses[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"84543b09cb28",1449985301,"[Sema] Add -Wparentheses warnings for \'^\' in \'|\' expressions and \'&\' in \'^\' expressions to complimen..."},
[i]={"84543b09cb28",1449985301,"[Sema] Add -Wparentheses warnings for \'^\' in \'|\' expressions and \'&\' in \'^\' expressions to complimen..."},
[j]={{C,15831,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_bitwise_op_in_bitwise_op) << Bop->getOpcodeStr() << BinaryOperator::getOpcodeStr(Opc) << Bop->getSourceRange() << OpLoc;"}}
[j]={{D,15831,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_bitwise_op_in_bitwise_op) << Bop->getOpcodeStr() << BinaryOperator::getOpcodeStr(Opc) << Bop->getSourceRange() << OpLoc;"}},
[k]={
["clang/test/Sema/bitwise-op-parentheses.c"]={"clang/test/Sema/bitwise-op-parentheses.c:11:12: warning: \'&\' within \'|\' [-Wbitwise-op-parentheses]","clang/test/Sema/bitwise-op-parentheses.c:19:16: warning: \'&\' within \'|\' [-Wbitwise-op-parentheses]","clang/test/Sema/bitwise-op-parentheses.c:27:12: warning: \'^\' within \'|\' [-Wbitwise-op-parentheses]","clang/test/Sema/bitwise-op-parentheses.c:35:16: warning: \'^\' within \'|\' [-Wbitwise-op-parentheses]","clang/test/Sema/bitwise-op-parentheses.c:43:12: warning: \'&\' within \'^\' [-Wbitwise-op-parentheses]","clang/test/Sema/bitwise-op-parentheses.c:51:16: warning: \'&\' within \'^\' [-Wbitwise-op-parentheses]"}
}
},
},
["warn_block_capture_autoreleasing"]={
["warn_block_capture_autoreleasing"]={
[c]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]",
[f]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"block-capture-autoreleasing"},
[r]={"block-capture-autoreleasing"},
[q]="block-capture-autoreleasing",
[q]="block-capture-autoreleasing",
[h]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs",
[d]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs",
[b]=t,
[e]=u,
[g]="block captures an autoreleasing out\\-parameter, which may result in use\\-after\\-free bugs",
[a]="block captures an autoreleasing out\\-parameter, which may result in use\\-after\\-free bugs",
[a]=" \\[(?:\\-Werror,)?\\-Wblock\\-capture\\-autoreleasing[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wblock\\-capture\\-autoreleasing[^\\]]*\\]",
[e]=hc,
[h]=qc,
[i]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[i]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[j]={{C,19261,"// 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  // Warn about implicitly autoreleasing indirect parameters captured by blocks.\n  if (const auto *PT = CaptureType->getAs<PointerType>()) {\n    if (!Invalid && PointeeTy->getAs<ObjCObjectPointerType>() && PointeeTy.getObjCLifetime() == Qualifiers::OCL_Autoreleasing && !S.Context.hasDirectOwnershipQualifier(PointeeTy)) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::warn_block_capture_autoreleasing);"}}
[j]={{D,19261,"// 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  // Warn about implicitly autoreleasing indirect parameters captured by blocks.\n  if (const auto *PT = CaptureType->getAs<PointerType>()) {\n    if (!Invalid && PointeeTy->getAs<ObjCObjectPointerType>() && PointeeTy.getObjCLifetime() == Qualifiers::OCL_Autoreleasing && !S.Context.hasDirectOwnershipQualifier(PointeeTy)) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::warn_block_capture_autoreleasing);"}},
[k]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:829:12: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]","clang/test/SemaObjC/arc.m:830:12: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]","clang/test/SemaObjC/arc.m:832:12: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]","clang/test/SemaObjC/arc.m:835:12: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]","clang/test/SemaObjC/arc.m:836:12: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]","clang/test/SemaObjC/arc.m:838:12: warning: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]"}
}
},
},
["warn_block_literal_attributes_on_omitted_return_type"]={
["warn_block_literal_attributes_on_omitted_return_type"]={
[c]="attribute A ignored, because it cannot be applied to omitted return type [-Wignored-attributes]",
[f]="attribute A ignored, because it cannot be applied to omitted return type [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="attribute %0 ignored, because it cannot be applied to omitted return type",
[b]=t,
[b]=t,
[g]="attribute (.*?) ignored, because it cannot be applied to omitted return type",
[c]=s,
[a]=J,
[r]={K,A},
[e]=l,
[q]=A,
[d]="attribute %0 ignored, because it cannot be applied to omitted return type",
[e]=u,
[a]="attribute (.*?) ignored, because it cannot be applied to omitted return type",
[g]=L,
[h]=m,
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[j]={{hb,817,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  for (ParsedAttr &AL : declarator.getMutableDeclSpec().getAttributes()) {\n    S.Diag(AL.getLoc(), diag::warn_block_literal_attributes_on_omitted_return_type) << AL;"}}
[j]={{cb,817,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  for (ParsedAttr &AL : declarator.getMutableDeclSpec().getAttributes()) {\n    S.Diag(AL.getLoc(), diag::warn_block_literal_attributes_on_omitted_return_type) << AL;"}},
[k]={
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:13:33: warning: attribute \'_Nonnull\' ignored, because it cannot be applied to omitted return type [-Wignored-attributes]","clang/test/SemaObjC/block-omitted-return-type.m:19:34: warning: attribute \'_Nonnull\' ignored, because it cannot be applied to omitted return type [-Wignored-attributes]","clang/test/SemaObjC/block-omitted-return-type.m:32:34: warning: attribute \'_Nonnull\' ignored, because it cannot be applied to omitted return type [-Wignored-attributes]","clang/test/SemaObjC/block-omitted-return-type.m:32:77: warning: attribute \'_Nullable\' ignored, because it cannot be applied to omitted return type [-Wignored-attributes]","clang/test/SemaObjC/block-omitted-return-type.m:38:69: warning: attribute \'_Nonnull\' ignored, because it cannot be applied to omitted return type [-Wignored-attributes]"}
}
},
},
["warn_block_literal_qualifiers_on_omitted_return_type"]={
["warn_block_literal_qualifiers_on_omitted_return_type"]={
[c]="\'A\' qualifier on omitted return type B has no effect [-Wignored-qualifiers]",
[f]="\'A\' qualifier on omitted return type B has no effect [-Wignored-qualifiers]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={l,T,Ac,"ignored-qualifiers"},
[r]={m,U,Mc,"ignored-qualifiers"},
[q]="ignored-qualifiers",
[q]="ignored-qualifiers",
[h]="\'%0\' qualifier on omitted return type %1 has no effect",
[d]="\'%0\' qualifier on omitted return type %1 has no effect",
[b]=t,
[e]=u,
[g]="\'(.*?)\' qualifier on omitted return type (.*?) has no effect",
[a]="\'(.*?)\' qualifier on omitted return type (.*?) has no effect",
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[j]={{hb,829,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, (unsigned)-1, diag::warn_block_literal_qualifiers_on_omitted_return_type);"}}
[j]={{cb,829,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, (unsigned)-1, diag::warn_block_literal_qualifiers_on_omitted_return_type);"}},
[k]={
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:23:34: warning: \'const\' qualifier on omitted return type \'<dependent type>\' has no effect [-Wignored-qualifiers]","clang/test/SemaObjC/block-omitted-return-type.m:29:34: warning: \'const\' qualifier on omitted return type \'<dependent type>\' has no effect [-Wignored-qualifiers]","clang/test/SemaObjC/block-omitted-return-type.m:32:87: warning: \'const\' qualifier on omitted return type \'<dependent type>\' has no effect [-Wignored-qualifiers]","clang/test/SemaObjC/block-omitted-return-type.m:38:78: warning: \'const\' qualifier on omitted return type \'<dependent type>\' has no effect [-Wignored-qualifiers]"}
}
},
},
["warn_bool_switch_condition"]={
["warn_bool_switch_condition"]={
[c]="switch condition has boolean value [-Wswitch-bool]",
[f]="switch condition has boolean value [-Wswitch-bool]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,"switch-bool"},
[r]={U,bb,"switch-bool"},
[q]="switch-bool",
[q]="switch-bool",
[h]="switch condition has boolean value",
[d]="switch condition has boolean value",
[b]=t,
[e]=u,
[g]="switch condition has boolean value",
[a]="switch condition has boolean value",
[a]=" \\[(?:\\-Werror,)?\\-Wswitch\\-bool[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wswitch\\-bool[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan."},
[i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan."},
[j]={{O,1111,"StmtResult Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc) {\n  if (CondExpr && !CondExpr->isTypeDependent()) {\n    if (CondExpr->isKnownToHaveBooleanValue()) {\n      Diag(SwitchLoc, diag::warn_bool_switch_condition) << CondExpr->getSourceRange();"}}
[j]={{P,1111,"StmtResult Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc) {\n  if (CondExpr && !CondExpr->isTypeDependent()) {\n    if (CondExpr->isKnownToHaveBooleanValue()) {\n      Diag(SwitchLoc, diag::warn_bool_switch_condition) << CondExpr->getSourceRange();"}},
[k]={
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:81:3: warning: switch condition has boolean value [-Wswitch-bool]"}
}
},
},
["warn_braces_around_init"]={
["warn_braces_around_init"]={
[c]="braces around ...initializer [-Wbraced-scalar-init]",
[f]="braces around ...initializer [-Wbraced-scalar-init]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"braced-scalar-init"},
[r]={"braced-scalar-init"},
[q]="braced-scalar-init",
[q]="braced-scalar-init",
[h]="braces around %select{scalar |}0initializer",
[d]="braces around %select{scalar |}0initializer",
[b]=t,
[e]=u,
[g]="braces around (?:scalar |)initializer",
[a]="braces around (?:scalar |)initializer",
[a]=" \\[(?:\\-Werror,)?\\-Wbraced\\-scalar\\-init[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbraced\\-scalar\\-init[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{U,1191,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_ParenAggInitMember:\n    DiagID = diag::warn_braces_around_init;"},{U,1198,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_Member:\n    // Warn on aggregate initialization but not on ctor init list or\n    // default member initializer.\n    if (Entity.getParent())\n      DiagID = diag::warn_braces_around_init;"}}
[j]={{W,1191,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_ParenAggInitMember:\n    DiagID = diag::warn_braces_around_init;"},{W,1198,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_Member:\n    // Warn on aggregate initialization but not on ctor init list or\n    // default member initializer.\n    if (Entity.getParent())\n      DiagID = diag::warn_braces_around_init;"}},
[k]={
["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:61:7: warning: braces around scalar initializer [-Wbraced-scalar-init]","clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:62:7: warning: braces around scalar initializer [-Wbraced-scalar-init]","clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:62:12: warning: braces around scalar initializer [-Wbraced-scalar-init]","clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:63:10: warning: braces around scalar initializer [-Wbraced-scalar-init]","clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:64:10: warning: braces around scalar initializer [-Wbraced-scalar-init]"}
}
},
},
["warn_break_binds_to_switch"]={
["warn_break_binds_to_switch"]={
[c]="\'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]",
[f]="\'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]",
[d]=s,
[f]=r,
[p]={cc},
[q]=cc,
[h]="\'break\' is bound to loop, GCC binds it to switch",
[b]=t,
[b]=t,
[g]="\'break\' is bound to loop, GCC binds it to switch",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[r]={uc},
[e]=k,
[q]=uc,
[d]="\'break\' is bound to loop, GCC binds it to switch",
[e]=u,
[a]="\'break\' is bound to loop, GCC binds it to switch",
[g]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[h]=l,
[i]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)"},
[i]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)"},
[j]={{O,2121,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_break_binds_to_switch);"}}
[j]={{P,2121,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_break_binds_to_switch);"}},
[k]={
["clang/test/Sema/loop-control.c"]={"clang/test/Sema/loop-control.c:98:20: warning: \'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]","clang/test/Sema/loop-control.c:105:26: warning: \'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]","clang/test/Sema/loop-control.c:112:29: warning: \'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]","clang/test/Sema/loop-control.c:119:21: warning: \'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]","clang/test/Sema/loop-control.c:146:29: warning: \'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]"}
}
},
},
["warn_builtin_chk_overflow"]={
["warn_builtin_chk_overflow"]={
[c]="\'A\' will always overflow; destination buffer has size B, but size argument is C [-Wbuiltin-memcpy-chk-size]",
[f]="\'A\' will always overflow; destination buffer has size B, but size argument is C [-Wbuiltin-memcpy-chk-size]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"builtin-memcpy-chk-size"},
[r]={"builtin-memcpy-chk-size"},
[q]="builtin-memcpy-chk-size",
[q]="builtin-memcpy-chk-size",
[h]="\'%0\' will always overflow; destination buffer has size %1, but size argument is %2",
[d]="\'%0\' will always overflow; destination buffer has size %1, but size argument is %2",
[b]=t,
[e]=u,
[g]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)",
[a]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-memcpy\\-chk\\-size[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-memcpy\\-chk\\-size[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[i]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[j]={{F,1276,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___mempcpy_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"},{F,1286,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___vsnprintf_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"}}
[j]={{F,1276,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___mempcpy_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"},{F,1286,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___vsnprintf_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"}},
[k]={
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:231:9: warning: \'strlcpy\' will always overflow; destination buffer has size 20, but size argument is 40 [-Wbuiltin-memcpy-chk-size]","clang/test/Sema/builtins.c:238:9: warning: \'strlcat\' will always overflow; destination buffer has size 20, but size argument is 40 [-Wbuiltin-memcpy-chk-size]","clang/test/Sema/builtins.c:248:5: warning: \'memcpy\' will always overflow; destination buffer has size 4, but size argument is 5 [-Wbuiltin-memcpy-chk-size]","clang/test/Sema/builtins.c:256:5: warning: \'memcpy\' will always overflow; destination buffer has size 4, but size argument is 5 [-Wbuiltin-memcpy-chk-size]","clang/test/Sema/builtins.c:354:3: warning: \'memcpy\' will always overflow; destination buffer has size 10, but size argument is 11 [-Wbuiltin-memcpy-chk-size]","clang/test/Sema/builtins.c:355:3: warning: \'memcpy\' will always overflow; destination buffer has size 10, but size argument is 11 [-Wbuiltin-memcpy-chk-size]"}
}
},
},
["warn_builtin_unknown"]={
["warn_builtin_unknown"]={
[c]="use of unknown builtin A [-Wimplicit-function-declaration]",
[f]="use of unknown builtin A [-Wimplicit-function-declaration]",
[d]=tb,
[b]=vb,
[f]=oc,
[c]=Gc,
[p]={T,ab,"implicit","implicit-function-declaration",lb},
[r]={U,bb,"implicit","implicit-function-declaration",mb},
[q]="implicit-function-declaration",
[q]="implicit-function-declaration",
[h]="use of unknown builtin %0",
[d]="use of unknown builtin %0",
[b]=lc,
[e]=Lc,
[g]="use of unknown builtin (.*?)",
[a]="use of unknown builtin (.*?)",
[a]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"56fbc37bbba3",1254172459,"Provide a custom diagnostic when code tries to use an unknown builtin"},
[i]={"56fbc37bbba3",1254172459,"Provide a custom diagnostic when code tries to use an unknown builtin"},
[j]={{v,16050,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  if (II.getName().startswith(\"__builtin_\"))\n    diag_id = diag::warn_builtin_unknown;"}}
[j]={{w,16050,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  if (II.getName().startswith(\"__builtin_\"))\n    diag_id = diag::warn_builtin_unknown;"}},
[k]={
["clang/test/Sema/builtins-x86_64.c"]={"clang/test/Sema/builtins-x86_64.c:17:9: error: use of unknown builtin \'__builtin_ia32_readeflags_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:18:9: error: use of unknown builtin \'__builtin_ia32_writeeflags_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:19:9: error: use of unknown builtin \'__builtin_ia32_cvtss2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:20:9: error: use of unknown builtin \'__builtin_ia32_cvttss2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:21:9: error: use of unknown builtin \'__builtin_ia32_cvtsd2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:22:9: error: use of unknown builtin \'__builtin_ia32_cvttsd2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:23:9: error: use of unknown builtin \'__builtin_ia32_crc32di\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:24:9: error: use of unknown builtin \'__builtin_ia32_rdfsbase64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:25:9: error: use of unknown builtin \'__builtin_ia32_rdgsbase64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:26:9: error: use of unknown builtin \'__builtin_ia32_wrfsbase64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:27:9: error: use of unknown builtin \'__builtin_ia32_wrgsbase64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:28:9: error: use of unknown builtin \'__builtin_ia32_fxrstor64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:29:9: error: use of unknown builtin \'__builtin_ia32_fxsave64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:30:9: error: use of unknown builtin \'__builtin_ia32_xsave64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:31:9: error: use of unknown builtin \'__builtin_ia32_xrstor64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:32:9: error: use of unknown builtin \'__builtin_ia32_xsaveopt64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:33:9: error: use of unknown builtin \'__builtin_ia32_xrstors64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:34:9: error: use of unknown builtin \'__builtin_ia32_xsavec64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:35:9: error: use of unknown builtin \'__builtin_ia32_xsaves64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:36:9: error: use of unknown builtin \'__builtin_ia32_addcarryx_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:37:9: error: use of unknown builtin \'__builtin_ia32_addcarry_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:38:9: error: use of unknown builtin \'__builtin_ia32_subborrow_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:39:9: error: use of unknown builtin \'__builtin_ia32_rdseed64_step\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:40:9: error: use of unknown builtin \'__builtin_ia32_bextr_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:41:9: error: use of unknown builtin \'__builtin_ia32_bzhi_di\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:42:9: error: use of unknown builtin \'__builtin_ia32_pdep_di\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:43:9: error: use of unknown builtin \'__builtin_ia32_pext_di\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:44:9: error: use of unknown builtin \'__builtin_ia32_bextri_u64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:45:9: error: use of unknown builtin \'__builtin_ia32_pbroadcastq512_gpr_mask\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:46:9: error: use of unknown builtin \'__builtin_ia32_pbroadcastq128_gpr_mask\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:47:9: error: use of unknown builtin \'__builtin_ia32_pbroadcastq256_gpr_mask\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:48:9: error: use of unknown builtin \'__builtin_ia32_vcvtsd2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:49:9: error: use of unknown builtin \'__builtin_ia32_vcvtsd2usi64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:50:9: error: use of unknown builtin \'__builtin_ia32_vcvtss2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:51:9: error: use of unknown builtin \'__builtin_ia32_vcvtss2usi64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:52:9: error: use of unknown builtin \'__builtin_ia32_vcvttsd2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:53:9: error: use of unknown builtin \'__builtin_ia32_vcvttsd2usi64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:54:9: error: use of unknown builtin \'__builtin_ia32_vcvttss2si64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:55:9: error: use of unknown builtin \'__builtin_ia32_vcvttss2usi64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:56:9: error: use of unknown builtin \'__builtin_ia32_cvtsi2sd64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:57:9: error: use of unknown builtin \'__builtin_ia32_cvtsi2ss64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:58:9: error: use of unknown builtin \'__builtin_ia32_cvtusi2sd64\' [-Wimplicit-function-declaration]","clang/test/Sema/builtins-x86_64.c:59:9: error: use of unknown builtin \'__builtin_ia32_cvtusi2ss64\' [-Wimplicit-function-declaration]"}
}
},
},
["warn_c17_compat_ellipsis_only_parameter"]={
["warn_c17_compat_ellipsis_only_parameter"]={
[c]="\'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="\'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="\'...\' as the only parameter of a function is incompatible with C standards before C2x",
[d]="\'...\' as the only parameter of a function is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="\'\\.\\.\\.\' as the only parameter of a function is incompatible with C standards before C2x",
[a]="\'\\.\\.\\.\' as the only parameter of a function is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{hb,5445,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      } else {\n        // We allow a zero-parameter variadic function in C if the\n        // function is marked with the \"overloadable\" attribute. Scan\n        // for this attribute now. We also allow it in C2x per WG14 N2975.\n        if (!FTI.NumParams && FTI.isVariadic && !LangOpts.CPlusPlus) {\n          if (LangOpts.C2x)\n            S.Diag(FTI.getEllipsisLoc(), diag::warn_c17_compat_ellipsis_only_parameter);"}}
[j]={{cb,5445,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      } else {\n        // We allow a zero-parameter variadic function in C if the\n        // function is marked with the \"overloadable\" attribute. Scan\n        // for this attribute now. We also allow it in C2x per WG14 N2975.\n        if (!FTI.NumParams && FTI.isVariadic && !LangOpts.CPlusPlus) {\n          if (LangOpts.C2x)\n            S.Diag(FTI.getEllipsisLoc(), diag::warn_c17_compat_ellipsis_only_parameter);"}},
[k]={
["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:11:11: warning: \'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2975.c:35:20: warning: \'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c17_compat_static_assert_no_message"]={
["warn_c17_compat_static_assert_no_message"]={
[c]="\'_Static_assert\' with no message is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="\'_Static_assert\' with no message is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="\'_Static_assert\' with no message is incompatible with C standards before C2x",
[d]="\'_Static_assert\' with no message is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="\'_Static_assert\' with no message is incompatible with C standards before C2x",
[a]="\'_Static_assert\' with no message is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=Q,
[h]=Q,
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",1009,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::r_paren)) {\n    if (getLangOpts().CPlusPlus17)\n    else if (getLangOpts().CPlusPlus)\n    else if (getLangOpts().C2x)\n      DiagVal = diag::warn_c17_compat_static_assert_no_message;"}}
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",1009,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::r_paren)) {\n    if (getLangOpts().CPlusPlus17)\n    else if (getLangOpts().CPlusPlus)\n    else if (getLangOpts().C2x)\n      DiagVal = diag::warn_c17_compat_static_assert_no_message;"}},
[k]={
["clang/test/Parser/static_assert.c"]={"clang/test/Parser/static_assert.c:39:17: warning: \'_Static_assert\' with no message is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_bitint_suffix"]={
["warn_c2x_compat_bitint_suffix"]={
[c]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x",
[d]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x",
[a]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=l,
[h]=m,
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt"},
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt"},
[j]={{"clang/lib/Lex/PPExpressions.cpp",340,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // \'wb/uwb\' literals are a C2x feature. We explicitly do not support the\n    // suffix in C++ as an extension because a library-based UDL that resolves\n    // to a library type may be more appropriate there.\n    if (Literal.isBitInt)\n      PP.Diag(PeekTok, PP.getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"},{C,4068,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    // \'wb/uwb\' literals are a C2x feature. We support _BitInt as a type in C++,\n    // but we do not currently support the suffix in C++ mode because it\'s not\n    // entirely clear whether WG21 will prefer this suffix to return a library\n    // type such as std::bit_int instead of returning a _BitInt.\n    if (Literal.isBitInt && !getLangOpts().CPlusPlus)\n      PP.Diag(Tok.getLocation(), getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"}}
[j]={{"clang/lib/Lex/PPExpressions.cpp",340,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // \'wb/uwb\' literals are a C2x feature. We explicitly do not support the\n    // suffix in C++ as an extension because a library-based UDL that resolves\n    // to a library type may be more appropriate there.\n    if (Literal.isBitInt)\n      PP.Diag(PeekTok, PP.getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"},{D,4068,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    // \'wb/uwb\' literals are a C2x feature. We support _BitInt as a type in C++,\n    // but we do not currently support the suffix in C++ mode because it\'s not\n    // entirely clear whether WG21 will prefer this suffix to return a library\n    // type such as std::bit_int instead of returning a _BitInt.\n    if (Literal.isBitInt && !getLangOpts().CPlusPlus)\n      PP.Diag(Tok.getLocation(), getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"}},
[k]={
["clang/test/Lexer/bitint-constants-compat.c"]={"clang/test/Lexer/bitint-constants-compat.c:5:5: warning: \'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/Lexer/bitint-constants-compat.c:11:3: warning: \'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_digit_separator"]={
["warn_c2x_compat_digit_separator"]={
[c]="digit separators are incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="digit separators are incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="digit separators are incompatible with C standards before C2x",
[d]="digit separators are incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="digit separators are incompatible with C standards before C2x",
[a]="digit separators are incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=G,
[h]=H,
[i]={"e44831005905",1615551663,"Add support for digit separators in C2x."},
[i]={"e44831005905",1615551663,"Add support for digit separators in C2x."},
[j]={{kb,1963,"/// LexNumericConstant - Lex the remainder of a integer or floating point\n/// constant. From[-1] is the first character lexed.  Return the end of the\n/// constant.\nbool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {\n  // If we have a digit separator, continue.\n  if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n    if (isAsciiIdentifierContinue(Next)) {\n      if (!isLexingRawMode())\n        Diag(CurPtr, LangOpts.CPlusPlus ? diag::warn_cxx11_compat_digit_separator : diag::warn_c2x_compat_digit_separator);"}}
[j]={{lb,1963,"/// LexNumericConstant - Lex the remainder of a integer or floating point\n/// constant. From[-1] is the first character lexed.  Return the end of the\n/// constant.\nbool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {\n  // If we have a digit separator, continue.\n  if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n    if (isAsciiIdentifierContinue(Next)) {\n      if (!isLexingRawMode())\n        Diag(CurPtr, LangOpts.CPlusPlus ? diag::warn_cxx11_compat_digit_separator : diag::warn_c2x_compat_digit_separator);"}},
[k]={
["clang/test/Sema/pre-c2x-compat.c"]={"clang/test/Sema/pre-c2x-compat.c:3:21: warning: digit separators are incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_empty_initializer"]={
["warn_c2x_compat_empty_initializer"]={
[c]="use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="use of an empty initializer is incompatible with C standards before C2x",
[d]="use of an empty initializer is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="use of an empty initializer is incompatible with C standards before C2x",
[a]="use of an empty initializer is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=Q,
[h]=Q,
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"},
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"},
[j]={{"clang/lib/Parse/ParseInit.cpp",456,"/// ParseBraceInitializer - Called when parsing an initializer that has a\n/// leading open brace.\n///\n///      initializer: [C99 6.7.8]\n///        \'{\' initializer-list \'}\'\n///        \'{\' initializer-list \',\' \'}\'\n/// [C2x]  \'{\' \'}\'\n///\n///      initializer-list:\n///        designation[opt] initializer ...[opt]\n///        initializer-list \',\' designation[opt] initializer ...[opt]\n///\nExprResult Parser::ParseBraceInitializer() {\n  if (Tok.is(tok::r_brace)) {\n    // Empty initializers are a C++ feature and a GNU extension to C before C2x.\n    if (!getLangOpts().CPlusPlus) {\n      Diag(LBraceLoc, getLangOpts().C2x ? diag::warn_c2x_compat_empty_initializer : diag::ext_c_empty_initializer);"}}
[j]={{"clang/lib/Parse/ParseInit.cpp",456,"/// ParseBraceInitializer - Called when parsing an initializer that has a\n/// leading open brace.\n///\n///      initializer: [C99 6.7.8]\n///        \'{\' initializer-list \'}\'\n///        \'{\' initializer-list \',\' \'}\'\n/// [C2x]  \'{\' \'}\'\n///\n///      initializer-list:\n///        designation[opt] initializer ...[opt]\n///        initializer-list \',\' designation[opt] initializer ...[opt]\n///\nExprResult Parser::ParseBraceInitializer() {\n  if (Tok.is(tok::r_brace)) {\n    // Empty initializers are a C++ feature and a GNU extension to C before C2x.\n    if (!getLangOpts().CPlusPlus) {\n      Diag(LBraceLoc, getLangOpts().C2x ? diag::warn_c2x_compat_empty_initializer : diag::ext_c_empty_initializer);"}},
[k]={
["clang/test/C/C2x/n2900_n3011.c"]={"clang/test/C/C2x/n2900_n3011.c:12:30: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:14:11: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:16:16: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:25:24: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:28:16: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:30:39: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:36:15: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:41:10: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:47:10: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:49:5: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2900_n3011.c:56:23: warning: use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_keyword"]={
["warn_c2x_compat_keyword"]={
[c]="\'A\' is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="\'A\' is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="\'%0\' is incompatible with C standards before C2x",
[d]="\'%0\' is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="\'(.*?)\' is incompatible with C standards before C2x",
[a]="\'(.*?)\' is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=Q,
[h]=Q,
[i]={"06174134e418",1677335266,"[C2x] Implement support for revised spelling of keywords"},
[i]={"06174134e418",1677335266,"[C2x] Implement support for revised spelling of keywords"},
[j]={{Tb,4001,"/// 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_thread_local:\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,4245,"/// 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 (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,7760,"/// [GNU]  typeof-specifier:\n///          typeof ( expressions )\n///          typeof ( type-name )\n/// [GNU/C++] typeof unary-expression\n/// [C2x]  typeof-specifier:\n///          typeof \'(\' typeof-specifier-argument \')\'\n///          typeof_unqual \'(\' typeof-specifier-argument \')\'\n///\n///        typeof-specifier-argument:\n///          expression\n///          type-name\n///\nvoid Parser::ParseTypeofSpecifier(DeclSpec &DS) {\n  if (getLangOpts().C2x && !II->getName().startswith(\"__\"))\n    Diag(Tok.getLocation(), diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,7960,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  if (Tok.is(tok::kw__ExtInt)) {\n  } else {\n    // In C2x mode, diagnose that the use is not compatible with pre-C2x modes.\n    // Otherwise, diagnose that the use is a Clang extension.\n    if (getLangOpts().C2x)\n      Diag(Loc, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",976,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::kw_static_assert)) {\n    if (!getLangOpts().CPlusPlus) {\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",4504,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (Tok.is(tok::kw_alignas)) {\n    if (getLangOpts().C2x)\n      Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{qc,1014,"/// Parse a cast-expression, or, if \\pisUnaryExpression is true, parse\n/// a unary-expression.\n///\n/// \\p isAddressOfOperand exists because an id-expression that is the operand\n/// of address-of gets special treatment due to member pointers. NotCastExpr\n/// is set to true if the token is not the start of a cast-expression, and no\n/// diagnostic is emitted in this case and no tokens are consumed.\n///\n/// \\verbatim\n///      cast-expression: [C99 6.5.4]\n///        unary-expression\n///        \'(\' type-name \')\' cast-expression\n///\n///      unary-expression:  [C99 6.5.3]\n///        postfix-expression\n///        \'++\' unary-expression\n///        \'--\' unary-expression\n/// [Coro]  \'co_await\' cast-expression\n///        unary-operator cast-expression\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// [GNU]  \'&&\' identifier\n/// [C++11] \'noexcept\' \'(\' expression \')\' [C++11 5.3.7]\n/// [C++]  new-expression\n/// [C++]  delete-expression\n///\n///      unary-operator: one of\n///        \'&\'  \'*\'  \'+\'  \'-\'  \'~\'  \'!\'\n/// [GNU]  \'__extension__\'  \'__real\'  \'__imag\'\n///\n///      primary-expression: [C99 6.5.1]\n/// [C99]  identifier\n/// [C++]  id-expression\n///        constant\n///        string-literal\n/// [C++]  boolean-literal  [C++ 2.13.5]\n/// [C++11] \'nullptr\'        [C++11 2.14.7]\n/// [C++11] user-defined-literal\n///        \'(\' expression \')\'\n/// [C11]  generic-selection\n/// [C++2a] requires-expression\n///        \'__func__\'        [C99 6.4.2.2]\n/// [GNU]  \'__FUNCTION__\'\n/// [MS]    \'__FUNCDNAME__\'\n/// [MS]    \'L__FUNCTION__\'\n/// [MS]    \'__FUNCSIG__\'\n/// [MS]    \'L__FUNCSIG__\'\n/// [GNU]  \'__PRETTY_FUNCTION__\'\n/// [GNU]  \'(\' compound-statement \')\'\n/// [GNU]  \'__builtin_va_arg\' \'(\' assignment-expression \',\' type-name \')\'\n/// [GNU]  \'__builtin_offsetof\' \'(\' type-name \',\' offsetof-member-designator\')\'\n/// [GNU]  \'__builtin_choose_expr\' \'(\' assign-expr \',\' assign-expr \',\'\n///                                    assign-expr \')\'\n/// [GNU]  \'__builtin_FILE\' \'(\' \')\'\n/// [CLANG] \'__builtin_FILE_NAME\' \'(\' \')\'\n/// [GNU]  \'__builtin_FUNCTION\' \'(\' \')\'\n/// [MS]    \'__builtin_FUNCSIG\' \'(\' \')\'\n/// [GNU]  \'__builtin_LINE\' \'(\' \')\'\n/// [CLANG] \'__builtin_COLUMN\' \'(\' \')\'\n/// [GNU]  \'__builtin_source_location\' \'(\' \')\'\n/// [GNU]  \'__builtin_types_compatible_p\' \'(\' type-name \',\' type-name \')\'\n/// [GNU]  \'__null\'\n/// [OBJC]  \'[\' objc-message-expr \']\'\n/// [OBJC]  \'\\@selector\' \'(\' objc-selector-arg \')\'\n/// [OBJC]  \'\\@protocol\' \'(\' identifier \')\'\n/// [OBJC]  \'\\@encode\' \'(\' type-name \')\'\n/// [OBJC]  objc-string-literal\n/// [C++]  simple-type-specifier \'(\' expression-list[opt] \')\'      [C++ 5.2.3]\n/// [C++11] simple-type-specifier braced-init-list                  [C++11 5.2.3]\n/// [C++]  typename-specifier \'(\' expression-list[opt] \')\'        [C++ 5.2.3]\n/// [C++11] typename-specifier braced-init-list                    [C++11 5.2.3]\n/// [C++]  \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'    [C++ 5.2p1]\n/// [C++]  \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\' [C++ 5.2p1]\n/// [C++]  \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' expression \')\'                            [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' type-id \')\'                                [C++ 5.2p1]\n/// [C++]  \'this\'          [C++ 9.3.2]\n/// [G++]  unary-type-trait \'(\' type-id \')\'\n/// [G++]  binary-type-trait \'(\' type-id \',\' type-id \')\'          [TODO]\n/// [EMBT]  array-type-trait \'(\' type-id \',\' integer \')\'\n/// [clang] \'^\' block-literal\n///\n///      constant: [C99 6.4.4]\n///        integer-constant\n///        floating-constant\n///        enumeration-constant -> identifier\n///        character-constant\n///\n///      id-expression: [C++ 5.1]\n///                  unqualified-id\n///                  qualified-id\n///\n///      unqualified-id: [C++ 5.1]\n///                  identifier\n///                  operator-function-id\n///                  conversion-function-id\n///                  \'~\' class-name\n///                  template-id\n///\n///      new-expression: [C++ 5.3.4]\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///      delete-expression: [C++ 5.3.5]\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\n///\n/// [GNU/Embarcadero] unary-type-trait:\n///                  \'__is_arithmetic\'\n///                  \'__is_floating_point\'\n///                  \'__is_integral\'\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n///                  \'__is_complete_type\'\n///                  \'__is_void\'\n///                  \'__is_array\'\n///                  \'__is_function\'\n///                  \'__is_reference\'\n///                  \'__is_lvalue_reference\'\n///                  \'__is_rvalue_reference\'\n///                  \'__is_fundamental\'\n///                  \'__is_object\'\n///                  \'__is_scalar\'\n///                  \'__is_compound\'\n///                  \'__is_pointer\'\n///                  \'__is_member_object_pointer\'\n///                  \'__is_member_function_pointer\'\n///                  \'__is_member_pointer\'\n///                  \'__is_const\'\n///                  \'__is_volatile\'\n///                  \'__is_trivial\'\n///                  \'__is_standard_layout\'\n///                  \'__is_signed\'\n///                  \'__is_unsigned\'\n///\n/// [GNU] unary-type-trait:\n///                  \'__has_nothrow_assign\'\n///                  \'__has_nothrow_copy\'\n///                  \'__has_nothrow_constructor\'\n///                  \'__has_trivial_assign\'                  [TODO]\n///                  \'__has_trivial_copy\'                    [TODO]\n///                  \'__has_trivial_constructor\'\n///                  \'__has_trivial_destructor\'\n///                  \'__has_virtual_destructor\'\n///                  \'__is_abstract\'                        [TODO]\n///                  \'__is_class\'\n///                  \'__is_empty\'                            [TODO]\n///                  \'__is_enum\'\n///                  \'__is_final\'\n///                  \'__is_pod\'\n///                  \'__is_polymorphic\'\n///                  \'__is_sealed\'                          [MS]\n///                  \'__is_trivial\'\n///                  \'__is_union\'\n///                  \'__has_unique_object_representations\'\n///\n/// [Clang] unary-type-trait:\n///                  \'__is_aggregate\'\n///                  \'__trivially_copyable\'\n///\n///      binary-type-trait:\n/// [GNU]            \'__is_base_of\'\n/// [MS]              \'__is_convertible_to\'\n///                  \'__is_convertible\'\n///                  \'__is_same\'\n///\n/// [Embarcadero] array-type-trait:\n///                  \'__array_rank\'\n///                  \'__array_extent\'\n///\n/// [Embarcadero] expression-trait:\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n/// \\endverbatim\n///\nExprResult Parser::ParseCastExpression(CastParseKind ParseKind, bool isAddressOfOperand, bool &NotCastExpr, TypeCastState isTypeCast, bool isVectorLiteral, bool *NotPrimaryExpression) {\n  case tok::kw_nullptr:\n    if (getLangOpts().CPlusPlus)\n    else\n      Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"},{qc,2497,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n  else if (getLangOpts().C2x && OpTok.is(tok::kw_alignof))\n    Diag(OpTok, diag::warn_c2x_compat_keyword) << OpTok.getName();"}}
[j]={{Zb,4001,"/// 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_thread_local:\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Zb,4245,"/// 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 (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Zb,7760,"/// [GNU]  typeof-specifier:\n///          typeof ( expressions )\n///          typeof ( type-name )\n/// [GNU/C++] typeof unary-expression\n/// [C2x]  typeof-specifier:\n///          typeof \'(\' typeof-specifier-argument \')\'\n///          typeof_unqual \'(\' typeof-specifier-argument \')\'\n///\n///        typeof-specifier-argument:\n///          expression\n///          type-name\n///\nvoid Parser::ParseTypeofSpecifier(DeclSpec &DS) {\n  if (getLangOpts().C2x && !II->getName().startswith(\"__\"))\n    Diag(Tok.getLocation(), diag::warn_c2x_compat_keyword) << Tok.getName();"},{Zb,7960,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  if (Tok.is(tok::kw__ExtInt)) {\n  } else {\n    // In C2x mode, diagnose that the use is not compatible with pre-C2x modes.\n    // Otherwise, diagnose that the use is a Clang extension.\n    if (getLangOpts().C2x)\n      Diag(Loc, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",976,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::kw_static_assert)) {\n    if (!getLangOpts().CPlusPlus) {\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",4504,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (Tok.is(tok::kw_alignas)) {\n    if (getLangOpts().C2x)\n      Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Bc,1014,"/// Parse a cast-expression, or, if \\pisUnaryExpression is true, parse\n/// a unary-expression.\n///\n/// \\p isAddressOfOperand exists because an id-expression that is the operand\n/// of address-of gets special treatment due to member pointers. NotCastExpr\n/// is set to true if the token is not the start of a cast-expression, and no\n/// diagnostic is emitted in this case and no tokens are consumed.\n///\n/// \\verbatim\n///      cast-expression: [C99 6.5.4]\n///        unary-expression\n///        \'(\' type-name \')\' cast-expression\n///\n///      unary-expression:  [C99 6.5.3]\n///        postfix-expression\n///        \'++\' unary-expression\n///        \'--\' unary-expression\n/// [Coro]  \'co_await\' cast-expression\n///        unary-operator cast-expression\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// [GNU]  \'&&\' identifier\n/// [C++11] \'noexcept\' \'(\' expression \')\' [C++11 5.3.7]\n/// [C++]  new-expression\n/// [C++]  delete-expression\n///\n///      unary-operator: one of\n///        \'&\'  \'*\'  \'+\'  \'-\'  \'~\'  \'!\'\n/// [GNU]  \'__extension__\'  \'__real\'  \'__imag\'\n///\n///      primary-expression: [C99 6.5.1]\n/// [C99]  identifier\n/// [C++]  id-expression\n///        constant\n///        string-literal\n/// [C++]  boolean-literal  [C++ 2.13.5]\n/// [C++11] \'nullptr\'        [C++11 2.14.7]\n/// [C++11] user-defined-literal\n///        \'(\' expression \')\'\n/// [C11]  generic-selection\n/// [C++2a] requires-expression\n///        \'__func__\'        [C99 6.4.2.2]\n/// [GNU]  \'__FUNCTION__\'\n/// [MS]    \'__FUNCDNAME__\'\n/// [MS]    \'L__FUNCTION__\'\n/// [MS]    \'__FUNCSIG__\'\n/// [MS]    \'L__FUNCSIG__\'\n/// [GNU]  \'__PRETTY_FUNCTION__\'\n/// [GNU]  \'(\' compound-statement \')\'\n/// [GNU]  \'__builtin_va_arg\' \'(\' assignment-expression \',\' type-name \')\'\n/// [GNU]  \'__builtin_offsetof\' \'(\' type-name \',\' offsetof-member-designator\')\'\n/// [GNU]  \'__builtin_choose_expr\' \'(\' assign-expr \',\' assign-expr \',\'\n///                                    assign-expr \')\'\n/// [GNU]  \'__builtin_FILE\' \'(\' \')\'\n/// [CLANG] \'__builtin_FILE_NAME\' \'(\' \')\'\n/// [GNU]  \'__builtin_FUNCTION\' \'(\' \')\'\n/// [MS]    \'__builtin_FUNCSIG\' \'(\' \')\'\n/// [GNU]  \'__builtin_LINE\' \'(\' \')\'\n/// [CLANG] \'__builtin_COLUMN\' \'(\' \')\'\n/// [GNU]  \'__builtin_source_location\' \'(\' \')\'\n/// [GNU]  \'__builtin_types_compatible_p\' \'(\' type-name \',\' type-name \')\'\n/// [GNU]  \'__null\'\n/// [OBJC]  \'[\' objc-message-expr \']\'\n/// [OBJC]  \'\\@selector\' \'(\' objc-selector-arg \')\'\n/// [OBJC]  \'\\@protocol\' \'(\' identifier \')\'\n/// [OBJC]  \'\\@encode\' \'(\' type-name \')\'\n/// [OBJC]  objc-string-literal\n/// [C++]  simple-type-specifier \'(\' expression-list[opt] \')\'      [C++ 5.2.3]\n/// [C++11] simple-type-specifier braced-init-list                  [C++11 5.2.3]\n/// [C++]  typename-specifier \'(\' expression-list[opt] \')\'        [C++ 5.2.3]\n/// [C++11] typename-specifier braced-init-list                    [C++11 5.2.3]\n/// [C++]  \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'    [C++ 5.2p1]\n/// [C++]  \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\' [C++ 5.2p1]\n/// [C++]  \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' expression \')\'                            [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' type-id \')\'                                [C++ 5.2p1]\n/// [C++]  \'this\'          [C++ 9.3.2]\n/// [G++]  unary-type-trait \'(\' type-id \')\'\n/// [G++]  binary-type-trait \'(\' type-id \',\' type-id \')\'          [TODO]\n/// [EMBT]  array-type-trait \'(\' type-id \',\' integer \')\'\n/// [clang] \'^\' block-literal\n///\n///      constant: [C99 6.4.4]\n///        integer-constant\n///        floating-constant\n///        enumeration-constant -> identifier\n///        character-constant\n///\n///      id-expression: [C++ 5.1]\n///                  unqualified-id\n///                  qualified-id\n///\n///      unqualified-id: [C++ 5.1]\n///                  identifier\n///                  operator-function-id\n///                  conversion-function-id\n///                  \'~\' class-name\n///                  template-id\n///\n///      new-expression: [C++ 5.3.4]\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///      delete-expression: [C++ 5.3.5]\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\n///\n/// [GNU/Embarcadero] unary-type-trait:\n///                  \'__is_arithmetic\'\n///                  \'__is_floating_point\'\n///                  \'__is_integral\'\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n///                  \'__is_complete_type\'\n///                  \'__is_void\'\n///                  \'__is_array\'\n///                  \'__is_function\'\n///                  \'__is_reference\'\n///                  \'__is_lvalue_reference\'\n///                  \'__is_rvalue_reference\'\n///                  \'__is_fundamental\'\n///                  \'__is_object\'\n///                  \'__is_scalar\'\n///                  \'__is_compound\'\n///                  \'__is_pointer\'\n///                  \'__is_member_object_pointer\'\n///                  \'__is_member_function_pointer\'\n///                  \'__is_member_pointer\'\n///                  \'__is_const\'\n///                  \'__is_volatile\'\n///                  \'__is_trivial\'\n///                  \'__is_standard_layout\'\n///                  \'__is_signed\'\n///                  \'__is_unsigned\'\n///\n/// [GNU] unary-type-trait:\n///                  \'__has_nothrow_assign\'\n///                  \'__has_nothrow_copy\'\n///                  \'__has_nothrow_constructor\'\n///                  \'__has_trivial_assign\'                  [TODO]\n///                  \'__has_trivial_copy\'                    [TODO]\n///                  \'__has_trivial_constructor\'\n///                  \'__has_trivial_destructor\'\n///                  \'__has_virtual_destructor\'\n///                  \'__is_abstract\'                        [TODO]\n///                  \'__is_class\'\n///                  \'__is_empty\'                            [TODO]\n///                  \'__is_enum\'\n///                  \'__is_final\'\n///                  \'__is_pod\'\n///                  \'__is_polymorphic\'\n///                  \'__is_sealed\'                          [MS]\n///                  \'__is_trivial\'\n///                  \'__is_union\'\n///                  \'__has_unique_object_representations\'\n///\n/// [Clang] unary-type-trait:\n///                  \'__is_aggregate\'\n///                  \'__trivially_copyable\'\n///\n///      binary-type-trait:\n/// [GNU]            \'__is_base_of\'\n/// [MS]              \'__is_convertible_to\'\n///                  \'__is_convertible\'\n///                  \'__is_same\'\n///\n/// [Embarcadero] array-type-trait:\n///                  \'__array_rank\'\n///                  \'__array_extent\'\n///\n/// [Embarcadero] expression-trait:\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n/// \\endverbatim\n///\nExprResult Parser::ParseCastExpression(CastParseKind ParseKind, bool isAddressOfOperand, bool &NotCastExpr, TypeCastState isTypeCast, bool isVectorLiteral, bool *NotPrimaryExpression) {\n  case tok::kw_nullptr:\n    if (getLangOpts().CPlusPlus)\n    else\n      Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"},{Bc,2497,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n  else if (getLangOpts().C2x && OpTok.is(tok::kw_alignof))\n    Diag(OpTok, diag::warn_c2x_compat_keyword) << OpTok.getName();"}},
[k]={
["clang/test/C/C2x/n2934.c"]={"clang/test/C/C2x/n2934.c:8:1: warning: \'thread_local\' is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2934.c:8:21: warning: \'alignas\' is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2934.c:15:3: warning: \'bool\' is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2934.c:18:1: warning: \'static_assert\' is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2934.c:18:15: warning: \'alignof\' is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/C/C2x/n2934.c:18:36: warning: \'alignof\' is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_label_end_of_compound_statement"]={
["warn_c2x_compat_label_end_of_compound_statement"]={
[c]="label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="label at end of compound statement is incompatible with C standards before C2x",
[d]="label at end of compound statement is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="label at end of compound statement is incompatible with C standards before C2x",
[a]="label at end of compound statement is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=Q,
[h]=Q,
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."},
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."},
[j]={{"clang/lib/Parse/ParseStmt.cpp",1080,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_label_end_of_compound_statement : diag::ext_c_label_end_of_compound_statement);"}}
[j]={{"clang/lib/Parse/ParseStmt.cpp",1080,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_label_end_of_compound_statement : diag::ext_c_label_end_of_compound_statement);"}},
[k]={
["clang/test/Parser/c2x-label.c"]={"clang/test/Parser/c2x-label.c:9:1: warning: label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/Parser/c2x-label.c:19:5: warning: label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/Parser/c2x-label.c:26:5: warning: label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_literal_ucn_control_character"]={
["warn_c2x_compat_literal_ucn_control_character"]={
[c]="universal character name referring to a control character is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="universal character name referring to a control character is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="universal character name referring to a control character is incompatible with C standards before C2x",
[d]="universal character name referring to a control character is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="universal character name referring to a control character is incompatible with C standards before C2x",
[a]="universal character name referring to a control character is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=G,
[h]=H,
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[j]={{zc,687,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n      else\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}}
[j]={{Oc,687,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n      else\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}}
},
},
["warn_c2x_compat_literal_ucn_escape_basic_scs"]={
["warn_c2x_compat_literal_ucn_escape_basic_scs"]={
[c]="specifying character \'A\' with a universal character name is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="specifying character \'A\' with a universal character name is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="specifying character \'%0\' with a universal character name is incompatible with C standards before C2x",
[d]="specifying character \'%0\' with a universal character name is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="specifying character \'(.*?)\' with a universal character name is incompatible with C standards before C2x",
[a]="specifying character \'(.*?)\' with a universal character name is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=G,
[h]=H,
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[j]={{zc,680,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}}
[j]={{Oc,680,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}}
},
},
["warn_c2x_compat_pp_directive"]={
["warn_c2x_compat_pp_directive"]={
[c]="use of a \'#...\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="use of a \'#...\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C standards before C2x",
[d]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C standards before C2x",
[a]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=G,
[h]=H,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{S,771,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        if (LangOpts.CPlusPlus)\n        else\n          DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{S,3457,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  case PED_Elifndef:\n    if (LangOpts.CPlusPlus)\n    else\n      DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}}
[j]={{S,771,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        if (LangOpts.CPlusPlus)\n        else\n          DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{S,3457,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  case PED_Elifndef:\n    if (LangOpts.CPlusPlus)\n    else\n      DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}},
[k]={
["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:18:2: warning: use of a \'#elifdef\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/Preprocessor/ext-pp-directive.c:29:2: warning: use of a \'#elifndef\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/Preprocessor/ext-pp-directive.c:40:2: warning: use of a \'#elifdef\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]","clang/test/Preprocessor/ext-pp-directive.c:51:2: warning: use of a \'#elifndef\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_compat_warning_directive"]={
["warn_c2x_compat_warning_directive"]={
[c]="#warning is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[f]="#warning is incompatible with C standards before C2x [-Wpre-c2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={V,wb},
[r]={V,zb},
[q]=V,
[q]=V,
[h]="#warning is incompatible with C standards before C2x",
[d]="#warning is incompatible with C standards before C2x",
[b]=t,
[e]=u,
[g]="\\#warning is incompatible with C standards before C2x",
[a]="\\#warning is incompatible with C standards before C2x",
[a]=xb,
[g]=yb,
[e]=G,
[h]=H,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{S,1281,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  default:\n    case tok::pp_warning:\n      if (LangOpts.CPlusPlus)\n      else\n        Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}}
[j]={{S,1281,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  default:\n    case tok::pp_warning:\n      if (LangOpts.CPlusPlus)\n      else\n        Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}},
[k]={
["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:61:2: warning: #warning is incompatible with C standards before C2x [-Wpre-c2x-compat]"}
}
},
},
["warn_c2x_keyword"]={
["warn_c2x_keyword"]={
[c]="\'A\' is a keyword in C2x [-Wc2x-compat]",
[f]="\'A\' is a keyword in C2x [-Wc2x-compat]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"c2x-compat"},
[r]={"c2x-compat"},
[q]="c2x-compat",
[q]="c2x-compat",
[h]="\'%0\' is a keyword in C2x",
[d]="\'%0\' is a keyword in C2x",
[b]=t,
[e]=u,
[g]="\'(.*?)\' is a keyword in C2x",
[a]="\'(.*?)\' is a keyword in C2x",
[a]=" \\[(?:\\-Werror,)?\\-Wc2x\\-compat[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wc2x\\-compat[^\\]]*\\]",
[e]=G,
[h]=H,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{"clang/lib/Basic/IdentifierTable.cpp",919,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC2X) == KEYC2X)\n      return diag::warn_c2x_keyword;"}}
[j]={{"clang/lib/Basic/IdentifierTable.cpp",919,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC2X) == KEYC2X)\n      return diag::warn_c2x_keyword;"}},
[k]={
["clang/test/Sema/nullptr-prec2x.c"]={"clang/test/Sema/nullptr-prec2x.c:5:5: warning: \'nullptr\' is a keyword in C2x [-Wc2x-compat]"}
}
},
},
["warn_c99_compat_unicode_id"]={
["warn_c99_compat_unicode_id"]={
[c]="... is incompatible with C99 [-Wc99-compat]",
[f]="... is incompatible with C99 [-Wc99-compat]",
[d]=s,
[f]=r,
[A]=false,
[p]={bc},
[q]=bc,
[h]="%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99",
[b]=t,
[b]=t,
[g]="(?:using this character in an identifier|starting an identifier with this character) is incompatible with C99",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]",
[B]=false,
[e]=G,
[r]={oc},
[q]=oc,
[d]="%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99",
[e]=u,
[a]="(?:using this character in an identifier|starting an identifier with this character) is incompatible with C99",
[g]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]",
[h]=H,
[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."},
[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."},
[j]={{kb,1569,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {"},{kb,1580,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotAppearInIdentifier;"},{kb,1584,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n    } else if (IsFirst && C99DisallowedInitialIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotStartIdentifier;"}}
[j]={{lb,1569,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {"},{lb,1580,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotAppearInIdentifier;"},{lb,1584,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n    } else if (IsFirst && C99DisallowedInitialIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotStartIdentifier;"}},
[k]={
["clang/test/Preprocessor/utf8-allowed-chars.c"]={"clang/test/Preprocessor/utf8-allowed-chars.c:9:14: warning: using this character in an identifier is incompatible with C99 [-Wc99-compat]","clang/test/Preprocessor/utf8-allowed-chars.c:11:14: warning: using this character in an identifier is incompatible with C99 [-Wc99-compat]","clang/test/Preprocessor/utf8-allowed-chars.c:14:14: warning: using this character in an identifier is incompatible with C99 [-Wc99-compat]","clang/test/Preprocessor/utf8-allowed-chars.c:20:13: warning: starting an identifier with this character is incompatible with C99 [-Wc99-compat]"}
}
},
},
["warn_c99_compat_unicode_literal"]={
["warn_c99_compat_unicode_literal"]={
[c]="unicode literals are incompatible with C99 [-Wc99-compat]",
[f]="unicode literals are incompatible with C99 [-Wc99-compat]",
[d]=s,
[f]=r,
[A]=false,
[p]={bc},
[q]=bc,
[h]="unicode literals are incompatible with C99",
[b]=t,
[b]=t,
[g]="unicode literals are incompatible with C99",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]",
[B]=false,
[e]=G,
[r]={oc},
[q]=oc,
[d]="unicode literals are incompatible with C99",
[e]=u,
[a]="unicode literals are incompatible with C99",
[g]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]",
[h]=H,
[i]={"06d274fdb7c8",1363024902,"Add -Wc99-compat warning for C11 unicode string and character literals."},
[i]={"06d274fdb7c8",1363024902,"Add -Wc99-compat warning for C11 unicode string and character literals."},
[j]={{kb,2088,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode() && (Kind == tok::utf8_string_literal || Kind == tok::utf16_string_literal || Kind == tok::utf32_string_literal))\n    Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"},{kb,2304,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n      Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"}}
[j]={{lb,2088,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode() && (Kind == tok::utf8_string_literal || Kind == tok::utf16_string_literal || Kind == tok::utf32_string_literal))\n    Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"},{lb,2304,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n      Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"}},
[k]={
["clang/test/Lexer/unicode-strings.c"]={"clang/test/Lexer/unicode-strings.c:16:17: warning: unicode literals are incompatible with C99 [-Wc99-compat]","clang/test/Lexer/unicode-strings.c:17:21: warning: unicode literals are incompatible with C99 [-Wc99-compat]","clang/test/Lexer/unicode-strings.c:18:21: warning: unicode literals are incompatible with C99 [-Wc99-compat]","clang/test/Lexer/unicode-strings.c:20:14: warning: unicode literals are incompatible with C99 [-Wc99-compat]","clang/test/Lexer/unicode-strings.c:21:14: warning: unicode literals are incompatible with C99 [-Wc99-compat]"}
}
},
},
["warn_c99_keyword"]={
["warn_c99_keyword"]={
[c]="\'A\' is a keyword in C99 [-Wc99-compat]",
[f]="\'A\' is a keyword in C99 [-Wc99-compat]",
[d]=s,
[f]=r,
[A]=false,
[p]={bc},
[q]=bc,
[h]="\'%0\' is a keyword in C99",
[b]=t,
[b]=t,
[g]="\'(.*?)\' is a keyword in C99",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]",
[B]=false,
[e]=G,
[r]={oc},
[i]={Z,1625925174,Y},
[q]=oc,
[j]={{"clang/lib/Basic/IdentifierTable.cpp",917,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC99) == KEYC99)\n      return diag::warn_c99_keyword;"}}
[d]="\'%0\' is a keyword in C99",
[e]=u,
[a]="\'(.*?)\' is a keyword in C99",
[g]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]",
[h]=H,
[i]={ab,1625925174,Z},
[j]={{"clang/lib/Basic/IdentifierTable.cpp",917,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC99) == KEYC99)\n      return diag::warn_c99_keyword;"}},
[k]={
["clang/test/Lexer/keywords_test.c"]={"clang/test/Lexer/keywords_test.c:93:7: warning: \'restrict\' is a keyword in C99 [-Wc99-compat]","clang/test/Lexer/keywords_test.c:94:7: warning: \'inline\' is a keyword in C99 [-Wc99-compat]"}
}
},
},
["warn_c_kext"]={
["warn_c_kext"]={
[c]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only",
[f]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only",
[d]=s,
[f]=r,
[h]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only",
[b]=t,
[b]=t,
[g]="ignoring \\-fapple\\-kext which is valid for C\\+\\+ and Objective\\-C\\+\\+ only",
[c]=s,
[a]=ub,
[d]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only",
[e]=l,
[e]=u,
[a]="ignoring \\-fapple\\-kext which is valid for C\\+\\+ and Objective\\-C\\+\\+ only",
[g]=ub,
[h]=m,
[i]={"f7f04458b3d1",1296777684,"-fapple-kext cannot have \'weak\' visibility in this"},
[i]={"f7f04458b3d1",1296777684,"-fapple-kext cannot have \'weak\' visibility in this"},
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",498,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (LangOpts.AppleKext && !LangOpts.CPlusPlus)\n    Diags.Report(diag::warn_c_kext);"}}
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",498,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (LangOpts.AppleKext && !LangOpts.CPlusPlus)\n    Diags.Report(diag::warn_c_kext);"}}
},
},
["warn_call_to_pure_virtual_member_function_from_ctor_dtor"]={
["warn_call_to_pure_virtual_member_function_from_ctor_dtor"]={
[c]="call to pure virtual member function A has undefined behavior; overrides of B in subclasses are not available in the ... of C [-Wcall-to-pure-virtual-from-ctor-dtor]",
[f]="call to pure virtual member function A has undefined behavior; overrides of B in subclasses are not available in the ... of C [-Wcall-to-pure-virtual-from-ctor-dtor]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"call-to-pure-virtual-from-ctor-dtor"},
[r]={"call-to-pure-virtual-from-ctor-dtor"},
[q]="call-to-pure-virtual-from-ctor-dtor",
[q]="call-to-pure-virtual-from-ctor-dtor",
[h]="call to pure virtual member function %0 has undefined behavior; overrides of %0 in subclasses are not available in the %select{constructor|destructor}1 of %2",
[d]="call to pure virtual member function %0 has undefined behavior; overrides of %0 in subclasses are not available in the %select{constructor|destructor}1 of %2",
[b]=t,
[e]=u,
[g]="call to pure virtual member function (.*?) has undefined behavior; overrides of (.*?) in subclasses are not available in the (?:constructor|destructor) of (.*?)",
[a]="call to pure virtual member function (.*?) has undefined behavior; overrides of (.*?) in subclasses are not available in the (?:constructor|destructor) of (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wcall\\-to\\-pure\\-virtual\\-from\\-ctor\\-dtor[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcall\\-to\\-pure\\-virtual\\-from\\-ctor\\-dtor[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"47061ee5bc64",1304691931,"Warn when trying to call a pure virtual member function in a class from the class constructor/destru..."},
[i]={"47061ee5bc64",1304691931,"Warn when trying to call a pure virtual member function in a class from the class constructor/destru..."},
[j]={{D,14920,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      Diag(MemExpr->getBeginLoc(), diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) << MD->getParent();"}}
[j]={{E,14920,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      Diag(MemExpr->getBeginLoc(), diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) << MD->getParent();"}},
[k]={
["clang/test/SemaCXX/warn-pure-virtual-kext.cpp"]={"clang/test/SemaCXX/warn-pure-virtual-kext.cpp:6:9: warning: call to pure virtual member function \'f\' has undefined behavior; overrides of \'f\' in subclasses are not available in the constructor of \'A\' [-Wcall-to-pure-virtual-from-ctor-dtor]","clang/test/SemaCXX/warn-pure-virtual-kext.cpp:13:10: warning: call to pure virtual member function \'f\' has undefined behavior; overrides of \'f\' in subclasses are not available in the constructor of \'TA<int>\' [-Wcall-to-pure-virtual-from-ctor-dtor]"}
}
},
},
["warn_call_wrong_number_of_arguments"]={
["warn_call_wrong_number_of_arguments"]={
[c]="too ... arguments in call to A",
[f]="too ... arguments in call to A",
[d]=s,
[f]=r,
[h]="too %select{few|many}0 arguments in call to %1",
[b]=t,
[b]=t,
[g]="too (?:few|many) arguments in call to (.*?)",
[c]=s,
[a]=ub,
[d]="too %select{few|many}0 arguments in call to %1",
[e]=k,
[e]=u,
[a]="too (?:few|many) arguments in call to (.*?)",
[g]=ub,
[h]=l,
[i]={"d8e97def584d",1238686630,"When calling a function without a prototype for which we have a"},
[i]={"d8e97def584d",1238686630,"When calling a function without a prototype for which we have a"},
[j]={{C,7555,"/// 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    if (FDecl) {\n      if (FDecl->hasBody(Def) && Args.size() != Def->param_size()) {\n        if (!Proto || !(Proto->isVariadic() && Args.size() >= Def->param_size()))\n          Diag(RParenLoc, diag::warn_call_wrong_number_of_arguments) << (Args.size() > Def->param_size()) << FDecl << Fn->getSourceRange();"}}
[j]={{D,7555,"/// 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    if (FDecl) {\n      if (FDecl->hasBody(Def) && Args.size() != Def->param_size()) {\n        if (!Proto || !(Proto->isVariadic() && Args.size() >= Def->param_size()))\n          Diag(RParenLoc, diag::warn_call_wrong_number_of_arguments) << (Args.size() > Def->param_size()) << FDecl << Fn->getSourceRange();"}},
[k]={
["clang/test/Sema/knr-def-call.c"]={"clang/test/Sema/knr-def-call.c:6:7: warning: too few arguments in call to \'f0\'","clang/test/Sema/knr-def-call.c:11:13: warning: too many arguments in call to \'f1\'"}
}
},
},
["warn_called_once_gets_called_twice"]={
["warn_called_once_gets_called_twice"]={
[c]="A parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]",
[f]="A parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]",
[d]=s,
[f]=r,
[p]={Fb},
[q]=Fb,
[h]="%0 parameter marked \'called_once\' is called twice",
[b]=t,
[b]=t,
[g]="(.*?) parameter marked \'called_once\' is called twice",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]",
[r]={Eb},
[e]=k,
[q]=Eb,
[i]={pb,1590001902,ob},
[d]="%0 parameter marked \'called_once\' is called twice",
[j]={{I,1690,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{I,1752,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
[e]=u,
[a]="(.*?) parameter marked \'called_once\' is called twice",
[g]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]",
[h]=l,
[i]={rb,1590001902,pb},
[j]={{J,1690,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{J,1752,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}},
[k]={
[nc]={"clang/test/SemaObjC/warn-called-once.m:54:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:59:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:64:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:69:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:78:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:87:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:95:5: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:119:5: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:128:5: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:183:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:191:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:203:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:225:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:243:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:259:5: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:281:5: warning: \'inner\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:284:3: warning: \'outer\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:309:5: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:539:7: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:793:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:799:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:865:3: warning: \'callback\' parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]"}
}
},
},
["warn_called_once_never_called"]={
["warn_called_once_never_called"]={
[c]="...A parameter marked \'called_once\' is never called [-Wcalled-once-parameter]",
[f]="...A parameter marked \'called_once\' is never called [-Wcalled-once-parameter]",
[d]=s,
[f]=r,
[p]={Fb},
[q]=Fb,
[h]="%select{|captured }1%0 parameter marked \'called_once\' is never called",
[b]=t,
[b]=t,
[g]="(?:|captured )(.*?) parameter marked \'called_once\' is never called",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]",
[r]={Eb},
[e]=k,
[q]=Eb,
[i]={pb,1590001902,ob},
[d]="%select{|captured }1%0 parameter marked \'called_once\' is never called",
[j]={{I,1700,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1730,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1750,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
[e]=u,
[a]="(?:|captured )(.*?) parameter marked \'called_once\' is never called",
[g]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]",
[h]=l,
[i]={rb,1590001902,pb},
[j]={{J,1700,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{J,1730,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{J,1750,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}},
[k]={
[nc]={"clang/test/SemaObjC/warn-called-once.m:133:27: warning: \'callback\' parameter marked \'called_once\' is never called [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:137:35: warning: \'callback\' parameter marked \'called_once\' is never called [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:273:5: warning: \'inner\' parameter marked \'called_once\' is never called [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:527:40: warning: \'callback\' parameter marked \'called_once\' is never called [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:718:49: warning: \'callback\' parameter marked \'called_once\' is never called [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:838:31: warning: \'callback\' parameter marked \'called_once\' is never called [-Wcalled-once-parameter]"}
}
},
},
["warn_called_once_never_called_when"]={
["warn_called_once_never_called_when"]={
[c]="A parameter marked \'called_once\' is never ... when ... [-Wcalled-once-parameter]",
[f]="A parameter marked \'called_once\' is never ... when ... [-Wcalled-once-parameter]",
[d]=s,
[f]=r,
[p]={Fb},
[q]=Fb,
[h]="%0 parameter marked \'called_once\' is never %select{used|called}1 when %select{taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches}2",
[b]=t,
[b]=t,
[g]="(.*?) parameter marked \'called_once\' is never (?:used|called) when (?:taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches)",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]",
[r]={Eb},
[e]=k,
[q]=Eb,
[i]={pb,1590001902,ob},
[d]="%0 parameter marked \'called_once\' is never %select{used|called}1 when %select{taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches}2",
[j]={{I,1711,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{I,1751,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
[e]=u,
[a]="(.*?) parameter marked \'called_once\' is never (?:used|called) when (?:taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches)",
[g]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]",
[h]=l,
[i]={rb,1590001902,pb},
[j]={{J,1711,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{J,1751,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}},
[k]={
[nc]={"clang/test/SemaObjC/warn-called-once.m:174:3: warning: \'callback\' parameter marked \'called_once\' is never used when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:265:5: warning: \'callback\' parameter marked \'called_once\' is never used when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:289:5: warning: \'callback\' parameter marked \'called_once\' is never called when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:314:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking true branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:321:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking true branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:328:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking true branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:338:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:345:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:352:5: warning: \'callback\' parameter marked \'called_once\' is never called when taking true branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:351:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:360:10: warning: \'callback\' parameter marked \'called_once\' is never called when taking true branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:366:3: warning: \'callback\' parameter marked \'called_once\' is never called when skipping the loop [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:374:3: warning: \'callback\' parameter marked \'called_once\' is never called when entering the loop [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:382:3: warning: \'callback\' parameter marked \'called_once\' is never called when skipping the loop [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:389:3: warning: \'callback\' parameter marked \'called_once\' is never called when entering the loop [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:403:3: warning: \'callback\' parameter marked \'called_once\' is never called when handling this case [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:419:3: warning: \'callback\' parameter marked \'called_once\' is never called when handling this case [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:428:3: warning: \'callback\' parameter marked \'called_once\' is never called when handling this case [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:426:3: warning: \'callback\' parameter marked \'called_once\' is never called when handling this case [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:437:3: warning: \'callback\' parameter marked \'called_once\' is never called when none of the cases applies [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:737:3: warning: \'callback\' parameter marked \'called_once\' is never called when taking true branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:762:3: warning: \'callback\' parameter marked \'called_once\' is never used when taking false branch [-Wcalled-once-parameter]","clang/test/SemaObjC/warn-called-once.m:871:15: warning: \'callback\' parameter marked \'called_once\' is never used when taking false branch [-Wcalled-once-parameter]"}
}
},
},
["warn_cannot_pass_non_pod_arg_to_vararg"]={
["warn_cannot_pass_non_pod_arg_to_vararg"]={
[c]="cannot pass object of ... type A through variadic ...; call will abort at runtime [-Wnon-pod-varargs]",
[f]="cannot pass object of ... type A through variadic ...; call will abort at runtime [-Wnon-pod-varargs]",
[d]=tb,
[b]=vb,
[f]=oc,
[c]=Gc,
[p]={"class-varargs","non-pod-varargs"},
[r]={"class-varargs","non-pod-varargs"},
[q]="non-pod-varargs",
[q]="non-pod-varargs",
[h]="cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime",
[d]="cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime",
[b]=lc,
[e]=Lc,
[g]="cannot pass object of (?:non\\-POD|non\\-trivial) type (.*?) through variadic (?:function|block|method|constructor); call will abort at runtime",
[a]="cannot pass object of (?:non\\-POD|non\\-trivial) type (.*?) through variadic (?:function|block|method|constructor); call will abort at runtime",
[a]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{C,1013,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_MSVCUndefined:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg) << getLangOpts().CPlusPlus11 << Ty << CT);"}}
[j]={{D,1013,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_MSVCUndefined:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg) << getLangOpts().CPlusPlus11 << Ty << CT);"}},
[k]={
["clang/test/CXX/expr/expr.post/expr.call/p7-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.call/p7-0x.cpp:27:10: error: cannot pass object of non-trivial type \'X2\' through variadic function; call will abort at runtime [-Wnon-pod-varargs]","clang/test/CXX/expr/expr.post/expr.call/p7-0x.cpp:29:10: error: cannot pass object of non-trivial type \'X4\' through variadic function; call will abort at runtime [-Wnon-pod-varargs]"}
}
},
},
["warn_cannot_resolve_lock"]={
["warn_cannot_resolve_lock"]={
[c]="cannot resolve lock expression [-Wthread-safety-analysis]",
[f]="cannot resolve lock expression [-Wthread-safety-analysis]",
[d]=s,
[f]=r,
[A]=false,
[p]={"thread-safety",ec},
[q]=ec,
[h]="cannot resolve lock expression",
[b]=t,
[b]=t,
[g]="cannot resolve lock expression",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]",
[B]=false,
[e]=k,
[r]={"thread-safety",lc},
[q]=lc,
[d]="cannot resolve lock expression",
[e]=u,
[a]="cannot resolve lock expression",
[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]",
[h]=l,
[i]={"ff2f3f810525",1315585315,"Thread safety: This patch deals with previously unhandled cases when building lock expressions. We n..."},
[i]={"ff2f3f810525",1315585315,"Thread safety: This patch deals with previously unhandled cases when building lock expressions. We n..."},
[j]={{I,1864,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleInvalidLockExp(SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_cannot_resolve_lock) << Loc);"}}
[j]={{J,1864,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleInvalidLockExp(SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_cannot_resolve_lock) << Loc);"}}
},
},
["warn_case_empty_range"]={
["warn_case_empty_range"]={
[c]="empty case range specified",
[f]="empty case range specified",
[d]=s,
[f]=r,
[h]="empty case range specified",
[b]=t,
[b]=t,
[g]="empty case range specified",
[c]=s,
[a]=ub,
[d]="empty case range specified",
[e]=k,
[e]=u,
[i]={X,1237025389,W},
[a]="empty case range specified",
[j]={{O,1420,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Detect duplicate case ranges, which usually don\'t exist at all in\n    // the first place.\n    if (!CaseRanges.empty()) {\n      for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n        // If the low value is bigger than the high value, the case is empty.\n        if (LoVal > HiVal) {\n          Diag(CR->getLHS()->getBeginLoc(), diag::warn_case_empty_range) << SourceRange(CR->getLHS()->getBeginLoc(), Hi->getEndLoc());"}}
[g]=ub,
[h]=l,
[i]={X,1237025389,Y},
[j]={{P,1420,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Detect duplicate case ranges, which usually don\'t exist at all in\n    // the first place.\n    if (!CaseRanges.empty()) {\n      for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n        // If the low value is bigger than the high value, the case is empty.\n        if (LoVal > HiVal) {\n          Diag(CR->getLHS()->getBeginLoc(), diag::warn_case_empty_range) << SourceRange(CR->getLHS()->getBeginLoc(), Hi->getEndLoc());"}},
[k]={
["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:15:8: warning: empty case range specified"}
}
},
},
["warn_case_value_overflow"]={
["warn_case_value_overflow"]={
[c]="overflow converting case value to switch condition type (A to B) [-Wswitch]",
[f]="overflow converting case value to switch condition type (A to B) [-Wswitch]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,"switch"},
[r]={U,bb,"switch"},
[q]="switch",
[q]="switch",
[h]="overflow converting case value to switch condition type (%0 to %1)",
[d]="overflow converting case value to switch condition type (%0 to %1)",
[b]=t,
[e]=u,
[g]="overflow converting case value to switch condition type \\((.*?) to (.*?)\\)",
[a]="overflow converting case value to switch condition type \\((.*?) to (.*?)\\)",
[a]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{O,1149,"/// Check the specified case value is in range for the given unpromoted switch\n/// type.\nstatic void checkCaseValue(Sema &S, SourceLocation Loc, const llvm::APSInt &Val, unsigned UnpromotedWidth, bool UnpromotedSign) {\n  // If the case value was signed and negative and the switch expression is\n  // unsigned, don\'t bother to warn: this is implementation-defined behavior.\n  // FIXME: Introduce a second, default-ignored warning for this case?\n  if (UnpromotedWidth < Val.getBitWidth()) {\n    // FIXME: Use different diagnostics for overflow  in conversion to promoted\n    // type versus \"switch expression cannot have this value\". Use proper\n    // IntRange checking rather than just looking at the unpromoted type here.\n    if (ConvVal != Val)\n      S.Diag(Loc, diag::warn_case_value_overflow) << toString(Val, 10) << toString(ConvVal, 10);"}}
[j]={{P,1149,"/// Check the specified case value is in range for the given unpromoted switch\n/// type.\nstatic void checkCaseValue(Sema &S, SourceLocation Loc, const llvm::APSInt &Val, unsigned UnpromotedWidth, bool UnpromotedSign) {\n  // If the case value was signed and negative and the switch expression is\n  // unsigned, don\'t bother to warn: this is implementation-defined behavior.\n  // FIXME: Introduce a second, default-ignored warning for this case?\n  if (UnpromotedWidth < Val.getBitWidth()) {\n    // FIXME: Use different diagnostics for overflow  in conversion to promoted\n    // type versus \"switch expression cannot have this value\". Use proper\n    // IntRange checking rather than just looking at the unpromoted type here.\n    if (ConvVal != Val)\n      S.Diag(Loc, diag::warn_case_value_overflow) << toString(Val, 10) << toString(ConvVal, 10);"}},
[k]={
["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:11:8: warning: overflow converting case value to switch condition type (5000000000 to 705032704) [-Wswitch]","clang/test/Sema/switch.c:79:10: warning: overflow converting case value to switch condition type (1234 to -46) [-Wswitch]","clang/test/Sema/switch.c:393:27: warning: overflow converting case value to switch condition type (257 to 1) [-Wswitch]","clang/test/Sema/switch.c:395:19: warning: overflow converting case value to switch condition type (4294967297 to 1) [-Wswitch]","clang/test/Sema/switch.c:396:25: warning: overflow converting case value to switch condition type (4294967297 to 1) [-Wswitch]"}
}
},
},
["warn_cast_align"]={
["warn_cast_align"]={
[c]="cast from A to B increases required alignment from C to D [-Wcast-align]",
[f]="cast from A to B increases required alignment from C to D [-Wcast-align]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"cast-align"},
[r]={"cast-align"},
[q]="cast-align",
[q]="cast-align",
[h]="cast from %0 to %1 increases required alignment from %2 to %3",
[d]="cast from %0 to %1 increases required alignment from %2 to %3",
[b]=t,
[e]=u,
[g]="cast from (.*?) to (.*?) increases required alignment from (.*?) to (.*?)",
[a]="cast from (.*?) to (.*?) increases required alignment from (.*?) to (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-align[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-align[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"2b5c1b2516ca",1281649497,"Implement -Wcast-align.  The initial design of this diagnostic diverges    "},
[i]={"2b5c1b2516ca",1281649497,"Implement -Wcast-align.  The initial design of this diagnostic diverges    "},
[j]={{F,16961,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  if (getDiagnostics().isIgnored(diag::warn_cast_align, TRange.getBegin()))"},{F,16993,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  Diag(TRange.getBegin(), diag::warn_cast_align) << Op->getType() << T << static_cast<unsigned>(SrcAlign.getQuantity()) << static_cast<unsigned>(DestAlign.getQuantity()) << TRange << Op->getSourceRange();"}}
[j]={{F,16961,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  if (getDiagnostics().isIgnored(diag::warn_cast_align, TRange.getBegin()))"},{F,16993,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  Diag(TRange.getBegin(), diag::warn_cast_align) << Op->getType() << T << static_cast<unsigned>(SrcAlign.getQuantity()) << static_cast<unsigned>(DestAlign.getQuantity()) << TRange << Op->getSourceRange();"}},
[k]={
["clang/test/Sema/warn-cast-align.c"]={"clang/test/Sema/warn-cast-align.c:6:14: warning: cast from \'char *\' to \'short *\' increases required alignment from 1 to 2 [-Wcast-align]","clang/test/Sema/warn-cast-align.c:7:14: warning: cast from \'char *\' to \'int *\' increases required alignment from 1 to 4 [-Wcast-align]","clang/test/Sema/warn-cast-align.c:35:17: warning: cast from \'char *\' to \'struct A *\' increases required alignment from 1 to 16 [-Wcast-align]","clang/test/Sema/warn-cast-align.c:76:18: warning: cast from \'int *\' to \'void **\' increases required alignment from 4 to 8 [-Wcast-align]"}
}
},
},
["warn_cast_calling_conv"]={
["warn_cast_calling_conv"]={
[c]="cast between incompatible calling conventions \'A\' and \'B\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]",
[f]="cast between incompatible calling conventions \'A\' and \'B\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"cast-calling-convention"},
[r]={"cast-calling-convention"},
[q]="cast-calling-convention",
[q]="cast-calling-convention",
[h]="cast between incompatible calling conventions \'%0\' and \'%1\'; calls through this pointer may abort at runtime",
[d]="cast between incompatible calling conventions \'%0\' and \'%1\'; calls through this pointer may abort at runtime",
[b]=t,
[e]=u,
[g]="cast between incompatible calling conventions \'(.*?)\' and \'(.*?)\'; calls through this pointer may abort at runtime",
[a]="cast between incompatible calling conventions \'(.*?)\' and \'(.*?)\'; calls through this pointer may abort at runtime",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-calling\\-convention[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-calling\\-convention[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions"},
[i]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions"},
[j]={{mb,2146,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv) << SrcCCName << DstCCName << OpRange;"},{mb,2152,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))"}}
[j]={{nb,2146,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv) << SrcCCName << DstCCName << OpRange;"},{nb,2152,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))"}},
[k]={
["clang/test/Sema/callingconv-cast.c"]={"clang/test/Sema/callingconv-cast.c:34:17: warning: cast between incompatible calling conventions \'cdecl\' and \'stdcall\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]","clang/test/Sema/callingconv-cast.c:37:25: warning: cast between incompatible calling conventions \'cdecl\' and \'stdcall\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]","clang/test/Sema/callingconv-cast.c:41:14: warning: cast between incompatible calling conventions \'cdecl\' and \'stdcall\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]","clang/test/Sema/callingconv-cast.c:47:14: warning: cast between incompatible calling conventions \'cdecl\' and \'stdcall\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]","clang/test/Sema/callingconv-cast.c:58:17: warning: cast between incompatible calling conventions \'cdecl\' and \'stdcall\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]","clang/test/Sema/callingconv-cast.c:60:17: warning: cast between incompatible calling conventions \'cdecl\' and \'stdcall\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]"}
}
},
},
["warn_cast_function_type"]={
["warn_cast_function_type"]={
[c]="cast from A to B converts to incompatible function type [-Wcast-function-type]",
[f]="cast from A to B converts to incompatible function type [-Wcast-function-type]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"cast-function-type"},
[r]={"cast-function-type"},
[q]="cast-function-type",
[q]="cast-function-type",
[h]="cast %diff{from $ to $ |}0,1converts to incompatible function type",
[d]="cast %diff{from $ to $ |}0,1converts to incompatible function type",
[b]=t,
[e]=u,
[g]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type",
[a]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={pb,1590001902,ob},
[i]={rb,1590001902,pb},
[j]={{mb,1099,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"}}
[j]={{nb,1099,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"}},
[k]={
["clang/test/SemaCXX/warn-cast-function-type.cpp"]={"clang/test/SemaCXX/warn-cast-function-type.cpp:32:7: warning: cast from \'int (*)(long)\' to \'f2 *\' (aka \'int (*)(void *)\') converts to incompatible function type [-Wcast-function-type]","clang/test/SemaCXX/warn-cast-function-type.cpp:33:7: warning: cast from \'int (*)(long)\' to \'f2 *\' (aka \'int (*)(void *)\') converts to incompatible function type [-Wcast-function-type]","clang/test/SemaCXX/warn-cast-function-type.cpp:35:7: warning: cast from \'int (*)(long)\' to \'f4 *\' (aka \'void (*)(...)\') converts to incompatible function type [-Wcast-function-type]","clang/test/SemaCXX/warn-cast-function-type.cpp:37:7: warning: cast from \'int (*)(long)\' to \'f6 *\' (aka \'int (*)(long, int)\') converts to incompatible function type [-Wcast-function-type]","clang/test/SemaCXX/warn-cast-function-type.cpp:40:11: warning: cast from \'void (S::*)(int *)\' to \'mf\' (aka \'void (S::*)(int)\') converts to incompatible function type [-Wcast-function-type]","clang/test/SemaCXX/warn-cast-function-type.cpp:42:11: warning: cast from \'int (long)\' to \'f8\' (aka \'int (&)(long, int)\') converts to incompatible function type [-Wcast-function-type]","clang/test/SemaCXX/warn-cast-function-type.cpp:46:7: warning: cast from \'int (^)(long)\' to \'f6 *\' (aka \'int (*)(long, int)\') converts to incompatible function type [-Wcast-function-type]"}
}
},
},
["warn_cast_function_type_strict"]={
["warn_cast_function_type_strict"]={
[c]="cast from A to B converts to incompatible function type [-Wcast-function-type-strict]",
[f]="cast from A to B converts to incompatible function type [-Wcast-function-type-strict]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"cast-function-type","cast-function-type-strict"},
[r]={"cast-function-type","cast-function-type-strict"},
[q]="cast-function-type-strict",
[q]="cast-function-type-strict",
[h]="cast %diff{from $ to $ |}0,1converts to incompatible function type",
[d]="cast %diff{from $ to $ |}0,1converts to incompatible function type",
[b]=t,
[e]=u,
[g]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type",
[a]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type\\-strict[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type\\-strict[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Z,1625925174,Y},
[i]={ab,1625925174,Z},
[j]={{mb,1098,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"},{mb,1130,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (DiagID == diag::warn_cast_function_type_strict)"}}
[j]={{nb,1098,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"},{nb,1130,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (DiagID == diag::warn_cast_function_type_strict)"}}
},
},
["warn_cast_nonnull_to_bool"]={
["warn_cast_nonnull_to_bool"]={
[c]="nonnull ... \'A\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]",
[f]="nonnull ... \'A\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"address","bool-conversion","bool-conversions",Bb,Eb,"pointer-bool-conversion"},
[r]={"address","bool-conversion","bool-conversions",Kb,Jb,"pointer-bool-conversion"},
[q]="pointer-bool-conversion",
[q]="pointer-bool-conversion",
[h]="nonnull %select{function call|parameter}0 \'%1\' will evaluate to \'true\' on first encounter",
[d]="nonnull %select{function call|parameter}0 \'%1\' will evaluate to \'true\' on first encounter",
[b]=t,
[e]=u,
[g]="nonnull (?:function call|parameter) \'(.*?)\' will evaluate to \'true\' on first encounter",
[a]="nonnull (?:function call|parameter) \'(.*?)\' will evaluate to \'true\' on first encounter",
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]",
[e]=Vb,
[h]=hc,
[i]={"4c8cb14c1ab0",1414090810,"patch to issue warning on comparing parameters with"},
[i]={"4c8cb14c1ab0",1414090810,"patch to issue warning on comparing parameters with"},
[j]={{F,15490,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}}
[j]={{F,15490,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}},
[k]={
["clang/test/Sema/nonnull.c"]={"clang/test/Sema/nonnull.c:139:8: warning: nonnull parameter \'pointer\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]","clang/test/Sema/nonnull.c:149:7: warning: nonnull parameter \'p\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]","clang/test/Sema/nonnull.c:168:7: warning: nonnull function call \'returns_nonnull_whee()\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]","clang/test/Sema/nonnull.c:169:8: warning: nonnull function call \'returns_nonnull_whee()\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]","clang/test/Sema/nonnull.c:171:20: warning: nonnull function call \'returns_nonnull_whee()\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]","clang/test/Sema/nonnull.c:172:16: warning: nonnull function call \'returns_nonnull_whee()\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]"}
}
},
},
["warn_cast_pointer_from_sel"]={
["warn_cast_pointer_from_sel"]={
[c]="cast of type A to B is deprecated; use sel_getName instead [-Wcast-of-sel-type]",
[f]="cast of type A to B is deprecated; use sel_getName instead [-Wcast-of-sel-type]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,"cast-of-sel-type",lb},
[r]={U,bb,"cast-of-sel-type",mb},
[q]="cast-of-sel-type",
[q]="cast-of-sel-type",
[h]="cast of type %0 to %1 is deprecated; use sel_getName instead",
[d]="cast of type %0 to %1 is deprecated; use sel_getName instead",
[b]=t,
[e]=u,
[g]="cast of type (.*?) to (.*?) is deprecated; use sel_getName instead",
[a]="cast of type (.*?) to (.*?) is deprecated; use sel_getName instead",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-of\\-sel\\-type[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-of\\-sel\\-type[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"5ad9659688e8",1345142027,"objective-C: deprecate casts of ObjC\'s SEL"},
[i]={"5ad9659688e8",1345142027,"objective-C: deprecate casts of ObjC\'s SEL"},
[j]={{mb,2097,"static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (const PointerType *SrcPtrTy = SrcType->getAs<PointerType>())\n    if (SrcPtrTy->isObjCSelType()) {\n      if (!DT.getUnqualifiedType()->isVoidType())\n        Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_cast_pointer_from_sel) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}
[j]={{nb,2097,"static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (const PointerType *SrcPtrTy = SrcType->getAs<PointerType>())\n    if (SrcPtrTy->isObjCSelType()) {\n      if (!DT.getUnqualifiedType()->isVoidType())\n        Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_cast_pointer_from_sel) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}},
[k]={
["clang/test/SemaObjC/warn-cast-of-sel-expr.m"]={"clang/test/SemaObjC/warn-cast-of-sel-expr.m:10:9: warning: cast of type \'SEL\' to \'char *\' is deprecated; use sel_getName instead [-Wcast-of-sel-type]","clang/test/SemaObjC/warn-cast-of-sel-expr.m:12:15: warning: cast of type \'SEL\' to \'const char *\' is deprecated; use sel_getName instead [-Wcast-of-sel-type]"}
}
},
},
["warn_cast_qual"]={
["warn_cast_qual"]={
[c]="cast from A to B drops ... [-Wcast-qual]",
[f]="cast from A to B drops ... [-Wcast-qual]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"cast-qual"},
[r]={"cast-qual"},
[q]="cast-qual",
[q]="cast-qual",
[h]="cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2",
[d]="cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2",
[b]=t,
[e]=u,
[g]="cast from (.*?) to (.*?) drops (?:const and volatile qualifiers|const qualifier|volatile qualifier)",
[a]="cast from (.*?) to (.*?) drops (?:const and volatile qualifiers|const qualifier|volatile qualifier)",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[j]={{mb,3328,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  // This is a variant of int **x; const int **y = (const int **)x;\n  if (qualifiers == -1)\n  else\n    Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual) << TheOffendingSrcType << TheOffendingDestType << qualifiers;"}}
[j]={{nb,3328,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  // This is a variant of int **x; const int **y = (const int **)x;\n  if (qualifiers == -1)\n  else\n    Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual) << TheOffendingSrcType << TheOffendingDestType << qualifiers;"}},
[k]={
["clang/test/SemaCXX/warn-cast-qual.cpp"]={"clang/test/SemaCXX/warn-cast-qual.cpp:19:21: warning: cast from \'const void *\' to \'void *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:21:21: warning: cast from \'const char *\' to \'char *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:30:20: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:31:26: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:32:20: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:33:28: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:34:34: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:35:26: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:36:40: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:45:20: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:46:29: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:47:20: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:48:28: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:49:37: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:50:29: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:51:46: warning: cast from \'volatile int\' to \'int &\' drops volatile qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:60:20: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:61:35: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:62:20: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:63:28: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:64:43: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:65:35: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:66:58: warning: cast from \'const volatile int\' to \'int &\' drops const and volatile qualifiers [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:73:22: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:74:31: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:79:43: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:87:22: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:88:31: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:93:43: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:106:9: warning: cast from \'const C\' to \'C &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:107:9: warning: cast from \'const C\' to \'C &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:109:9: warning: cast from \'const C *\' to \'C *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:110:9: warning: cast from \'const C *\' to \'C *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:125:12: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:128:13: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:134:12: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:135:12: warning: cast from \'const int\' to \'int &\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:137:13: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:138:13: warning: cast from \'const int *\' to \'int *\' drops const qualifier [-Wcast-qual]"}
}
},
},
["warn_cast_qual2"]={
["warn_cast_qual2"]={
[c]="cast from A to B must have all intermediate pointers const qualified to be safe [-Wcast-qual]",
[f]="cast from A to B must have all intermediate pointers const qualified to be safe [-Wcast-qual]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"cast-qual"},
[r]={"cast-qual"},
[q]="cast-qual",
[q]="cast-qual",
[h]="cast from %0 to %1 must have all intermediate pointers const qualified to be safe",
[d]="cast from %0 to %1 must have all intermediate pointers const qualified to be safe",
[b]=t,
[e]=u,
[g]="cast from (.*?) to (.*?) must have all intermediate pointers const qualified to be safe",
[a]="cast from (.*?) to (.*?) must have all intermediate pointers const qualified to be safe",
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[j]={{mb,3325,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  // This is a variant of int **x; const int **y = (const int **)x;\n  if (qualifiers == -1)\n    Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual2) << SrcType << DestType;"}}
[j]={{nb,3325,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  // This is a variant of int **x; const int **y = (const int **)x;\n  if (qualifiers == -1)\n    Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual2) << SrcType << DestType;"}},
[k]={
["clang/test/SemaCXX/warn-cast-qual.cpp"]={"clang/test/SemaCXX/warn-cast-qual.cpp:79:34: warning: cast from \'int **\' to \'const int **\' must have all intermediate pointers const qualified to be safe [-Wcast-qual]","clang/test/SemaCXX/warn-cast-qual.cpp:93:34: warning: cast from \'int *\' to \'const int *&\' must have all intermediate pointers const qualified to be safe [-Wcast-qual]"}
}
},
},
["warn_category_method_impl_match"]={
["warn_category_method_impl_match"]={
[c]="category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]",
[f]="category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-protocol-method-implementation"},
[r]={"objc-protocol-method-implementation"},
[q]="objc-protocol-method-implementation",
[q]="objc-protocol-method-implementation",
[h]="category is implementing a method which will also be implemented by its primary class",
[d]="category is implementing a method which will also be implemented by its primary class",
[b]=t,
[e]=u,
[g]="category is implementing a method which will also be implemented by its primary class",
[a]="category is implementing a method which will also be implemented by its primary class",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-method\\-implementation[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-method\\-implementation[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"9f8b19e9aea9",1311895190,"objective-c: warn if implementation of a method in category"},
[i]={"9f8b19e9aea9",1311895190,"objective-c: warn if implementation of a method in category"},
[j]={{B,2665,"/// WarnExactTypedMethods - This routine issues a warning if method\n/// implementation declaration matches exactly that of its declaration.\nvoid Sema::WarnExactTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (match) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_category_method_impl_match);"}}
[j]={{C,2665,"/// WarnExactTypedMethods - This routine issues a warning if method\n/// implementation declaration matches exactly that of its declaration.\nvoid Sema::WarnExactTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (match) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_category_method_impl_match);"}},
[k]={
["clang/test/SemaObjC/protocol-implementing-class-methods.m"]={"clang/test/SemaObjC/protocol-implementing-class-methods.m:24:1: warning: category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]","clang/test/SemaObjC/protocol-implementing-class-methods.m:27:1: warning: category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]","clang/test/SemaObjC/protocol-implementing-class-methods.m:26:1: warning: category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]"}
}
},
},
["warn_cconv_knr"]={
["warn_cconv_knr"]={
[c]="function with no prototype cannot use the A calling convention [-Wmissing-prototype-for-cc]",
[f]="function with no prototype cannot use the A calling convention [-Wmissing-prototype-for-cc]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"missing-prototype-for-cc"},
[r]={"missing-prototype-for-cc"},
[q]="missing-prototype-for-cc",
[q]="missing-prototype-for-cc",
[h]="function with no prototype cannot use the %0 calling convention",
[d]="function with no prototype cannot use the %0 calling convention",
[b]=t,
[e]=u,
[g]="function with no prototype cannot use the (.*?) calling convention",
[a]="function with no prototype cannot use the (.*?) calling convention",
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototype\\-for\\-cc[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototype\\-for\\-cc[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d191063c6c50",1411168032,"Follow-up to r214408: Warn on other callee-cleanup functions without prototype too."},
[i]={"d191063c6c50",1411168032,"Follow-up to r214408: Warn on other callee-cleanup functions without prototype too."},
[j]={{v,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;"}}
[j]={{w,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;"}},
[k]={
["clang/test/Sema/decl-microsoft-call-conv.c"]={"clang/test/Sema/decl-microsoft-call-conv.c:23:16: warning: function with no prototype cannot use the stdcall calling convention [-Wmissing-prototype-for-cc]"}
}
},
},
["warn_cconv_unsupported"]={
["warn_cconv_unsupported"]={
[c]="A calling convention is not supported ... [-Wignored-attributes]",
[f]="A calling convention is not supported ... [-Wignored-attributes]",
[d]=s,
[f]=r,
[p]={K,z},
[q]=z,
[h]="%0 calling convention is not supported %select{for this target|on variadic function|on constructor/destructor|on builtin function}1",
[b]=t,
[b]=t,
[g]="(.*?) calling convention is not supported (?:for this target|on variadic function|on constructor\\/destructor|on builtin function)",
[c]=s,
[a]=J,
[r]={K,A},
[e]=k,
[q]=A,
[d]="%0 calling convention is not supported %select{for this target|on variadic function|on constructor/destructor|on builtin function}1",
[e]=u,
[a]="(.*?) calling convention is not supported (?:for this target|on variadic function|on constructor\\/destructor|on builtin function)",
[g]=L,
[h]=l,
[i]={"85d667fcb6f3",1563396086,"Renamed and changed the wording of warn_cconv_ignored"},
[i]={"85d667fcb6f3",1563396086,"Renamed and changed the wording of warn_cconv_ignored"},
[j]={{v,3801,"/// 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      Diag(New->getLocation(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << (int)CallingConventionIgnoredReason::BuiltinFunction;"},{u,5453,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n  case TargetInfo::CCCR_Warning: {\n    Diag(Attrs.getLoc(), diag::warn_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"},{hb,7994,"/// 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      // stdcall and fastcall are ignored with a warning for GCC and MS\n      // compatibility.\n      if (CC == CC_X86StdCall || CC == CC_X86FastCall)\n        return S.Diag(attr.getLoc(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CC) << (int)Sema::CallingConventionIgnoredReason::VariadicFunction;"},{hb,8060,"void Sema::adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor, SourceLocation Loc) {\n  // MS compiler ignores explicit calling convention attributes on structors. We\n  // should do the same.\n  if (Context.getTargetInfo().getCXXABI().isMicrosoft() && IsCtorOrDtor) {\n    // Issue a warning on ignored calling convention -- except of __stdcall.\n    // Again, this is what MS compiler does.\n    if (CurCC != CC_X86StdCall)\n      Diag(Loc, diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CurCC) << (int)Sema::CallingConventionIgnoredReason::ConstructorDestructor;"}}
[j]={{w,3801,"/// 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      Diag(New->getLocation(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << (int)CallingConventionIgnoredReason::BuiltinFunction;"},{v,5453,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n  case TargetInfo::CCCR_Warning: {\n    Diag(Attrs.getLoc(), diag::warn_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"},{cb,7994,"/// 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      // stdcall and fastcall are ignored with a warning for GCC and MS\n      // compatibility.\n      if (CC == CC_X86StdCall || CC == CC_X86FastCall)\n        return S.Diag(attr.getLoc(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CC) << (int)Sema::CallingConventionIgnoredReason::VariadicFunction;"},{cb,8060,"void Sema::adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor, SourceLocation Loc) {\n  // MS compiler ignores explicit calling convention attributes on structors. We\n  // should do the same.\n  if (Context.getTargetInfo().getCXXABI().isMicrosoft() && IsCtorOrDtor) {\n    // Issue a warning on ignored calling convention -- except of __stdcall.\n    // Again, this is what MS compiler does.\n    if (CurCC != CC_X86StdCall)\n      Diag(Loc, diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CurCC) << (int)Sema::CallingConventionIgnoredReason::ConstructorDestructor;"}},
[k]={
["clang/test/Sema/stdcall-fastcall-x64.c"]={"clang/test/Sema/stdcall-fastcall-x64.c:8:21: warning: \'stdcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:8:30: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:9:21: warning: \'stdcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:10:21: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:13:51: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:14:51: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:14:61: warning: \'stdcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:15:51: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:16:51: warning: \'stdcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:17:51: warning: \'stdcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:17:60: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:18:58: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:19:58: warning: \'stdcall\' calling convention is not supported for this target [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:20:63: warning: \'fastcall\' calling convention is not supported for this target [-Wignored-attributes]"}
}
},
},
["warn_cdtor_function_try_handler_mem_expr"]={
["warn_cdtor_function_try_handler_mem_expr"]={
[c]="cannot refer to a non-static member from the handler of a ... function try block [-Wexceptions]",
[f]="cannot refer to a non-static member from the handler of a ... function try block [-Wexceptions]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"exceptions"},
[r]={"exceptions"},
[q]="exceptions",
[q]="exceptions",
[h]="cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block",
[d]="cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block",
[b]=t,
[e]=u,
[g]="cannot refer to a non\\-static member from the handler of a (?:constructor|destructor) function try block",
[a]="cannot refer to a non\\-static member from the handler of a (?:constructor|destructor) function try block",
[a]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"6924dcdf6f73",1441118964,"Add a new frontend warning for referencing members from the handler of a constructor or destructor f..."},
[i]={"6924dcdf6f73",1441118964,"Add a new frontend warning for referencing members from the handler of a constructor or destructor f..."},
[j]={{"clang/lib/Sema/SemaExprMember.cpp",995,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  if (S && BaseExpr && FD && (isa<CXXDestructorDecl>(FD) || isa<CXXConstructorDecl>(FD)) && isa<CXXThisExpr>(BaseExpr->IgnoreImpCasts()) && IsInFnTryBlockHandler(S))\n    Diag(MemberLoc, diag::warn_cdtor_function_try_handler_mem_expr) << isa<CXXDestructorDecl>(FD);"}}
[j]={{"clang/lib/Sema/SemaExprMember.cpp",995,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  if (S && BaseExpr && FD && (isa<CXXDestructorDecl>(FD) || isa<CXXConstructorDecl>(FD)) && isa<CXXThisExpr>(BaseExpr->IgnoreImpCasts()) && IsInFnTryBlockHandler(S))\n    Diag(MemberLoc, diag::warn_cdtor_function_try_handler_mem_expr) << isa<CXXDestructorDecl>(FD);"}},
[k]={
["clang/test/SemaCXX/cdtor-fn-try-block.cpp"]={"clang/test/SemaCXX/cdtor-fn-try-block.cpp:10:5: warning: cannot refer to a non-static member from the handler of a constructor function try block [-Wexceptions]","clang/test/SemaCXX/cdtor-fn-try-block.cpp:11:5: warning: cannot refer to a non-static member from the handler of a constructor function try block [-Wexceptions]","clang/test/SemaCXX/cdtor-fn-try-block.cpp:27:5: warning: cannot refer to a non-static member from the handler of a constructor function try block [-Wexceptions]","clang/test/SemaCXX/cdtor-fn-try-block.cpp:28:5: warning: cannot refer to a non-static member from the handler of a constructor function try block [-Wexceptions]","clang/test/SemaCXX/cdtor-fn-try-block.cpp:52:5: warning: cannot refer to a non-static member from the handler of a destructor function try block [-Wexceptions]","clang/test/SemaCXX/cdtor-fn-try-block.cpp:53:5: warning: cannot refer to a non-static member from the handler of a destructor function try block [-Wexceptions]"}
}
},
},
["warn_cfstring_truncated"]={
["warn_cfstring_truncated"]={
[c]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 [-WCFString-literal]",
[f]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 [-WCFString-literal]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"CFString-literal"},
[r]={"CFString-literal"},
[q]="CFString-literal",
[q]="CFString-literal",
[h]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8",
[d]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8",
[b]=t,
[e]=u,
[g]="input conversion stopped due to an input byte that does not belong to the input codeset UTF\\-8",
[a]="input conversion stopped due to an input byte that does not belong to the input codeset UTF\\-8",
[a]=" \\[(?:\\-Werror,)?\\-WCFString\\-literal[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-WCFString\\-literal[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"56603ef7b279",1283888293,"Have Sema check for validity of CGString literal"},
[i]={"56603ef7b279",1283888293,"Have Sema check for validity of CGString literal"},
[j]={{F,7995,"/// 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->containsNonAsciiOrNull()) {\n    // Check for conversion failure.\n    if (Result != llvm::conversionOK)\n      Diag(Arg->getBeginLoc(), diag::warn_cfstring_truncated) << Arg->getSourceRange();"}}
[j]={{F,7995,"/// 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->containsNonAsciiOrNull()) {\n    // Check for conversion failure.\n    if (Result != llvm::conversionOK)\n      Diag(Arg->getBeginLoc(), diag::warn_cfstring_truncated) << Arg->getSourceRange();"}},
[k]={
["clang/test/CodeGenObjC/illegal-UTF8.m"]={"clang/test/CodeGenObjC/illegal-UTF8.m:6:16: warning: input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 [-WCFString-literal]"}
}
},
},
["warn_char_constant_too_large"]={
["warn_char_constant_too_large"]={
[c]="character constant too long for its type",
[f]="character constant too long for its type",
[d]=s,
[f]=r,
[h]="character constant too long for its type",
[b]=t,
[b]=t,
[g]="character constant too long for its type",
[c]=s,
[a]=ub,
[d]="character constant too long for its type",
[e]=G,
[e]=u,
[i]={L,1236199783,M},
[a]="character constant too long for its type",
[j]={{zc,1827,"/// \\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  if (!HadError && multi_char_too_long) {\n    PP.Diag(Loc, diag::warn_char_constant_too_large);"}}
[g]=ub,
[h]=H,
[i]={N,1236199783,M},
[j]={{Oc,1827,"/// \\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  if (!HadError && multi_char_too_long) {\n    PP.Diag(Loc, diag::warn_char_constant_too_large);"}},
[k]={
["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:32:5: warning: character constant too long for its type"}
}
},
},
["warn_class_method_not_found"]={
["warn_class_method_not_found"]={
[c]="class method A not found (return type defaults to \'id\') [-Wobjc-method-access]",
[f]="class method A not found (return type defaults to \'id\') [-Wobjc-method-access]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-method-access"},
[r]={"objc-method-access"},
[q]="objc-method-access",
[q]="objc-method-access",
[h]="class method %objcclass0 not found (return type defaults to \'id\')",
[d]="class method %objcclass0 not found (return type defaults to \'id\')",
[b]=t,
[e]=u,
[g]="class method (.*?) not found \\(return type defaults to \'id\'\\)",
[a]="class method (.*?) not found \\(return type defaults to \'id\'\\)",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{nb,1745,"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    else\n      DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}}
[j]={{sb,1745,"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    else\n      DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}},
[k]={
["clang/test/SemaObjC/method-lookup.m"]={"clang/test/SemaObjC/method-lookup.m:25:54: warning: class method \'+completionItems\' not found (return type defaults to \'id\') [-Wobjc-method-access]"}
}
},
},
["warn_class_method_not_found_with_typo"]={
["warn_class_method_not_found_with_typo"]={
[c]="class method A not found (return type defaults to \'id\'); did you mean B? [-Wobjc-method-access]",
[f]="class method A not found (return type defaults to \'id\'); did you mean B? [-Wobjc-method-access]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-method-access"},
[r]={"objc-method-access"},
[q]="objc-method-access",
[q]="objc-method-access",
[h]="class method %objcclass0 not found (return type defaults to \'id\'); did you mean %objcclass2?",
[d]="class method %objcclass0 not found (return type defaults to \'id\'); did you mean %objcclass2?",
[b]=t,
[e]=u,
[g]="class method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?",
[a]="class method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors"},
[i]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors"},
[j]={{nb,1753,"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().DebuggerSupport) {\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n        else\n          DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}}
[j]={{sb,1753,"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().DebuggerSupport) {\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n        else\n          DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}},
[k]={
["clang/test/SemaObjC/call-super-2.m"]={"clang/test/SemaObjC/call-super-2.m:38:26: warning: class method \'+class_func0\' not found (return type defaults to \'id\'); did you mean \'+class_func5\'? [-Wobjc-method-access]"}
}
},
},
["warn_clause_expected_string"]={
["warn_clause_expected_string"]={
[c]="expected string literal in \'clause A\' - ignoring [-Wignored-pragmas]",
[f]="expected string literal in \'clause A\' - ignoring [-Wignored-pragmas]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"ignored-pragmas","pragmas"},
[r]={"ignored-pragmas","pragmas"},
[q]="ignored-pragmas",
[q]="ignored-pragmas",
[h]="expected string literal in \'clause %0\' - ignoring",
[d]="expected string literal in \'clause %0\' - ignoring",
[b]=t,
[e]=u,
[g]="expected string literal in \'clause (.*?)\' \\- ignoring",
[a]="expected string literal in \'clause (.*?)\' \\- ignoring",
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]",
[e]=Q,
[h]=Q,
[i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause."},
[i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause."},
[j]={{w,16939,"OMPClause *Sema::ActOnOpenMPMessageClause(Expr *ME, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!isa<StringLiteral>(ME)) {\n    Diag(ME->getBeginLoc(), diag::warn_clause_expected_string) << getOpenMPClauseName(OMPC_message);"}}
[j]={{x,16939,"OMPClause *Sema::ActOnOpenMPMessageClause(Expr *ME, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!isa<StringLiteral>(ME)) {\n    Diag(ME->getBeginLoc(), diag::warn_clause_expected_string) << getOpenMPClauseName(OMPC_message);"}},
[k]={
["clang/test/OpenMP/error_message.cpp"]={"clang/test/OpenMP/error_message.cpp:114:27: warning: expected string literal in \'clause message\' - ignoring [-Wignored-pragmas]"}
}
},
},
["warn_cleanup_ext"]={
["warn_cleanup_ext"]={
[c]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier [-Wgcc-compat]",
[f]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier [-Wgcc-compat]",
[d]=s,
[f]=r,
[p]={cc},
[q]=cc,
[h]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier",
[b]=t,
[b]=t,
[g]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[r]={uc},
[e]=k,
[q]=uc,
[d]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier",
[e]=u,
[a]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier",
[g]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[h]=l,
[i]={"c12aaff2cbe5",1378863461,"The cleanup attribute no longer uses an unresolved, simple identifier as its argument.  Instead, it ..."},
[i]={"c12aaff2cbe5",1378863461,"The cleanup attribute no longer uses an unresolved, simple identifier as its argument.  Instead, it ..."},
[j]={{u,3706,"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 (DRE->hasQualifier())\n      S.Diag(Loc, diag::warn_cleanup_ext);"},{u,3716,"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 (ULE->hasExplicitTemplateArgs())\n      S.Diag(Loc, diag::warn_cleanup_ext);"}}
[j]={{v,3706,"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 (DRE->hasQualifier())\n      S.Diag(Loc, diag::warn_cleanup_ext);"},{v,3716,"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 (ULE->hasExplicitTemplateArgs())\n      S.Diag(Loc, diag::warn_cleanup_ext);"}},
[k]={
["clang/test/CodeGenCXX/attr-cleanup.cpp"]={"clang/test/CodeGenCXX/attr-cleanup.cpp:9:35: warning: GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier [-Wgcc-compat]"}
}
},
},
["warn_cmse_nonsecure_union"]={
["warn_cmse_nonsecure_union"]={
[c]="passing union across security boundary via ... may leak information [-Wcmse-union-leak]",
[f]="passing union across security boundary via ... may leak information [-Wcmse-union-leak]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"cmse-union-leak"},
[r]={"cmse-union-leak"},
[q]="cmse-union-leak",
[q]="cmse-union-leak",
[h]="passing union across security boundary via %select{parameter %1|return value}0 may leak information",
[d]="passing union across security boundary via %select{parameter %1|return value}0 may leak information",
[b]=t,
[e]=u,
[g]="passing union across security boundary via (?:parameter (.*?)|return value) may leak information",
[a]="passing union across security boundary via (?:parameter (.*?)|return value) may leak information",
[a]=" \\[(?:\\-Werror,)?\\-Wcmse\\-union\\-leak[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcmse\\-union\\-leak[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,7655,"/// 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  // Warn for unions passing across security boundary (CMSE).\n  if (FuncT != nullptr && FuncT->getCmseNSCallAttr()) {\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      if (const auto *RT = dyn_cast<RecordType>(Args[i]->getType().getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(Args[i]->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 0 << i;"},{O,3970,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    if (FD->hasAttr<CmseNSEntryAttr>() && RetValExp) {\n      if (const auto *RT = dyn_cast<RecordType>(FnRetType.getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(RetValExp->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 1;"}}
[j]={{D,7655,"/// 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  // Warn for unions passing across security boundary (CMSE).\n  if (FuncT != nullptr && FuncT->getCmseNSCallAttr()) {\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      if (const auto *RT = dyn_cast<RecordType>(Args[i]->getType().getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(Args[i]->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 0 << i;"},{P,3970,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    if (FD->hasAttr<CmseNSEntryAttr>() && RetValExp) {\n      if (const auto *RT = dyn_cast<RecordType>(FnRetType.getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(RetValExp->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 1;"}},
[k]={
["clang/test/Sema/arm-cmse.c"]={"clang/test/Sema/arm-cmse.c:35:10: warning: passing union across security boundary via return value may leak information [-Wcmse-union-leak]","clang/test/Sema/arm-cmse.c:51:7: warning: passing union across security boundary via parameter 1 may leak information [-Wcmse-union-leak]","clang/test/Sema/arm-cmse.c:54:8: warning: passing union across security boundary via parameter 0 may leak information [-Wcmse-union-leak]","clang/test/Sema/arm-cmse.c:56:8: warning: passing union across security boundary via parameter 2 may leak information [-Wcmse-union-leak]"}
}
},
},
["warn_cocoa_naming_owned_rule"]={
["warn_cocoa_naming_owned_rule"]={
[c]="property follows Cocoa naming convention for returning \'owned\' objects [-Wobjc-property-matches-cocoa-ownership-rule]",
[f]="property follows Cocoa naming convention for returning \'owned\' objects [-Wobjc-property-matches-cocoa-ownership-rule]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-property-matches-cocoa-ownership-rule"},
[r]={"objc-property-matches-cocoa-ownership-rule"},
[q]="objc-property-matches-cocoa-ownership-rule",
[q]="objc-property-matches-cocoa-ownership-rule",
[h]="property follows Cocoa naming convention for returning \'owned\' objects",
[d]="property follows Cocoa naming convention for returning \'owned\' objects",
[b]=t,
[e]=u,
[g]="property follows Cocoa naming convention for returning \'owned\' objects",
[a]="property follows Cocoa naming convention for returning \'owned\' objects",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-matches\\-cocoa\\-ownership\\-rule[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-matches\\-cocoa\\-ownership\\-rule[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "},
[i]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "},
[j]={{E,2277,"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        else\n          Diag(PD->getLocation(), diag::warn_cocoa_naming_owned_rule);"}}
[j]={{G,2277,"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        else\n          Diag(PD->getLocation(), diag::warn_cocoa_naming_owned_rule);"}}
},
},
["warn_collection_expr_type"]={
["warn_collection_expr_type"]={
[c]="collection expression type A may not respond to B",
[f]="collection expression type A may not respond to B",
[d]=s,
[f]=r,
[h]="collection expression type %0 may not respond to %1",
[b]=t,
[b]=t,
[g]="collection expression type (.*?) may not respond to (.*?)",
[c]=s,
[a]=ub,
[d]="collection expression type %0 may not respond to %1",
[e]=k,
[e]=u,
[a]="collection expression type (.*?) may not respond to (.*?)",
[g]=ub,
[h]=l,
[i]={"68e69ca9f9e0",1281651942,"Patch to issue warning when colllection expresion\'s type"},
[i]={"68e69ca9f9e0",1281651942,"Patch to issue warning when colllection expresion\'s type"},
[j]={{O,2271,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // If we have a forward-declared type, we can\'t do this check.\n  // Under ARC, it is an error not to have a forward-declared class.\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {\n  } else if (iface || !objectType->qual_empty()) {\n    // If we didn\'t find it anywhere, give up.\n    if (!method) {\n      Diag(forLoc, diag::warn_collection_expr_type) << collection->getType() << selector << collection->getSourceRange();"}}
[j]={{P,2271,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // If we have a forward-declared type, we can\'t do this check.\n  // Under ARC, it is an error not to have a forward-declared class.\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {\n  } else if (iface || !objectType->qual_empty()) {\n    // If we didn\'t find it anywhere, give up.\n    if (!method) {\n      Diag(forLoc, diag::warn_collection_expr_type) << collection->getType() << selector << collection->getSourceRange();"}},
[k]={
["clang/test/AST/foreachtemplatized.mm"]={"clang/test/AST/foreachtemplatized.mm:10:3: warning: collection expression type \'I *\' may not respond to \'countByEnumeratingWithState:objects:count:\'","clang/test/AST/foreachtemplatized.mm:10:3: warning: collection expression type \'I *\' may not respond to \'countByEnumeratingWithState:objects:count:\'"}
}
},
},
["warn_comma_operator"]={
["warn_comma_operator"]={
[c]="possible misuse of comma operator here [-Wcomma]",
[f]="possible misuse of comma operator here [-Wcomma]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"comma"},
[r]={"comma"},
[q]="comma",
[q]="comma",
[h]="possible misuse of comma operator here",
[d]="possible misuse of comma operator here",
[b]=t,
[e]=u,
[g]="possible misuse of comma operator here",
[a]="possible misuse of comma operator here",
[a]=" \\[(?:\\-Werror,)?\\-Wcomma[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcomma[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[j]={{C,14632,"// Look for instances where it is likely the comma operator is confused with\n// another operator.  There is an explicit list of acceptable expressions for\n// the left hand side of the comma operator, otherwise emit a warning.\nvoid Sema::DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc) {\n  Diag(Loc, diag::warn_comma_operator);"},{C,14698,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!S.getDiagnostics().isIgnored(diag::warn_comma_operator, Loc))"},{O,898,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (CondExpr && (getLangOpts().C99 || getLangOpts().CPlusPlus) && !Diags.isIgnored(diag::warn_comma_operator, CondExpr->getExprLoc()))"},{O,1697,"StmtResult Sema::ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc, ConditionResult Cond, SourceLocation RParenLoc, Stmt *Body) {\n  if (CondVal.second && !Diags.isIgnored(diag::warn_comma_operator, CondVal.second->getExprLoc()))"},{O,1726,"StmtResult Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, SourceLocation WhileLoc, SourceLocation CondLParen, Expr *Cond, SourceLocation CondRParen) {\n  if (Cond && !getLangOpts().C99 && !getLangOpts().CPlusPlus && !Diags.isIgnored(diag::warn_comma_operator, Cond->getExprLoc()))"},{O,2177,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  if (Second.get().second && !Diags.isIgnored(diag::warn_comma_operator, Second.get().second->getExprLoc()))"}}
[j]={{D,14632,"// Look for instances where it is likely the comma operator is confused with\n// another operator.  There is an explicit list of acceptable expressions for\n// the left hand side of the comma operator, otherwise emit a warning.\nvoid Sema::DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc) {\n  Diag(Loc, diag::warn_comma_operator);"},{D,14698,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!S.getDiagnostics().isIgnored(diag::warn_comma_operator, Loc))"},{P,898,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (CondExpr && (getLangOpts().C99 || getLangOpts().CPlusPlus) && !Diags.isIgnored(diag::warn_comma_operator, CondExpr->getExprLoc()))"},{P,1697,"StmtResult Sema::ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc, ConditionResult Cond, SourceLocation RParenLoc, Stmt *Body) {\n  if (CondVal.second && !Diags.isIgnored(diag::warn_comma_operator, CondVal.second->getExprLoc()))"},{P,1726,"StmtResult Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, SourceLocation WhileLoc, SourceLocation CondLParen, Expr *Cond, SourceLocation CondRParen) {\n  if (Cond && !getLangOpts().C99 && !getLangOpts().CPlusPlus && !Diags.isIgnored(diag::warn_comma_operator, Cond->getExprLoc()))"},{P,2177,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  if (Second.get().second && !Diags.isIgnored(diag::warn_comma_operator, Second.get().second->getExprLoc()))"}},
[k]={
["clang/test/SemaCXX/warn-comma-operator.cpp"]={"clang/test/SemaCXX/warn-comma-operator.cpp:46:20: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:57:23: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:69:28: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:75:30: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:84:6: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:93:21: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:99:25: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:105:23: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:111:23: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:117:20: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:123:30: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:132:16: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:132:31: warning: possible misuse of comma operator here [-Wcomma]","clang/test/SemaCXX/warn-comma-operator.cpp:132:46: warning: possible misuse of comma operator here [-Wcomma]"}
}
},
},
["warn_comparison_always"]={
["warn_comparison_always"]={
[c]="...comparison always evaluates to ... [-Wtautological-compare]",
[f]="...comparison always evaluates to ... [-Wtautological-compare]",
[d]=s,
[f]=r,
[p]={T,ab,lb,Sb},
[q]=Sb,
[h]="%select{self-|array }0comparison always evaluates to %select{a constant|true|false|\'std::strong_ordering::equal\'}1",
[b]=t,
[b]=t,
[g]="(?:self\\-|array )comparison always evaluates to (?:a constant|true|false|\'std\\:\\:strong_ordering\\:\\:equal\')",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]",
[r]={U,bb,mb,fc},
[e]=k,
[q]=fc,
[d]="%select{self-|array }0comparison always evaluates to %select{a constant|true|false|\'std::strong_ordering::equal\'}1",
[e]=u,
[a]="(?:self\\-|array )comparison always evaluates to (?:a constant|true|false|\'std\\:\\:strong_ordering\\:\\:equal\')",
[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]",
[h]=l,
[i]={"ec170db73d50",1276026634,"Warn about comparisons between arrays and improve self-comparison"},
[i]={"ec170db73d50",1276026634,"Warn about comparisons between arrays and improve self-comparison"},
[j]={{C,12673,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 0 /*self-comparison*/"},{C,12703,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n    } else if (checkForArray(LHSStripped) && checkForArray(RHSStripped)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 1 /*array comparison*/"}}
[j]={{D,12673,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 0 /*self-comparison*/"},{D,12703,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n    } else if (checkForArray(LHSStripped) && checkForArray(RHSStripped)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 1 /*array comparison*/"}},
[k]={
["clang/test/SemaObjC/self-comparison.m"]={"clang/test/SemaObjC/self-comparison.m:10:14: warning: self-comparison always evaluates to true [-Wtautological-compare]"}
}
},
},
["warn_comparison_bitwise_always"]={
["warn_comparison_bitwise_always"]={
[c]="bitwise comparison always evaluates to ... [-Wtautological-bitwise-compare]",
[f]="bitwise comparison always evaluates to ... [-Wtautological-bitwise-compare]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={T,ab,lb,"tautological-bitwise-compare",Sb},
[r]={U,bb,mb,"tautological-bitwise-compare",fc},
[q]="tautological-bitwise-compare",
[q]="tautological-bitwise-compare",
[h]="bitwise comparison always evaluates to %select{false|true}0",
[d]="bitwise comparison always evaluates to %select{false|true}0",
[b]=t,
[e]=u,
[g]="bitwise comparison always evaluates to (?:false|true)",
[a]="bitwise comparison always evaluates to (?:false|true)",
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"7afd71e4ff5d",1400607071,"Add a check for tautological bitwise comparisons to -Wtautological-compare."},
[i]={"7afd71e4ff5d",1400607071,"Add a check for tautological bitwise comparisons to -Wtautological-compare."},
[j]={{I,177,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseEquality(const BinaryOperator *B, bool isAlwaysTrue) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_always) << DiagRange << isAlwaysTrue;"}}
[j]={{J,177,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseEquality(const BinaryOperator *B, bool isAlwaysTrue) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_always) << DiagRange << isAlwaysTrue;"}},
[k]={
["clang/test/Sema/warn-bitwise-compare.c"]={"clang/test/Sema/warn-bitwise-compare.c:95:9: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:53:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:52:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:50:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:49:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:47:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:46:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:45:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:43:17: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:42:16: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:41:17: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:40:20: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:38:19: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:37:18: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:35:20: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:34:18: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:32:20: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:31:18: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:29:16: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:28:16: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:27:16: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:25:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:24:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:23:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:21:16: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:20:16: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:19:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:18:15: warning: bitwise comparison always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:16:16: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:15:16: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:14:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:13:15: warning: bitwise comparison always evaluates to false [-Wtautological-bitwise-compare]"}
}
},
},
["warn_comparison_bitwise_or"]={
["warn_comparison_bitwise_or"]={
[c]="bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]",
[f]="bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={T,ab,lb,"tautological-bitwise-compare",Sb},
[r]={U,bb,mb,"tautological-bitwise-compare",fc},
[q]="tautological-bitwise-compare",
[q]="tautological-bitwise-compare",
[h]="bitwise or with non-zero value always evaluates to true",
[d]="bitwise or with non-zero value always evaluates to true",
[b]=t,
[e]=u,
[g]="bitwise or with non\\-zero value always evaluates to true",
[a]="bitwise or with non\\-zero value always evaluates to true",
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{I,186,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseOr(const BinaryOperator *B) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_or) << DiagRange;"},{I,192,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}}
[j]={{J,186,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseOr(const BinaryOperator *B) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_or) << DiagRange;"},{J,192,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}},
[k]={
["clang/test/Sema/warn-bitwise-compare.c"]={"clang/test/Sema/warn-bitwise-compare.c:104:9: warning: bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:103:9: warning: bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:101:12: warning: bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:100:9: warning: bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]","clang/test/Sema/warn-bitwise-compare.c:99:9: warning: bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]"}
}
},
},
["warn_comparison_mixed_enum_types"]={
["warn_comparison_mixed_enum_types"]={
[c]="... different enumeration types (A and B) [-Wenum-compare]",
[f]="... different enumeration types (A and B) [-Wenum-compare]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"enum-compare"},
[r]={"enum-compare"},
[q]="enum-compare",
[q]="enum-compare",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={kc,1575504770,mc},
[i]={zc,1575504770,Ac},
[j]={{C,1529,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}}
[j]={{D,1529,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}},
[k]={
["clang/test/CodeGenObjC/objc-fixed-enum.m"]={"clang/test/CodeGenObjC/objc-fixed-enum.m:47:13: warning: comparison of different enumeration types (\'Enum0\' and \'Enum1\' (aka \'enum Enum1\')) [-Wenum-compare]","clang/test/CodeGenObjC/objc-fixed-enum.m:47:25: warning: comparison of different enumeration types (\'Enum1\' (aka \'enum Enum1\') and \'Enum2\') [-Wenum-compare]"}
}
},
},
["warn_comparison_mixed_enum_types_cxx20"]={
["warn_comparison_mixed_enum_types_cxx20"]={
[c]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare]",
[f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={Ab,"deprecated-enum-compare","enum-compare"},
[r]={Cb,"deprecated-enum-compare","enum-compare"},
[q]="deprecated-enum-compare",
[q]="deprecated-enum-compare",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare[^\\]]*\\]",
[e]=Ib,
[h]=Wb,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,1528,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}}
[j]={{D,1528,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}},
[k]={
[Uc]={"clang/test/CXX/expr/expr.arith.conv/p2.cpp:29:11: warning: comparison of different enumeration types (\'enum E1\' and \'enum E2\') is deprecated [-Wdeprecated-enum-compare]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:34:11: warning: comparison of different enumeration types (\'enum E1\' and \'enum E2\') is deprecated [-Wdeprecated-enum-compare]","clang/test/CXX/expr/expr.arith.conv/p2.cpp:39:10: warning: conditional expression between different enumeration types (\'enum E1\' and \'enum E2\') is deprecated [-Wdeprecated-enum-compare-conditional]"}
}
},
},
["warn_comparison_of_mixed_enum_types_switch"]={
["warn_comparison_of_mixed_enum_types_switch"]={
[c]="comparison of different enumeration types in switch statement (A and B) [-Wenum-compare-switch]",
[f]="comparison of different enumeration types in switch statement (A and B) [-Wenum-compare-switch]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"enum-compare","enum-compare-switch"},
[r]={"enum-compare","enum-compare-switch"},
[q]="enum-compare-switch",
[q]="enum-compare-switch",
[h]="comparison of different enumeration types in switch statement%diff{ ($ and $)|}0,1",
[d]="comparison of different enumeration types in switch statement%diff{ ($ and $)|}0,1",
[b]=t,
[e]=u,
[g]="comparison of different enumeration types in switch statement(?: \\((.*?) and (.*?)\\)|)",
[a]="comparison of different enumeration types in switch statement(?: \\((.*?) and (.*?)\\)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-switch[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-switch[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"0284a20fbafa",1502312203,"[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare"},
[i]={"0284a20fbafa",1502312203,"[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare"},
[j]={{O,1211,"static void checkEnumTypesInSwitchStmt(Sema &S, const Expr *Cond, const Expr *Case) {\n  S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types_switch) << CondType << CaseType << Cond->getSourceRange() << Case->getSourceRange();"}}
[j]={{P,1211,"static void checkEnumTypesInSwitchStmt(Sema &S, const Expr *Cond, const Expr *Case) {\n  S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types_switch) << CondType << CaseType << Cond->getSourceRange() << Case->getSourceRange();"}},
[k]={
["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:385:8: warning: comparison of different enumeration types in switch statement (\'enum ExtendedEnum1\' and \'enum ExtendedEnum1_unrelated\') [-Wenum-compare-switch]"}
}
},
},
["warn_completion_handler_called_twice"]={
["warn_completion_handler_called_twice"]={
[c]="completion handler is called twice [-Wcompletion-handler]",
[f]="completion handler is called twice [-Wcompletion-handler]",
[d]=s,
[f]=r,
[A]=false,
[p]={Fb,Wb},
[q]=Wb,
[h]="completion handler is called twice",
[b]=t,
[b]=t,
[g]="completion handler is called twice",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]",
[B]=false,
[e]=k,
[r]={Eb,sc},
[i]={pb,1590001902,ob},
[q]=sc,
[j]={{I,1689,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{I,1757,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
[d]="completion handler is called twice",
[e]=u,
[a]="completion handler is called twice",
[g]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]",
[h]=l,
[i]={rb,1590001902,pb},
[j]={{J,1689,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{J,1757,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}},
[k]={
[nc]={"clang/test/SemaObjC/warn-called-once.m:806:3: warning: completion handler is called twice [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:813:3: warning: completion handler is called twice [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:820:3: warning: completion handler is called twice [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:827:3: warning: completion handler is called twice [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:834:3: warning: completion handler is called twice [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1123:5: warning: completion handler is called twice [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1236:3: warning: completion handler is called twice [-Wcompletion-handler]"}
}
},
},
["warn_completion_handler_never_called"]={
["warn_completion_handler_never_called"]={
[c]="...completion handler is never called [-Wcompletion-handler]",
[f]="...completion handler is never called [-Wcompletion-handler]",
[d]=s,
[f]=r,
[A]=false,
[p]={Fb,Wb},
[q]=Wb,
[h]="%select{|captured }1completion handler is never called",
[b]=t,
[b]=t,
[g]="(?:|captured )completion handler is never called",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]",
[B]=false,
[e]=k,
[r]={Eb,sc},
[i]={pb,1590001902,ob},
[q]=sc,
[j]={{I,1699,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1729,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1755,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
[d]="%select{|captured }1completion handler is never called",
[e]=u,
[a]="(?:|captured )completion handler is never called",
[g]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]",
[h]=l,
[i]={rb,1590001902,pb},
[j]={{J,1699,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{J,1729,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{J,1755,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}},
[k]={
[nc]={"clang/test/SemaObjC/warn-called-once.m:672:26: warning: completion handler is never called [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:676:26: warning: completion handler is never called [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:680:39: warning: completion handler is never called [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:899:28: warning: completion handler is never called [-Wcompletion-handler]"}
}
},
},
["warn_completion_handler_never_called_when"]={
["warn_completion_handler_never_called_when"]={
[c]="completion handler is never ... when ... [-Wcompletion-handler]",
[f]="completion handler is never ... when ... [-Wcompletion-handler]",
[d]=s,
[f]=r,
[A]=false,
[p]={Fb,Wb},
[q]=Wb,
[h]="completion handler is never %select{used|called}1 when %select{taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches}2",
[b]=t,
[b]=t,
[g]="completion handler is never (?:used|called) when (?:taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches)",
[c]=s,
[a]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]",
[B]=false,
[e]=k,
[r]={Eb,sc},
[i]={pb,1590001902,ob},
[q]=sc,
[j]={{I,1710,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{I,1756,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
[d]="completion handler is never %select{used|called}1 when %select{taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches}2",
[e]=u,
[a]="completion handler is never (?:used|called) when (?:taking true branch|taking false branch|handling this case|none of the cases applies|entering the loop|skipping the loop|taking one of the branches)",
[g]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]",
[h]=l,
[i]={rb,1590001902,pb},
[j]={{J,1710,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{J,1756,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}},
[k]={
[nc]={"clang/test/SemaObjC/warn-called-once.m:726:3: warning: completion handler is never called when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:882:15: warning: completion handler is never used when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:892:15: warning: completion handler is never used when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:910:3: warning: completion handler is never called when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:939:3: warning: completion handler is never used when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:949:3: warning: completion handler is never called when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:958:3: warning: completion handler is never used when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:967:3: warning: completion handler is never called when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:983:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:976:3: warning: completion handler is never called when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1044:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1053:3: warning: completion handler is never called when taking true branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1062:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1069:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1076:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1083:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]","clang/test/SemaObjC/warn-called-once.m:1108:3: warning: completion handler is never called when taking false branch [-Wcompletion-handler]"}
}
},
},
["warn_compound_token_split_by_macro"]={
["warn_compound_token_split_by_macro"]={
[c]="...A tokens ... appear in different macro expansion contexts [-Wcompound-token-split-by-macro]",
[f]="...A tokens ... appear in different macro expansion contexts [-Wcompound-token-split-by-macro]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"compound-token-split","compound-token-split-by-macro"},
[r]={"compound-token-split","compound-token-split-by-macro"},
[q]="compound-token-split-by-macro",
[q]="compound-token-split-by-macro",
[h]="%select{%1 and |}0%2 tokens %select{introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type}3 appear in different macro expansion contexts",
[d]="%select{%1 and |}0%2 tokens %select{introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type}3 appear in different macro expansion contexts",
[b]=t,
[e]=u,
[g]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) appear in different macro expansion contexts",
[a]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) appear in different macro expansion contexts",
[a]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-macro[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-macro[^\\]]*\\]",
[e]=Q,
[h]=Q,
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[j]={{"clang/lib/Parse/Parser.cpp",243,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // If either token is in a macro, we expect both tokens to come from the same\n  // macro expansion.\n  if ((FirstTokLoc.isMacroID() || SecondTokLoc.isMacroID()) && PP.getSourceManager().getFileID(FirstTokLoc) != PP.getSourceManager().getFileID(SecondTokLoc)) {\n    Diag(FirstTokLoc, diag::warn_compound_token_split_by_macro) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc);"}}
[j]={{"clang/lib/Parse/Parser.cpp",243,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // If either token is in a macro, we expect both tokens to come from the same\n  // macro expansion.\n  if ((FirstTokLoc.isMacroID() || SecondTokLoc.isMacroID()) && PP.getSourceManager().getFileID(FirstTokLoc) != PP.getSourceManager().getFileID(SecondTokLoc)) {\n    Diag(FirstTokLoc, diag::warn_compound_token_split_by_macro) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc);"}},
[k]={
["clang/test/Parser/compound-token-split.cpp"]={"clang/test/Parser/compound-token-split.cpp:15:3: warning: \'(\' and \'{\' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]","clang/test/Parser/compound-token-split.cpp:15:16: warning: \'}\' and \')\' tokens terminating statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]","clang/test/Parser/compound-token-split.cpp:29:17: warning: \'}\' and \')\' tokens terminating statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]"}
}
},
},
["warn_compound_token_split_by_whitespace"]={
["warn_compound_token_split_by_whitespace"]={
[c]="...A tokens ... are separated by whitespace [-Wcompound-token-split-by-space]",
[f]="...A tokens ... are separated by whitespace [-Wcompound-token-split-by-space]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"compound-token-split","compound-token-split-by-space"},
[r]={"compound-token-split","compound-token-split-by-space"},
[q]="compound-token-split-by-space",
[q]="compound-token-split-by-space",
[h]="%select{%1 and |}0%2 tokens %select{introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type}3 are separated by whitespace",
[d]="%select{%1 and |}0%2 tokens %select{introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type}3 are separated by whitespace",
[b]=t,
[e]=u,
[g]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) are separated by whitespace",
[a]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) are separated by whitespace",
[a]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-space[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-space[^\\]]*\\]",
[e]=Q,
[h]=Q,
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[j]={{"clang/lib/Parse/Parser.cpp",257,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // We expect the tokens to abut.\n  if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n    Diag(SpaceLoc, diag::warn_compound_token_split_by_whitespace) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc, SecondTokLoc);"}}
[j]={{"clang/lib/Parse/Parser.cpp",257,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // We expect the tokens to abut.\n  if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n    Diag(SpaceLoc, diag::warn_compound_token_split_by_whitespace) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc, SecondTokLoc);"}}
},
},
["warn_concatenated_literal_array_init"]={
["warn_concatenated_literal_array_init"]={
[c]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]",
[f]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={l,T,Ac,"string-concatenation"},
[r]={m,U,Mc,"string-concatenation"},
[q]="string-concatenation",
[q]="string-concatenation",
[h]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma?",
[d]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma?",
[b]=t,
[e]=u,
[g]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma\\?",
[a]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma\\?",
[a]=" \\[(?:\\-Werror,)?\\-Wstring\\-concatenation[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wstring\\-concatenation[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={eb,1582847864,cb},
[i]={hb,1582847864,ib},
[j]={{v,14154,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (!var->getType()->isStructureType() && var->hasInit() && isa<InitListExpr>(var->getInit())) {\n    if (NumInits > 2)\n      for (unsigned I = 0; I < NumInits; ++I) {\n        // Diagnose missing comma in string array initialization.\n        // Do not warn when all the elements in the initializer are concatenated\n        // together. Do not warn for macros too.\n        if (NumConcat == 2 && !SL->getBeginLoc().isMacroID()) {\n          if (OnlyOneMissingComma) {\n            Diag(SL->getStrTokenLoc(1), diag::warn_concatenated_literal_array_init) << Hints;"}}
[j]={{w,14154,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (!var->getType()->isStructureType() && var->hasInit() && isa<InitListExpr>(var->getInit())) {\n    if (NumInits > 2)\n      for (unsigned I = 0; I < NumInits; ++I) {\n        // Diagnose missing comma in string array initialization.\n        // Do not warn when all the elements in the initializer are concatenated\n        // together. Do not warn for macros too.\n        if (NumConcat == 2 && !SL->getBeginLoc().isMacroID()) {\n          if (OnlyOneMissingComma) {\n            Diag(SL->getStrTokenLoc(1), diag::warn_concatenated_literal_array_init) << Hints;"}},
[k]={
["clang/test/Sema/string-concat.c"]={"clang/test/Sema/string-concat.c:11:5: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:22:5: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:30:5: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:36:33: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:40:24: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:43:81: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:50:5: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:53:50: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]","clang/test/Sema/string-concat.c:66:36: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]"}
}
},
},
["warn_concatenated_nsarray_literal"]={
["warn_concatenated_nsarray_literal"]={
[c]="concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]",
[f]="concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"objc-string-concatenation"},
[r]={"objc-string-concatenation"},
[q]="objc-string-concatenation",
[q]="objc-string-concatenation",
[h]="concatenated NSString literal for an NSArray expression - possibly missing a comma",
[d]="concatenated NSString literal for an NSArray expression - possibly missing a comma",
[b]=t,
[e]=u,
[g]="concatenated NSString literal for an NSArray expression \\- possibly missing a comma",
[a]="concatenated NSString literal for an NSArray expression \\- possibly missing a comma",
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-string\\-concatenation[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-string\\-concatenation[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"a802c3526bc8",1376437495,"ObjectiveC [QoI] issue warning if an element of an nsarray"},
[i]={"a802c3526bc8",1376437495,"ObjectiveC [QoI] issue warning if an element of an nsarray"},
[j]={{nb,488,"/// 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  if (ArrayLiteral)\n    if (ObjCStringLiteral *getString = dyn_cast<ObjCStringLiteral>(OrigElement)) {\n      if (StringLiteral *SL = getString->getString()) {\n        if (numConcat > 1) {\n          if (!hasMacro)\n            S.Diag(Element->getBeginLoc(), diag::warn_concatenated_nsarray_literal) << Element->getType();"}}
[j]={{sb,488,"/// 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  if (ArrayLiteral)\n    if (ObjCStringLiteral *getString = dyn_cast<ObjCStringLiteral>(OrigElement)) {\n      if (StringLiteral *SL = getString->getString()) {\n        if (numConcat > 1) {\n          if (!hasMacro)\n            S.Diag(Element->getBeginLoc(), diag::warn_concatenated_nsarray_literal) << Element->getType();"}},
[k]={
["clang/test/SemaObjC/objc-array-literal.m"]={"clang/test/SemaObjC/objc-array-literal.m:60:19: warning: concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]","clang/test/SemaObjC/objc-array-literal.m:67:20: warning: concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]"}
}
},
},
["warn_condition_is_assignment"]={
["warn_condition_is_assignment"]={
[c]="using the result of an assignment as a condition without parentheses [-Wparentheses]",
[f]="using the result of an assignment as a condition without parentheses [-Wparentheses]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={T,ab,"parentheses"},
[r]={U,bb,"parentheses"},
[q]="parentheses",
[q]="parentheses",
[h]="using the result of an assignment as a condition without parentheses",
[d]="using the result of an assignment as a condition without parentheses",
[b]=t,
[e]=u,
[g]="using the result of an assignment as a condition without parentheses",
[a]="using the result of an assignment as a condition without parentheses",
[a]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d5707abdfdd5",1255384747,"Implement -Wparentheses:  warn about using assignments in contexts that require"},
[i]={"d5707abdfdd5",1255384747,"Implement -Wparentheses:  warn about using assignments in contexts that require"},
[j]={{C,20853,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  unsigned diagnostic = diag::warn_condition_is_assignment;"}}
[j]={{D,20853,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  unsigned diagnostic = diag::warn_condition_is_assignment;"}},
[k]={
["clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp"]={"clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp:15:9: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]","clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp:15:9: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]"}
}
},
},
["warn_condition_is_idiomatic_assignment"]={
["warn_condition_is_idiomatic_assignment"]={
[c]="using the result of an assignment as a condition without parentheses [-Widiomatic-parentheses]",
[f]="using the result of an assignment as a condition without parentheses [-Widiomatic-parentheses]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={"idiomatic-parentheses"},
[r]={"idiomatic-parentheses"},
[q]="idiomatic-parentheses",
[q]="idiomatic-parentheses",
[h]="using the result of an assignment as a condition without parentheses",
[d]="using the result of an assignment as a condition without parentheses",
[b]=t,
[e]=u,
[g]="using the result of an assignment as a condition without parentheses",
[a]="using the result of an assignment as a condition without parentheses",
[a]=" \\[(?:\\-Werror,)?\\-Widiomatic\\-parentheses[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Widiomatic\\-parentheses[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"b0e419e34dc0",1257984365,"Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,"},
[i]={"b0e419e34dc0",1257984365,"Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,"},
[j]={{C,20857,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"},{C,20878,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n      // <foo> = [<bar> nextObject]\n      else if (Sel.isUnarySelector() && Sel.getNameForSlot(0) == \"nextObject\")\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"}}
[j]={{D,20857,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"},{D,20878,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n      // <foo> = [<bar> nextObject]\n      else if (Sel.isUnarySelector() && Sel.getNameForSlot(0) == \"nextObject\")\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"}}
},
},
["warn_conditional_mixed_enum_types"]={
["warn_conditional_mixed_enum_types"]={
[c]="... different enumeration types (A and B) [-Wenum-compare-conditional]",
[f]="... different enumeration types (A and B) [-Wenum-compare-conditional]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[A]=false,
[B]=false,
[p]={Bb,"enum-compare-conditional",fc,Eb},
[r]={Kb,"enum-compare-conditional",tc,Jb},
[q]="enum-compare-conditional",
[q]="enum-compare-conditional",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-conditional[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-conditional[^\\]]*\\]",
[e]=Vb,
[h]=hc,
[i]={Mb,1567434909,Lb},
[i]={Ob,1567434909,Pb},
[j]={{C,1523,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_conditional_mixed_enum_types_cxx20 : diag::warn_conditional_mixed_enum_types;"}}
[j]={{D,1523,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_conditional_mixed_enum_types_cxx20 : diag::warn_conditional_mixed_enum_types;"}}
},
},
["warn_conditional_mixed_enum_types_cxx20"]={
["warn_conditional_mixed_enum_types_cxx20"]={
[c]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare-conditional]",
[f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare-conditional]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={Bb,Ab,"deprecated-enum-compare-conditional","enum-compare-conditional",fc,Eb},
[r]={Kb,Cb,"deprecated-enum-compare-conditional","enum-compare-conditional",tc,Jb},
[q]="deprecated-enum-compare-conditional",
[q]="deprecated-enum-compare-conditional",
[h]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated",
[b]=t,
[e]=u,
[g]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare\\-conditional[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare\\-conditional[^\\]]*\\]",
[e]=Ib,
[h]=Wb,
[i]={ib,1576908663,jb},
[i]={kb,1576908663,jb},
[j]={{C,1522,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_conditional_mixed_enum_types_cxx20 : diag::warn_conditional_mixed_enum_types;"}}
[j]={{D,1522,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_conditional_mixed_enum_types_cxx20 : diag::warn_conditional_mixed_enum_types;"}}
},
},
["warn_conflicting_nullability_attr_overriding_param_types"]={
["warn_conflicting_nullability_attr_overriding_param_types"]={
[c]="conflicting nullability specifier on parameter types, A conflicts with existing specifier B [-Wnullability]",
[f]="conflicting nullability specifier on parameter types, A conflicts with existing specifier B [-Wnullability]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"nullability"},
[r]={"nullability"},
[q]="nullability",
[q]="nullability",
[h]="conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1",
[d]="conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1",
[b]=t,
[e]=u,
[g]="conflicting nullability specifier on parameter types, (.*?) conflicts with existing specifier (.*?)",
[a]="conflicting nullability specifier on parameter types, (.*?) conflicts with existing specifier (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]",
[e]="Nullability Issue",
[h]="Nullability Issue",
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[j]={{B,2460,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(ImplTy, IfaceTy, true)) {\n    S.Diag(ImplVar->getLocation(), diag::warn_conflicting_nullability_attr_overriding_param_types) << DiagNullabilityKind(*ImplTy->getNullability(), ((ImplVar->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*IfaceTy->getNullability(), ((IfaceVar->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}}
[j]={{C,2460,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(ImplTy, IfaceTy, true)) {\n    S.Diag(ImplVar->getLocation(), diag::warn_conflicting_nullability_attr_overriding_param_types) << DiagNullabilityKind(*ImplTy->getNullability(), ((ImplVar->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*IfaceTy->getNullability(), ((IfaceVar->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}},
[k]={
["clang/test/SemaObjC/override-nullability.m"]={"clang/test/SemaObjC/override-nullability.m:12:32: warning: conflicting nullability specifier on parameter types, \'nonnull\' conflicts with existing specifier \'nullable\' [-Wnullability]"}
}
},
},
["warn_conflicting_nullability_attr_overriding_ret_types"]={
["warn_conflicting_nullability_attr_overriding_ret_types"]={
[c]="conflicting nullability specifier on return types, A conflicts with existing specifier B [-Wnullability]",
[f]="conflicting nullability specifier on return types, A conflicts with existing specifier B [-Wnullability]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"nullability"},
[r]={"nullability"},
[q]="nullability",
[q]="nullability",
[h]="conflicting nullability specifier on return types, %0 conflicts with existing specifier %1",
[d]="conflicting nullability specifier on return types, %0 conflicts with existing specifier %1",
[b]=t,
[e]=u,
[g]="conflicting nullability specifier on return types, (.*?) conflicts with existing specifier (.*?)",
[a]="conflicting nullability specifier on return types, (.*?) conflicts with existing specifier (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]",
[e]="Nullability Issue",
[h]="Nullability Issue",
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[j]={{B,2376,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(MethodImpl->getReturnType(), MethodDecl->getReturnType(), false)) {\n    S.Diag(MethodImpl->getLocation(), diag::warn_conflicting_nullability_attr_overriding_ret_types) << DiagNullabilityKind(nullabilityMethodImpl, ((MethodImpl->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(nullabilityMethodDecl, ((MethodDecl->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}}
[j]={{C,2376,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(MethodImpl->getReturnType(), MethodDecl->getReturnType(), false)) {\n    S.Diag(MethodImpl->getLocation(), diag::warn_conflicting_nullability_attr_overriding_ret_types) << DiagNullabilityKind(nullabilityMethodImpl, ((MethodImpl->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(nullabilityMethodDecl, ((MethodDecl->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}},
[k]={
["clang/test/SemaObjC/override-nullability.m"]={"clang/test/SemaObjC/override-nullability.m:12:1: warning: conflicting nullability specifier on return types, \'nullable\' conflicts with existing specifier \'nonnull\' [-Wnullability]"}
}
},
},
["warn_conflicting_overriding_param_modifiers"]={
["warn_conflicting_overriding_param_modifiers"]={
[c]="conflicting distributed object modifiers on parameter type in declaration of A [-Woverriding-method-mismatch]",
[f]="conflicting distributed object modifiers on parameter type in declaration of A [-Woverriding-method-mismatch]",
[d]=s,
[f]=r,
[A]=false,
[p]={zb},
[q]=zb,
[h]="conflicting distributed object modifiers on parameter type in declaration of %0",
[b]=t,
[b]=t,
[g]="conflicting distributed object modifiers on parameter type in declaration of (.*?)",
[c]=s,
[a]=Dc,
[B]=false,
[e]=k,
[r]={Bb},
[i]={Cc,1312996590,Bc},
[q]=Bb,
[j]={{B,2440,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(ImplVar->getObjCDeclQualifier(), IfaceVar->getObjCDeclQualifier())) {\n    if (Warn) {\n      if (IsOverridingMode)\n        S.Diag(ImplVar->getLocation(), diag::warn_conflicting_overriding_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}}
[d]="conflicting distributed object modifiers on parameter type in declaration of %0",
[e]=u,
[a]="conflicting distributed object modifiers on parameter type in declaration of (.*?)",
[g]=Qc,
[h]=l,
[i]={Sc,1312996590,Tc},
[j]={{C,2440,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(ImplVar->getObjCDeclQualifier(), IfaceVar->getObjCDeclQualifier())) {\n    if (Warn) {\n      if (IsOverridingMode)\n        S.Diag(ImplVar->getLocation(), diag::warn_conflicting_overriding_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}}
},
},
["warn_conflicting_overriding_param_types"]={
["warn_conflicting_overriding_param_types"]={
[c]="conflicting parameter types in declaration of A: B vs C [-Woverriding-method-mismatch]",
[f]="conflicting parameter types in declaration of A: B vs C [-Woverriding-method-mismatch]",
[d]=s,
[f]=r,
[A]=false,
[p]={zb},
[q]=zb,
[h]="conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2",
[b]=t,
[b]=t,
[g]="conflicting parameter types in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)",
[c]=s,
[a]=Dc,
[B]=false,
[e]=k,
[r]={Bb},
[i]={Cc,1312996590,Bc},
[q]=Bb,
[j]={{B,2475,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}}
[d]="conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2",
[e]=u,
[a]="conflicting parameter types in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)",
[g]=Qc,
[h]=l,
[i]={Sc,1312996590,Tc},
[j]={{C,2475,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}},
[k]={
["clang/test/SemaObjC/qualified-protocol-method-conflicts.m"]={"clang/test/SemaObjC/qualified-protocol-method-conflicts.m:18:21: warning: conflicting parameter types in declaration of \'setX:\': \'float\' vs \'int\' [-Woverriding-method-mismatch]","clang/test/SemaObjC/qualified-protocol-method-conflicts.m:26:23: warning: conflicting parameter types in declaration of \'setX:\': \'int\' vs \'float\' [-Woverriding-method-mismatch]","clang/test/SemaObjC/qualified-protocol-method-conflicts.m:37:21: warning: conflicting parameter types in declaration of \'setX:\': \'float\' vs \'int\' [-Woverriding-method-mismatch]"}
}
},
},
["warn_conflicting_overriding_ret_type_modifiers"]={
["warn_conflicting_overriding_ret_type_modifiers"]={
[c]="conflicting distributed object modifiers on return type in declaration of A [-Woverriding-method-mismatch]",
[f]="conflicting distributed object modifiers on return type in declaration of A [-Woverriding-method-mismatch]",
[d]=s,
[f]=r,
[A]=false,
[p]={zb},
[q]=zb,
[h]="conflicting distributed object modifiers on return type in declaration of %0",
[b]=t,
[b]=t,
[g]="conflicting distributed object modifiers on return type in declaration of (.*?)",
[c]=s,
[a]=Dc,
[B]=false,
[e]=k,
[r]={Bb},
[i]={Cc,1312996590,Bc},
[q]=Bb,
[j]={{B,2358,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(MethodDecl->getObjCDeclQualifier(), MethodImpl->getObjCDeclQualifier())) {\n    if (Warn) {\n      S.Diag(MethodImpl->getLocation(), (IsOverridingMode ? diag::warn_conflicting_overriding_ret_type_modifiers : diag::warn_conflicting_ret_type_modifiers)) << MethodImpl->getDeclName() << MethodImpl->getReturnTypeSourceRange();"}}
[d]="conflicting distributed object modifiers on return type in declaration of %0",
[e]=u,
[a]="conflicting distributed object modifiers on return type in declaration of (.*?)",
[g]=Qc,
[h]=l,
[i]={Sc,1312996590,Tc},
[j]={{C,2358,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(MethodDecl->getObjCDeclQualifier(), MethodImpl->getObjCDeclQualifier())) {\n    if (Warn) {\n      S.Diag(MethodImpl->getLocation(), (IsOverridingMode ? diag::warn_conflicting_overriding_ret_type_modifiers : diag::warn_conflicting_ret_type_modifiers)) << MethodImpl->getDeclName() << MethodImpl->getReturnTypeSourceRange();"}},
[k]={
["clang/test/SemaObjC/class-protocol-method-match.m"]={"clang/test/SemaObjC/class-protocol-method-match.m:26:1: warning: conflicting distributed object modifiers on return type in declaration of \'bud\' [-Woverriding-method-mismatch]"}
}
},
},
["warn_conflicting_overriding_ret_types"]={
["warn_conflicting_overriding_ret_types"]={
[c]="conflicting return type in declaration of A: B vs C [-Woverriding-method-mismatch]",
[f]="conflicting return type in declaration of A: B vs C [-Woverriding-method-mismatch]",
[d]=s,
[f]=r,
[A]=false,
[p]={zb},
[q]=zb,
[h]="conflicting return type in declaration of %0%diff{: $ vs $|}1,2",
[b]=t,
[b]=t,
[g]="conflicting return type in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)",
[c]=s,
[a]=Dc,
[B]=false,
[e]=k,
[r]={Bb},
[i]={Cc,1312996590,Bc},
[q]=Bb,
[j]={{B,2393,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}}
[d]="conflicting return type in declaration of %0%diff{: $ vs $|}1,2",
[e]=u,
[a]="conflicting return type in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)",
[g]=Qc,
[h]=l,
[i]={Sc,1312996590,Tc},
[j]={{C,2393,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}},
[k]={
["clang/test/SemaObjC/qualified-protocol-method-conflicts.m"]={"clang/test/SemaObjC/qualified-protocol-method-conflicts.m:19:1: warning: conflicting return type in declaration of \'C\': \'float\' vs \'int\' [-Woverriding-method-mismatch]","clang/test/SemaObjC/qualified-protocol-method-conflicts.m:27:1: warning: conflicting return type in declaration of \'C\': \'int\' vs \'float\' [-Woverriding-method-mismatch]","clang/test/SemaObjC/qualified-protocol-method-conflicts.m:38:1: warning: conflicting return type in declaration of \'C\': \'float\' vs \'int\' [-Woverriding-method-mismatch]"}
}
},
},
["warn_conflicting_overriding_variadic"]={
["warn_conflicting_overriding_variadic"]={
[c]="conflicting variadic declaration of method and its implementation [-Woverriding-method-mismatch]",
[f]="conflicting variadic declaration of method and its implementation [-Woverriding-method-mismatch]",
[d]=s,
[f]=r,
[A]=false,
[p]={zb},
[q]=zb,
[h]=xc,
[b]=t,
[b]=t,
[g]=xc,
[c]=s,
[a]=Dc,
[B]=false,
[e]=k,
[r]={Bb},
[i]={Cc,1312996590,Bc},
[q]=Bb,
[j]={{B,2623,"void Sema::CheckConflictingOverridingMethod(ObjCMethodDecl *Method, ObjCMethodDecl *Overridden, bool IsProtocolMethodDecl) {\n  if (Method->isVariadic() != Overridden->isVariadic()) {\n    Diag(Method->getLocation(), diag::warn_conflicting_overriding_variadic);"}}
[d]=Rc,
[e]=u,
[a]=Rc,
[g]=Qc,
[h]=l,
[i]={Sc,1312996590,Tc},
[j]={{C,2623,"void Sema::CheckConflictingOverridingMethod(ObjCMethodDecl *Method, ObjCMethodDecl *Overridden, bool IsProtocolMethodDecl) {\n  if (Method->isVariadic() != Overridden->isVariadic()) {\n    Diag(Method->getLocation(), diag::warn_conflicting_overriding_variadic);"}}
},
},
["warn_conflicting_param_modifiers"]={
["warn_conflicting_param_modifiers"]={
[c]="conflicting distributed object modifiers on parameter type in implementation of A [-Wdistributed-object-modifiers]",
[f]="conflicting distributed object modifiers on parameter type in implementation of A [-Wdistributed-object-modifiers]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"distributed-object-modifiers"},
[r]={"distributed-object-modifiers"},
[q]="distributed-object-modifiers",
[q]="distributed-object-modifiers",
[h]="conflicting distributed object modifiers on parameter type in implementation of %0",
[d]="conflicting distributed object modifiers on parameter type in implementation of %0",
[b]=t,
[e]=u,
[g]="conflicting distributed object modifiers on parameter type in implementation of (.*?)",
[a]="conflicting distributed object modifiers on parameter type in implementation of (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[j]={{B,2444,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(ImplVar->getObjCDeclQualifier(), IfaceVar->getObjCDeclQualifier())) {\n    if (Warn) {\n      if (IsOverridingMode)\n      else\n        S.Diag(ImplVar->getLocation(), diag::warn_conflicting_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}}
[j]={{C,2444,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(ImplVar->getObjCDeclQualifier(), IfaceVar->getObjCDeclQualifier())) {\n    if (Warn) {\n      if (IsOverridingMode)\n      else\n        S.Diag(ImplVar->getLocation(), diag::warn_conflicting_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}},
[k]={
["clang/test/SemaObjC/dist-object-modifiers.m"]={"clang/test/SemaObjC/dist-object-modifiers.m:17:21: warning: conflicting distributed object modifiers on parameter type in implementation of \'doStuff:\' [-Wdistributed-object-modifiers]","clang/test/SemaObjC/dist-object-modifiers.m:19:24: warning: conflicting distributed object modifiers on parameter type in implementation of \'stillMore::\' [-Wdistributed-object-modifiers]","clang/test/SemaObjC/dist-object-modifiers.m:19:42: warning: conflicting distributed object modifiers on parameter type in implementation of \'stillMore::\' [-Wdistributed-object-modifiers]"}
}
},
},
["warn_conflicting_param_types"]={
["warn_conflicting_param_types"]={
[c]="conflicting parameter types in implementation of A: B vs C [-Wmismatched-parameter-types]",
[f]="conflicting parameter types in implementation of A: B vs C [-Wmismatched-parameter-types]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"mismatched-parameter-types"},
[r]={"mismatched-parameter-types"},
[q]="mismatched-parameter-types",
[q]="mismatched-parameter-types",
[h]="conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2",
[d]="conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2",
[b]=t,
[e]=u,
[g]="conflicting parameter types in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)",
[a]="conflicting parameter types in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-parameter\\-types[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-parameter\\-types[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[j]={{B,2476,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}}
[j]={{C,2476,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}},
[k]={
["clang/test/SemaObjC/method-typecheck-1.m"]={"clang/test/SemaObjC/method-typecheck-1.m:10:25: warning: conflicting parameter types in implementation of \'setMoo:\': \'int\' vs \'float\' [-Wmismatched-parameter-types]","clang/test/SemaObjC/method-typecheck-1.m:23:12: warning: conflicting parameter types in implementation of \'cMoo:\': \'int\' vs \'float\' [-Wmismatched-parameter-types]","clang/test/SemaObjC/method-typecheck-1.m:34:9: warning: conflicting parameter types in implementation of \'setCat:\': \'int\' vs \'float\' [-Wmismatched-parameter-types]"}
}
},
},
["warn_conflicting_ret_type_modifiers"]={
["warn_conflicting_ret_type_modifiers"]={
[c]="conflicting distributed object modifiers on return type in implementation of A [-Wdistributed-object-modifiers]",
[f]="conflicting distributed object modifiers on return type in implementation of A [-Wdistributed-object-modifiers]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"distributed-object-modifiers"},
[r]={"distributed-object-modifiers"},
[q]="distributed-object-modifiers",
[q]="distributed-object-modifiers",
[h]="conflicting distributed object modifiers on return type in implementation of %0",
[d]="conflicting distributed object modifiers on return type in implementation of %0",
[b]=t,
[e]=u,
[g]="conflicting distributed object modifiers on return type in implementation of (.*?)",
[a]="conflicting distributed object modifiers on return type in implementation of (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[j]={{B,2359,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(MethodDecl->getObjCDeclQualifier(), MethodImpl->getObjCDeclQualifier())) {\n    if (Warn) {\n      S.Diag(MethodImpl->getLocation(), (IsOverridingMode ? diag::warn_conflicting_overriding_ret_type_modifiers : diag::warn_conflicting_ret_type_modifiers)) << MethodImpl->getDeclName() << MethodImpl->getReturnTypeSourceRange();"}}
[j]={{C,2359,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(MethodDecl->getObjCDeclQualifier(), MethodImpl->getObjCDeclQualifier())) {\n    if (Warn) {\n      S.Diag(MethodImpl->getLocation(), (IsOverridingMode ? diag::warn_conflicting_overriding_ret_type_modifiers : diag::warn_conflicting_ret_type_modifiers)) << MethodImpl->getDeclName() << MethodImpl->getReturnTypeSourceRange();"}},
[k]={
["clang/test/SemaObjC/dist-object-modifiers.m"]={"clang/test/SemaObjC/dist-object-modifiers.m:16:1: warning: conflicting distributed object modifiers on return type in implementation of \'serverPID\' [-Wdistributed-object-modifiers]","clang/test/SemaObjC/dist-object-modifiers.m:19:1: warning: conflicting distributed object modifiers on return type in implementation of \'stillMore::\' [-Wdistributed-object-modifiers]"}
}
},
},
["warn_conflicting_ret_types"]={
["warn_conflicting_ret_types"]={
[c]="conflicting return type in implementation of A: B vs C [-Wmismatched-return-types]",
[f]="conflicting return type in implementation of A: B vs C [-Wmismatched-return-types]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"mismatched-return-types"},
[r]={"mismatched-return-types"},
[q]="mismatched-return-types",
[q]="mismatched-return-types",
[h]="conflicting return type in implementation of %0%diff{: $ vs $|}1,2",
[d]="conflicting return type in implementation of %0%diff{: $ vs $|}1,2",
[b]=t,
[e]=u,
[g]="conflicting return type in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)",
[a]="conflicting return type in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)",
[a]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-return\\-types[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-return\\-types[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[j]={{B,2394,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}}
[j]={{C,2394,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}},
[k]={
["clang/test/Parser/objc-recover.mm"]={"clang/test/Parser/objc-recover.mm:23:1: warning: conflicting return type in implementation of \'foo\': \'void\' vs \'id\' [-Wmismatched-return-types]","clang/test/Parser/objc-recover.mm:25:1: warning: conflicting return type in implementation of \'bar\': \'void\' vs \'id\' [-Wmismatched-return-types]","clang/test/Parser/objc-recover.mm:44:1: warning: conflicting return type in implementation of \'test\': \'id\' vs \'void\' [-Wmismatched-return-types]","clang/test/Parser/objc-recover.mm:63:1: warning: conflicting return type in implementation of \'PWEN_foo\': \'void\' vs \'id\' [-Wmismatched-return-types]"}
}
},
},
["warn_conflicting_variadic"]={
["warn_conflicting_variadic"]={
[c]=xc,
[f]=Rc,
[d]=s,
[f]=r,
[h]=xc,
[b]=t,
[b]=t,
[g]=xc,
[c]=s,
[a]=ub,
[d]=Rc,
[e]=k,
[e]=u,
[a]=Rc,
[g]=ub,
[h]=l,
[i]={"5981b04718ca",1274484538,"Clang missing warning about conflicting declaration vs. definition "},
[i]={"5981b04718ca",1274484538,"Clang missing warning about conflicting declaration vs. definition "},
[j]={{B,2600,"void Sema::WarnConflictingTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (ImpMethodDecl->isVariadic() != MethodDecl->isVariadic()) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_conflicting_variadic);"}}
[j]={{C,2600,"void Sema::WarnConflictingTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (ImpMethodDecl->isVariadic() != MethodDecl->isVariadic()) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_conflicting_variadic);"}},
[k]={
["clang/test/SemaObjC/class-protocol-method-match.m"]={"clang/test/SemaObjC/class-protocol-method-match.m:32:1: warning: conflicting variadic declaration of method and its implementation [-Woverriding-method-mismatch]"}
}
},
},
["warn_consteval_if_always_true"]={
["warn_consteval_if_always_true"]={
[c]="consteval if is always true in an ... context [-Wredundant-consteval-if]",
[f]="consteval if is always true in an ... context [-Wredundant-consteval-if]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"redundant-consteval-if"},
[r]={"redundant-consteval-if"},
[q]="redundant-consteval-if",
[q]="redundant-consteval-if",
[h]="consteval if is always true in an %select{unevaluated|immediate}0 context",
[d]="consteval if is always true in an %select{unevaluated|immediate}0 context",
[b]=t,
[e]=u,
[g]="consteval if is always true in an (?:unevaluated|immediate) context",
[a]="consteval if is always true in an (?:unevaluated|immediate) context",
[a]=" \\[(?:\\-Werror,)?\\-Wredundant\\-consteval\\-if[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wredundant\\-consteval\\-if[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={Gb,1615397021,Cb},
[i]={Mb,1615397021,Ib},
[j]={{O,946,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval) {\n    if (isUnevaluatedContext() || Immediate)\n      Diags.Report(IfLoc, diag::warn_consteval_if_always_true) << Immediate;"}}
[j]={{P,946,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval) {\n    if (isUnevaluatedContext() || Immediate)\n      Diags.Report(IfLoc, diag::warn_consteval_if_always_true) << Immediate;"}},
[k]={
["clang/test/SemaCXX/cxx2b-consteval-if.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-if.cpp:21:5: warning: consteval if is always true in an immediate context [-Wredundant-consteval-if]"}
}
},
},
["warn_constexpr_unscoped_enum_out_of_range"]={
["warn_constexpr_unscoped_enum_out_of_range"]={
[c]="integer value A is outside the valid range of values [B, C] for the enumeration type D [-Wenum-constexpr-conversion]",
[f]="integer value A is outside the valid range of values [B, C] for the enumeration type D [-Wenum-constexpr-conversion]",
[d]=tb,
[b]=vb,
[f]=oc,
[c]=Gc,
[p]={"enum-constexpr-conversion"},
[r]={"enum-constexpr-conversion"},
[q]="enum-constexpr-conversion",
[q]="enum-constexpr-conversion",
[h]="integer value %0 is outside the valid range of values [%1, %2] for the enumeration type %3",
[d]="integer value %0 is outside the valid range of values [%1, %2] for the enumeration type %3",
[b]=lc,
[e]=Lc,
[g]="integer value (.*?) is outside the valid range of values \\[(.*?), (.*?)\\] for the enumeration type (.*?)",
[a]="integer value (.*?) is outside the valid range of values \\[(.*?), (.*?)\\] for the enumeration type (.*?)",
[a]=" \\[[^\\]]*\\-Wenum\\-constexpr\\-conversion[^\\]]*\\]",
[g]=" \\[[^\\]]*\\-Wenum\\-constexpr\\-conversion[^\\]]*\\]",
[e]=l,
[h]=m,
[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs"},
[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs"},
[j]={{"clang/lib/AST/ExprConstant.cpp",13778,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getSExtValue() << Max.getSExtValue() << ED;"},{"clang/lib/AST/ExprConstant.cpp",13784,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n        else if (!ED->getNumNegativeBits() && ConstexprVar && Max.ult(Result.getInt().getZExtValue()))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getZExtValue() << Max.getZExtValue() << ED;"}}
[j]={{"clang/lib/AST/ExprConstant.cpp",13778,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getSExtValue() << Max.getSExtValue() << ED;"},{"clang/lib/AST/ExprConstant.cpp",13784,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n        else if (!ED->getNumNegativeBits() && ConstexprVar && Max.ult(Result.getInt().getZExtValue()))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getZExtValue() << Max.getZExtValue() << ED;"}},
[k]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:902:49: error: integer value -1 is outside the valid range of values [0, 1] for the enumeration type \'E\' [-Wenum-constexpr-conversion]"}
}
},
},
["warn_conv_to_base_not_used"]={
["warn_conv_to_base_not_used"]={
[c]="conversion function converting A to its base class B will never be used [-Wclass-conversion]",
[f]="conversion function converting A to its base class B will never be used [-Wclass-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"class-conversion"},
[r]={"class-conversion"},
[q]="class-conversion",
[q]="class-conversion",
[h]="conversion function converting %0 to its base class %1 will never be used",
[d]="conversion function converting %0 to its base class %1 will never be used",
[b]=t,
[e]=u,
[g]="conversion function converting (.*?) to its base class (.*?) will never be used",
[a]="conversion function converting (.*?) to its base class (.*?) will never be used",
[a]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{y,11177,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  else if (Conversion->size_overridden_methods() != 0)\n  else if (ConvType->isRecordType()) {\n    if (ConvType == ClassType)\n    else if (IsDerivedFrom(Conversion->getLocation(), ClassType, ConvType))\n      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used) << ClassType << ConvType;"}}
[j]={{z,11177,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  else if (Conversion->size_overridden_methods() != 0)\n  else if (ConvType->isRecordType()) {\n    if (ConvType == ClassType)\n    else if (IsDerivedFrom(Conversion->getLocation(), ClassType, ConvType))\n      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used) << ClassType << ConvType;"}},
[k]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:30:5: warning: conversion function converting \'PR6066::A\' to its base class \'PR6066::B\' will never be used [-Wclass-conversion]"}
}
},
},
["warn_conv_to_self_not_used"]={
["warn_conv_to_self_not_used"]={
[c]="conversion function converting A to itself will never be used [-Wclass-conversion]",
[f]="conversion function converting A to itself will never be used [-Wclass-conversion]",
[d]=s,
[b]=t,
[f]=r,
[c]=s,
[p]={"class-conversion"},
[r]={"class-conversion"},
[q]="class-conversion",
[q]="class-conversion",
[h]="conversion function converting %0 to itself will never be used",
[d]="conversion function converting %0 to itself will never be used",
[b]=t,
[e]=u,
[g]="conversion function converting (.*?) to itself will never be used",
[a]="conversion function converting (.*?) to itself will never be used",
[a]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]",
[g]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]",
[e]=k,
[h]=l,
[i]={X,1237025389,W},
[i]={X,1237025389,Y},
[j]={{y,11174,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  else if (Conversion->size_overridden_methods() != 0)\n  else if (ConvType->isRecordType()) {\n    if (ConvType == ClassType)\n      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used) << ClassType;"}}
[j]={{z,11174,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  else if (Conversion->size_overridden_methods() != 0)\n  else if (ConvType->isRecordType()) {\n    if (ConvType == ClassType)\n      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used) << ClassType;"}},
[k]={
["clang/test/SemaCXX/conversion-function.cpp"]={"clang/test/SemaCXX/conversion-function.cpp:63:3: warning: conversion function converting \'B\' to itself will never be used [-Wclass-conversion]","clang/test/SemaCXX/conversion-function.cpp:80:11: warning: conversion function converting \'DerivedB\' to itself will never be used [-Wclass-conversion]"}
}
}
}
};
};
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