Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) No edit summary |
Timo.stripf (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
local a=" | local a="regex2"; | ||
local b=" | local b="prefix"; | ||
local c=" | local c="type"; | ||
local d=" | local d="message"; | ||
local e=" | local e="regex1"; | ||
local f=" | local f="title"; | ||
local g=" | local g="regex3"; | ||
local h=" | local h="category"; | ||
local i="commit"; | local i="commit"; | ||
local j="source"; | local j="source"; | ||
local k=" | local k="tests2"; | ||
local l=""; | local l="Semantic Issue"; | ||
local m=" | local m=""; | ||
local n="note: "; | local n="note: "; | ||
local o="Note"; | local o="Note"; | ||
local p=" | local p="note\\: "; | ||
local q="maingroup"; | local q="maingroup"; | ||
local r="Warning"; | local r="groups"; | ||
local | local s="Warning"; | ||
local | local t="warning: "; | ||
local | local u="(?:warning|error|fatal error)\\: "; | ||
local | local v="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local | local w="clang/lib/Sema/SemaDecl.cpp"; | ||
local | local x="clang/lib/Sema/SemaOpenMP.cpp"; | ||
local | local y="clang/lib/Sema/SemaTemplate.cpp"; | ||
local | local z="clang/lib/Sema/SemaDeclCXX.cpp"; | ||
local | local A="ignored-attributes"; | ||
local | local B="defaultactive"; | ||
local | local C="clang/lib/Sema/SemaDeclObjC.cpp"; | ||
local | local D="clang/lib/Sema/SemaExpr.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 | local H="Lexical or Preprocessor Issue"; | ||
local | local I="OpenMP Issue"; | ||
local J="clang/lib/Sema/AnalysisBasedWarnings.cpp"; | |||
local K="attributes"; | local K="attributes"; | ||
local L=" | 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=" | local N="b1c4d5507fad"; | ||
local O="clang/lib/Sema/ | local O="clang/lib/Sema/JumpDiagnostics.cpp"; | ||
local P="clang/lib/ | local P="clang/lib/Sema/SemaStmt.cpp"; | ||
local Q="Parse Issue"; | local Q="Parse Issue"; | ||
local R=" | local R="clang/lib/Parse/ParseOpenMP.cpp"; | ||
local S="clang/lib/Lex/PPDirectives.cpp"; | local S="clang/lib/Lex/PPDirectives.cpp"; | ||
local T=" | local T="swift-name-attribute"; | ||
local U=" | local U="CL4"; | ||
local V="pre-c2x-compat"; | local V="pre-c2x-compat"; | ||
local W=" | local W="clang/lib/Sema/SemaInit.cpp"; | ||
local X="5a8987ca5113"; | local X="5a8987ca5113"; | ||
local Y=" | local Y="Update tablegen diagnostic files to be in sync with the def files."; | ||
local Z=" | local Z="Implement P2361 Unevaluated string literals"; | ||
local ab=" | local ab="95f50964fbf5"; | ||
local bb=" | local bb="all"; | ||
local cb=" | local cb="clang/lib/Sema/SemaType.cpp"; | ||
local db=" | local db="remark: "; | ||
local eb=" | local eb="clang/lib/Sema/SemaTemplateInstantiate.cpp"; | ||
local fb=" | local fb="Remark"; | ||
local gb=" | local gb="remark\\: "; | ||
local hb=" | local hb="14f6bfcb52e7"; | ||
local ib=" | 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 | local lb="clang/lib/Lex/Lexer.cpp"; | ||
local | local mb="most"; | ||
local | local nb="clang/lib/Sema/SemaCast.cpp"; | ||
local | local ob="clang/test/SemaCXX/uninitialized.cpp:1242:5: note: during field initialization in this constructor"; | ||
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=" | local rb="61d065e21ff3"; | ||
local sb="clang/lib/Sema/ | local sb="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local tb=" | local tb="availability"; | ||
local ub="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | local ub="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | ||
local vb=" | local vb="error: "; | ||
local wb=" | 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=" \\[(?:\\-Werror,)?\\-Wpre\\-c2x\\-compat[^\\]]*\\]"; | |||
local zb=" | local zb="pre-c2x-compat-pedantic"; | ||
local Ab=" | local Ab="1228d42ddab8"; | ||
local Bb=" | local Bb="overriding-method-mismatch"; | ||
local Cb=" | local Cb="deprecated"; | ||
local Db="clang/ | local Db="clang/test/SemaCXX/uninitialized.cpp:928:5: note: during field initialization in this constructor"; | ||
local Eb=" | local Eb="called-once-parameter"; | ||
local Fb=" | local Fb="clang/test/SemaCXX/uninitialized.cpp:944:10: note: during field initialization in the implicit default constructor"; | ||
local Gb=" | 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/ | local Hb="clang/test/SemaObjC/attr-swift_name.m"; | ||
local Ib=" | local Ib="Reland [clang] Check unsupported types in expressions"; | ||
local Jb=" | local Jb="non-gcc"; | ||
local Kb=" | local Kb="conversion"; | ||
local Lb=" | local Lb="clang/lib/Sema/SemaPseudoObject.cpp"; | ||
local Mb=" | local Mb="3dbcea8b957a"; | ||
local Nb=" | local Nb="trigraphs"; | ||
local Ob=" | local Ob="7c11da0cfd33"; | ||
local Pb="( | local Pb="[clang] New __attribute__((__clang_arm_mve_alias))."; | ||
local Qb="clang/ | local Qb="clang/test/SemaSYCL/zero-length-arrays.cpp:31:24: note: within field of type \'InnerTemplated<0U>[1]\' declared here"; | ||
local Rb=" | 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=" | local Sb="module-build"; | ||
local Tb="clang/ | local Tb="clang/test/Lexer/deprecate-macro.c:29:29: note: macro marked \'deprecated\' here"; | ||
local Ub="clang/lib/ | local Ub="clang/lib/Lex/Pragma.cpp"; | ||
local Vb=" | local Vb="clang/lib/Sema/SemaAvailability.cpp"; | ||
local Wb=" | 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=" | local Yb="(?:error|fatal error)\\: "; | ||
local Zb=" | local Zb="clang/lib/Parse/ParseDecl.cpp"; | ||
local ac=" | local ac="Error"; | ||
local bc=" | 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=" | local cc="Modules Issue"; | ||
local dc=" | local dc="clang/lib/Sema/SemaExprCXX.cpp"; | ||
local ec=" | local ec="clang/lib/Serialization/ASTReader.cpp"; | ||
local fc=" | local fc="tautological-compare"; | ||
local gc="clang/lib/ | local gc="clang/lib/Sema/SemaModule.cpp"; | ||
local hc=" | local hc="Value Conversion Issue"; | ||
local ic=" | local ic="array-bounds"; | ||
local jc=" | local jc=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]"; | ||
local kc=" | local kc="clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:46:10: note: \'get\' returns a reference"; | ||
local lc=" | local lc="thread-safety-analysis"; | ||
local mc=" | local mc="..."; | ||
local nc="clang/ | local nc="clang/test/SemaObjC/warn-called-once.m"; | ||
local oc=" | local oc="c99-compat"; | ||
local pc=" | local pc="Backend Issue"; | ||
local qc=" | local qc="ARC Semantic Issue"; | ||
local rc="clang/lib/ | local rc="clang/lib/Frontend/CompilerInstance.cpp"; | ||
local sc=" | local sc="completion-handler"; | ||
local tc=" | local tc="enum-conversion"; | ||
local uc=" | local uc="gcc-compat"; | ||
local vc=" | local vc="pass-analysis"; | ||
local wc=" | local wc="arc-unsafe-retained-assign"; | ||
local xc=" | 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/ | local zc="fe17b30a7957"; | ||
local | local Ac="[attributes][analyzer] Add annotations for handles."; | ||
local | local Bc="clang/lib/Parse/ParseExpr.cpp"; | ||
local | local Cc="Automatic Reference Counting."; | ||
local | local Dc="arc"; | ||
local | 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"]={ | ||
[ | [f]=mc, | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression}0", | ||
[ | [e]=p, | ||
[ | [a]="(?:expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression)", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct."}, | [i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]=mc, | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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\\) \\.\\.\\.\')", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]=mc, | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{expected an expression statement|expected built-in assignment operator|expected expression of scalar type|expected lvalue expression}0", | ||
[ | [e]=p, | ||
[ | [a]="(?:expected an expression statement|expected built\\-in assignment operator|expected expression of scalar type|expected lvalue expression)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]=mc, | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="as specified in ... clause...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="as specified in %select{\'collapse\'|\'ordered\'|\'collapse\' and \'ordered\'}0 clause%select{||s}0", | ||
[ | [e]=p, | ||
[ | [a]="as specified in (?:\'collapse\'|\'ordered\'|\'collapse\' and \'ordered\') clause(?:||s)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="conversion to ... type A declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="conversion to %select{integral|enumeration}0 type %1 declared here", | ||
[ | [e]=p, | ||
[ | [a]="conversion to (?:integral|enumeration) type (.*?) declared here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'"}, | [i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="...\'hint\' clause with value \'A\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{|previous }0\'hint\' clause with value \'%1\'", | ||
[ | [e]=p, | ||
[ | [a]="(?:|previous )\'hint\' clause with value \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="...directive with no \'hint\' clause specified", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{|previous }0directive with no \'hint\' clause specified", | ||
[ | [e]=p, | ||
[ | [a]="(?:|previous )directive with no \'hint\' clause specified", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [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)})\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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)})\'", | ||
[ | [e]=p, | ||
[ | [a]="the context property \'(.*?)\' can be nested in the context selector \'(.*?)\' which is nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)\\((.*?)\\)\\}\\)\'", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="the context selector \'A\' can be nested in the context set \'B\'; try \'match(C={D...})\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="the context selector \'%0\' can be nested in the context set \'%1\'; try \'match(%1={%0%select{|(property)}2})\'", | ||
[ | [e]=p, | ||
[ | [a]="the context selector \'(.*?)\' can be nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)(?:|\\(property\\))\\}\\)\'", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="the ignored ... spans until here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="the ignored %select{set|selector|property}0 spans until here", | ||
[ | [e]=p, | ||
[ | [a]="the ignored (?:set|selector|property) spans until here", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'A\' is a context ... not a context ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' is a context %select{set|selector|property}1 not a context %select{set|selector|property}2", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' is a context (?:set|selector|property) not a context (?:set|selector|property)", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="context ... options are: A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="context %select{set|selector|property}0 options are: %1", | ||
[ | [e]=p, | ||
[ | [a]="context (?:set|selector|property) options are\\: (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="try \'match(A={BC})\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="try \'match(%0={%1%2})\'", | ||
[ | [e]=p, | ||
[ | [a]="try \'match\\((.*?)\\=\\{(.*?)(.*?)\\}\\)\'", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="the previous context ... \'A\' used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="the previous context %select{set|selector|property}0 \'%1\' used here", | ||
[ | [e]=p, | ||
[ | [a]="the previous context (?:set|selector|property) \'(.*?)\' used here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="explicit data sharing attribute requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="explicit data sharing attribute requested here", | ||
[ | [e]=p, | ||
[ | [a]="explicit data sharing attribute requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here", | ||
[ | [e]=p, | ||
[ | [a]="explicit data sharing attribute, data mapping attribute, or is_device_ptr clause requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' directive found here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' directive found here", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' directive found here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={Mb,1615397021,Ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump exits scope of OpenMP structured block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump exits scope of OpenMP structured block", | ||
[ | [e]=p, | ||
[ | [a]="jump exits scope of OpenMP structured block", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={hb,1582847864,ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="defined as A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="defined as %0", | ||
[ | [e]=p, | ||
[ | [a]="defined as (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="memory order clause \'A\' is specified here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="memory order clause \'%0\' is specified here", | ||
[ | [e]=p, | ||
[ | [a]="memory order clause \'(.*?)\' is specified here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="implicitly determined as A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="implicitly determined as %0", | ||
[ | [e]=p, | ||
[ | [a]="implicitly determined as (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="expected length on mapping of \'this\' array section expression to be \'1\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="expected length on mapping of \'this\' array section expression to be \'1\'", | ||
[ | [e]=p, | ||
[ | [a]="expected length on mapping of \'this\' array section expression to be \'1\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified", | ||
[ | [e]=p, | ||
[ | [a]="expected lower bound on mapping of \'this\' array section expression to be \'0\' or not specified", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="expected \'this\' subscript expression on map clause to be \'this[0]\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="expected \'this\' subscript expression on map clause to be \'this[0]\'", | ||
[ | [e]=p, | ||
[ | [a]="expected \'this\' subscript expression on map clause to be \'this\\[0\\]\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="loop step is expected to be ... due to this condition", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="loop step is expected to be %select{negative|positive}0 due to this condition", | ||
[ | [e]=p, | ||
[ | [a]="loop step is expected to be (?:negative|positive) due to this condition", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"}, | [i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="marked as \'declare variant\' here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="marked as \'declare variant\' here", | ||
[ | [e]=p, | ||
[ | [a]="marked as \'declare variant\' here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={Ob,1567434909,Pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="marked as \'device_type(A)\' here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="marked as \'device_type(%0)\' here", | ||
[ | [e]=p, | ||
[ | [a]="marked as \'device_type\\((.*?)\\)\' here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... outside teams construct here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{statement|directive}0 outside teams construct here", | ||
[ | [e]=p, | ||
[ | [a]="(?:statement|directive) outside teams construct here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."}, | [i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="nested teams construct here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="nested teams construct here", | ||
[ | [e]=p, | ||
[ | [a]="nested teams construct here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."}, | [i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'nowait\' clause is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'nowait\' clause is here", | ||
[ | [e]=p, | ||
[ | [a]="\'nowait\' clause is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'ordered\' clause...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'ordered\' clause%select{| with specified parameter}0", | ||
[ | [e]=p, | ||
[ | [a]="\'ordered\' clause(?:| with specified parameter)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="predefined trait \'A\' used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="predefined trait \'%0\' used here", | ||
[ | [e]=p, | ||
[ | [a]="predefined trait \'(.*?)\' used here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="......", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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\\?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous allocator is specified here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous allocator is specified here", | ||
[ | [e]=p, | ||
[ | [a]="previous allocator is specified here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' clause is specified here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' clause is specified here", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' clause is specified here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous \'critical\' region starts here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous \'critical\' region starts here", | ||
[ | [e]=p, | ||
[ | [a]="previous \'critical\' region starts here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous \'A\' directive used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous \'%0\' directive used here", | ||
[ | [e]=p, | ||
[ | [a]="previous \'(.*?)\' directive used here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={hb,1582847864,ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'reduction\' clause with \'inscan\' modifier is used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'reduction\' clause with \'inscan\' modifier is used here", | ||
[ | [e]=p, | ||
[ | [a]="\'reduction\' clause with \'inscan\' modifier is used here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'A\' clause used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' clause used here", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' clause used here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous clause with directive name modifier specified here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous clause with directive name modifier specified here", | ||
[ | [e]=p, | ||
[ | [a]="previous clause with directive name modifier specified here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previously marked as task_reduction with different reduction operation", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously marked as task_reduction with different reduction operation", | ||
[ | [e]=p, | ||
[ | [a]="previously marked as task_reduction with different reduction operation", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause."}, | [i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses OpenMP structured block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses OpenMP structured block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses OpenMP structured block", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={hb,1582847864,ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previously referenced here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously referenced here", | ||
[ | [e]=p, | ||
[ | [a]="previously referenced here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause"}, | [i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'A\' previously encountered here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' previously encountered here", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' previously encountered here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A clause previously used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 clause previously used here", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) clause previously used here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="predetermined as a firstprivate in a task construct here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="predetermined as a firstprivate in a task construct here", | ||
[ | [e]=p, | ||
[ | [a]="predetermined as a firstprivate in a task construct here", | ||
[ | [g]=m, | ||
[ | [h]=I, | ||
[i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause."}, | [i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previously declared \'A\' here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously declared \'%0\' here", | ||
[ | [e]=p, | ||
[ | [a]="previously declared \'(.*?)\' here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs"}, | [i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use -foperator-arrow-depth=N to increase \'operator->\' limit", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use -foperator-arrow-depth=N to increase \'operator->\' limit", | ||
[ | [e]=p, | ||
[ | [a]="use \\-foperator\\-arrow\\-depth\\=N to increase \'operator\\-\\>\' limit", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'operator->\' declared here produces an object of type A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'operator->\' declared here produces an object of type %0", | ||
[ | [e]=p, | ||
[ | [a]="\'operator\\-\\>\' declared here produces an object of type (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="(skipping A \'operator->\'B in backtrace)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="(skipping %0 \'operator->\'%s0 in backtrace)", | ||
[ | [e]=p, | ||
[ | [a]="\\(skipping (.*?) \'operator\\-\\>\'(.*?) in backtrace\\)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="parameter of overridden method is annotated with __attribute__((noescape))", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="parameter of overridden method is annotated with __attribute__((noescape))", | ||
[ | [e]=p, | ||
[ | [a]="parameter of overridden method is annotated with __attribute__\\(\\(noescape\\)\\)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."}, | [i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="overridden method is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="overridden method is here", | ||
[ | [e]=p, | ||
[ | [a]="overridden method is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="overridden virtual function is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="overridden virtual function is here", | ||
[ | [e]=p, | ||
[ | [a]="overridden virtual function is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="mark \'operator==\' as const or add a matching \'operator!=\' to resolve the ambiguity", | ||
[ | [e]=p, | ||
[ | [a]="mark \'operator\\=\\=\' as const or add a matching \'operator\\!\\=\' to resolve the ambiguity", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="ambiguous candidate function with reversed arguments", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="ambiguous candidate function with reversed arguments", | ||
[ | [e]=p, | ||
[ | [a]="ambiguous candidate function with reversed arguments", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={Ob,1567434909,Pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="ambiguity is between a regular call to this operator and a call with the argument order reversed", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="ambiguity is between a regular call to this operator and a call with the argument order reversed", | ||
[ | [e]=p, | ||
[ | [a]="ambiguity is between a regular call to this operator and a call with the argument order reversed", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate function with non-reversed arguments", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate function with non-reversed arguments", | ||
[ | [e]=p, | ||
[ | [a]="candidate function with non\\-reversed arguments", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="built-in candidate A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="built-in candidate %0", | ||
[ | [e]=p, | ||
[ | [a]="built\\-in candidate (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={Ob,1567434909,Pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate .........", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: requires... A argumentB, but C was provided", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: ... argument A, but no arguments were provided", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: cannot ... A ... B in C argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: \'this\' object is in A, but method expects object in B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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 (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={zc,1575504770,Ac}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: cannot implicitly convert argument of type A to B for ... under ARC", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: cannot ... ... A to ... B for C argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: no known conversion from A to B for ......", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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 &)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: cannot convert argument of incomplete type A to B for ......", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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 &)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: A argument (B) would lose ... qualifier...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: \'this\' argument has type A, but method is not marked ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: failed template argument deduction", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: failed template argument deduction", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: failed template argument deduction", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: ... argument (A) has ... ownership, but parameter has ... ownership", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: ... argument to A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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 (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: no overload of A matching B for C argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: ... argument (A) has ... ownership, but parameter has ... ownership", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: call to ... function from ... function", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"}, | [i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: expects an ... for ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={rb,1590001902,pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate ...... not viable: constraints not satisfied", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: deduced type A of ...B parameter does not match adjusted type C of ...argumentD", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)(.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ...... has been ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: disabled by AB", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: disabled by %0%1", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: disabled by (.*?)(.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate disabled: A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate disabled: %0", | ||
[ | [e]=p, | ||
[ | [a]="candidate disabled\\: (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."}, | [i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: requirement \'A\' was not satisfiedB", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: requirement \'%0\' was not satisfied%1", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: requirement \'(.*?)\' was not satisfied(.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="explicit ... is not a candidate...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="explicit %select{constructor|conversion function|deduction guide}0 is not a candidate%select{| (explicit specifier evaluates to true)}1", | ||
[ | [e]=p, | ||
[ | [a]="explicit (?:constructor|conversion function|deduction guide) is not a candidate(?:| \\(explicit specifier evaluates to true\\))", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: invalid explicitly-specified argument for template parameter A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: invalid explicitly-specified argument for template parameter %0", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: invalid explicitly\\-specified argument for template parameter (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: invalid explicitly-specified argument for A template parameter", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: invalid explicitly-specified argument for %ordinal0 template parameter", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: invalid explicitly\\-specified argument for (.*?) template parameter", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate address cannot be taken because parameter A has pass_object_size attribute", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate address cannot be taken because parameter %0 has pass_object_size attribute", | ||
[ | [e]=p, | ||
[ | [a]="candidate address cannot be taken because parameter (.*?) has pass_object_size attribute", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ... ignored: instantiation ... its own class type by value", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate %select{constructor|template}0 ignored: instantiation %select{takes|would take}0 its own class type by value", | ||
[ | [e]=p, | ||
[ | [a]="candidate (?:constructor|template) ignored\\: instantiation (?:takes|would take) its own class type by value", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate constructor ignored: cannot be used to construct an object in address space A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate constructor ignored: cannot be used to construct an object in address space %0", | ||
[ | [e]=p, | ||
[ | [a]="candidate constructor ignored\\: cannot be used to construct an object in address space (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: couldn\'t infer template argument A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: couldn\'t infer template argument %0", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: couldn\'t infer template argument (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: deduced too few arguments for expanded pack A; no argument for B expanded parameter in deduced argument pack C", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: deduced too few arguments for expanded pack %0; no argument for %ordinal1 expanded parameter in deduced argument pack %2", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: deduced too few arguments for expanded pack (.*?); no argument for (.*?) expanded parameter in deduced argument pack (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: deduced ... for parameter A (B vs. C)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: deduced %select{conflicting types|conflicting values|conflicting templates|packs of different lengths}0 for parameter %1%diff{ ($ vs. $)|}2,3", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: deduced (?:conflicting types|conflicting values|conflicting templates|packs of different lengths) for parameter (.*?)(?: \\((.*?) vs\\. (.*?)\\)|)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: deduced values of conflicting types for parameter A (B of type C vs. D of type E)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: deduced values (?:of conflicting types for parameter (.*?) \\((.*?) of type (.*?) vs\\. (.*?) of type (.*?)\\)|(.*?) and (.*?) of conflicting types for parameter (.*?))", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="constructor from base class A inherited here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="constructor from base class %0 inherited here", | ||
[ | [e]=p, | ||
[ | [a]="constructor from base class (.*?) inherited here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate ... ignored: inherited constructor cannot be used to ... object", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate %select{constructor|template}0 ignored: inherited constructor cannot be used to %select{copy|move}1 object", | ||
[ | [e]=p, | ||
[ | [a]="candidate (?:constructor|template) ignored\\: inherited constructor cannot be used to (?:copy|move) object", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: substitution exceeded maximum template instantiation depth", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: substitution exceeded maximum template instantiation depth", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: substitution exceeded maximum template instantiation depth", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: could not match A against B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: could not match %diff{$ against $|types}0,1", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: could not match (?:(.*?) against (.*?)|types)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: could not match A against B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: could not match %q0 against %q1", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: could not match (.*?) against (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: substitution failureAB", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: substitution failure%0%1", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: substitution failure(.*?)(.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: cannot deduce a type for A that would make B equal C", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: cannot deduce a type for %0 that would make %2 equal %1", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: cannot deduce a type for (.*?) that would make (.*?) equal (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="candidate template ignored: constraints not satisfiedA", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="candidate template ignored: constraints not satisfied%0", | ||
[ | [e]=p, | ||
[ | [a]="candidate template ignored\\: constraints not satisfied(.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"}, | [i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conversion candidate of type A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="conversion candidate of type %0", | ||
[ | [e]=p, | ||
[ | [a]="conversion candidate of type (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="conversion candidate A not viable: constraints not satisfied", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="conversion candidate %0 not viable: constraints not satisfied", | ||
[ | [e]=p, | ||
[ | [a]="conversion candidate (.*?) not viable\\: constraints not satisfied", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="remaining A candidateB omitted; pass -fshow-overloads=all to show them", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="remaining %0 candidate%s0 omitted; pass -fshow-overloads=all to show them", | ||
[ | [e]=p, | ||
[ | [a]="remaining (.*?) candidate(.*?) omitted; pass \\-fshow\\-overloads\\=all to show them", | ||
[ | [g]=m, | ||
[ | [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;"},{ | [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"]={ | ||
[ | [f]="declared with index A here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="declared with index %0 here", | ||
[ | [e]=p, | ||
[ | [a]="declared with index (.*?) here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="passing argument to parameter here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="passing argument to parameter here", | ||
[ | [e]=p, | ||
[ | [a]="passing argument to parameter here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="while substituting into concept arguments here; substitution failures not allowed in concept arguments", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="while substituting into concept arguments here; substitution failures not allowed in concept arguments", | ||
[ | [e]=p, | ||
[ | [a]="while substituting into concept arguments here; substitution failures not allowed in concept arguments", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="passing argument to parameter A here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="passing argument to parameter %0 here", | ||
[ | [e]=p, | ||
[ | [a]="passing argument to parameter (.*?) here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="parameter pack A declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="parameter pack %0 declared here", | ||
[ | [e]=p, | ||
[ | [a]="parameter pack (.*?) declared here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="parameter of type A is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="parameter of type %0 is declared here", | ||
[ | [e]=p, | ||
[ | [a]="parameter of type (.*?) is declared here", | ||
[ | [g]=m, | ||
[ | [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;"},{ | [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"]={ | ||
[ | [f]="A has been marked as being introduced in B C here, but the deployment target is D E", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 has been marked as being introduced in %1 %2 here, but the deployment target is %1 %3", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) has been marked as being introduced in (.*?) (.*?) here, but the deployment target is (.*?) (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note"}, | [i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="partial specialization matches A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="partial specialization matches %0", | ||
[ | [e]=p, | ||
[ | [a]="partial specialization matches (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="please rebuild precompiled header \'A\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="please rebuild precompiled header \'%0\'", | ||
[ | [e]=p, | ||
[ | [a]="please rebuild precompiled header \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' required by \'B\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' required by \'%1\'", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' required by \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="inline function performs a conversion which is forbidden in ARC", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="inline function performs a conversion which is forbidden in ARC", | ||
[ | [e]=p, | ||
[ | [a]="inline function performs a conversion which is forbidden in ARC", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="pointer A declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="pointer %0 declared here", | ||
[ | [e]=p, | ||
[ | [a]="pointer (.*?) declared here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div"}, | [i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="one possibility", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="one possibility", | ||
[ | [e]=p, | ||
[ | [a]="one possibility", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={Nc,1308178962,Cc}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="possible target for call", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="possible target for call", | ||
[ | [e]=p, | ||
[ | [a]="possible target for call", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="expanding this definition of A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="expanding this definition of %0", | ||
[ | [e]=p, | ||
[ | [a]="expanding this definition of (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="other definition of A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="other definition of %0", | ||
[ | [e]=p, | ||
[ | [a]="other definition of (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="did not find header \'A\' in framework \'B\' (loaded from \'C\')", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="did not find header \'%0\' in framework \'%1\' (loaded from \'%2\')", | ||
[ | [e]=p, | ||
[ | [a]="did not find header \'(.*?)\' in framework \'(.*?)\' \\(loaded from \'(.*?)\'\\)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="macro marked \'...\' here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="macro marked \'%select{deprecated|restrict_expansion|final}0\' here", | ||
[ | [e]=p, | ||
[ | [a]="macro marked \'(?:deprecated|restrict_expansion|final)\' here", | ||
[ | [g]=m, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="entering module \'A\' due to this pragma", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="entering module \'%0\' due to this pragma", | ||
[ | [e]=p, | ||
[ | [a]="entering module \'(.*?)\' due to this pragma", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="when applied to this declaration", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="when applied to this declaration", | ||
[ | [e]=p, | ||
[ | [a]="when applied to this declaration", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | [i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="omit the namespace to add attributes to the most-recently pushed attribute group", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="omit the namespace to add attributes to the most-recently pushed attribute group", | ||
[ | [e]=p, | ||
[ | [a]="omit the namespace to add attributes to the most\\-recently pushed attribute group", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="\'#pragma clang attribute push\' regions ends here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'#pragma clang attribute push\' regions ends here", | ||
[ | [e]=p, | ||
[ | [a]="\'\\#pragma clang attribute push\' regions ends here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | [i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use the GNU \'__attribute__\' syntax", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use the GNU \'__attribute__\' syntax", | ||
[ | [e]=p, | ||
[ | [a]="use the GNU \'__attribute__\' syntax", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="#pragma entered here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="#pragma entered here", | ||
[ | [e]=p, | ||
[ | [a]="\\#pragma entered here", | ||
[ | [g]=m, | ||
[ | [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);"},{ | [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"]={ | ||
[ | [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\')", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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\')", | ||
[ | [e]=p, | ||
[ | [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\'\\)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="previous \'#pragma pack\' directive that modifies alignment is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous \'#pragma pack\' directive that modifies alignment is here", | ||
[ | [e]=p, | ||
[ | [a]="previous \'\\#pragma pack\' directive that modifies alignment is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="did you intend to use \'#pragma pack (pop)\' instead of \'#pragma pack()\'?", | ||
[ | [e]=p, | ||
[ | [a]="did you intend to use \'\\#pragma pack \\(pop\\)\' instead of \'\\#pragma pack\\(\\)\'\\?", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="place parentheses around the A expression to evaluate it first", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="place parentheses around the %0 expression to evaluate it first", | ||
[ | [e]=p, | ||
[ | [a]="place parentheses around the (.*?) expression to evaluate it first", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="place parentheses around the \'?:\' expression to evaluate it first", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="place parentheses around the \'?:\' expression to evaluate it first", | ||
[ | [e]=p, | ||
[ | [a]="place parentheses around the \'\\?\\:\' expression to evaluate it first", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."}, | [i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="place parentheses around the \'A\' expression to silence this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="place parentheses around the \'%0\' expression to silence this warning", | ||
[ | [e]=p, | ||
[ | [a]="place parentheses around the \'(.*?)\' expression to silence this warning", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous module declaration is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous module declaration is here", | ||
[ | [e]=p, | ||
[ | [a]="previous module declaration is here", | ||
[ | [g]=m, | ||
[ | [h]=cc, | ||
[i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration."}, | [i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previously defined here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously defined here", | ||
[ | [e]=p, | ||
[ | [a]="previously defined here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="module loaded from \'A\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="module loaded from \'%0\'", | ||
[ | [e]=p, | ||
[ | [a]="module loaded from \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous declaration of class template partial specialization A is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous declaration of class template partial specialization %0 is here", | ||
[ | [e]=p, | ||
[ | [a]="previous declaration of class template partial specialization (.*?) is here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="previously declared \'A\' here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously declared \'%1\' here", | ||
[ | [e]=p, | ||
[ | [a]="previously declared \'(.*?)\' here", | ||
[ | [g]=m, | ||
[ | [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();"},{ | [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"]={ | ||
[ | [f]="previous attribute is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous attribute is here", | ||
[ | [e]=p, | ||
[ | [a]="previous attribute is here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"4c3db23d1c93",1335403563,"Reject cases like"}, | [i]={"4c3db23d1c93",1335403563,"Reject cases like"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A is a builtin with type B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 is a builtin with type %1", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) is a builtin with type (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 declared here", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) declared here", | ||
[ | [g]=m, | ||
[ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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"]={ | ||
[ | [f]="previous declaration is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous declaration is here", | ||
[ | [e]=p, | ||
[ | [a]="previous declaration is here", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [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]={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"]={ | ||
[ | [f]="previously declared as A here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously declared as %0 here", | ||
[ | [e]=p, | ||
[ | [a]="previously declared as (.*?) here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous default generic association is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous default generic association is here", | ||
[ | [e]=p, | ||
[ | [a]="previous default generic association is here", | ||
[ | [g]=m, | ||
[ | [h]=Q, | ||
[i]={"91147596414d",1302827748,"C1X: implement generic selections"}, | [i]={"91147596414d",1302827748,"C1X: implement generic selections"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous definition is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous definition is here", | ||
[ | [e]=p, | ||
[ | [a]="previous definition is here", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={ | [j]={ | ||
[1]={ | [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]={ | [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]={ | [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]={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]={ | [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"]={ | ||
[ | [f]="for type A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="for type %0", | ||
[ | [e]=p, | ||
[ | [a]="for type (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous explicit instantiation is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous explicit instantiation is here", | ||
[ | [e]=p, | ||
[ | [a]="previous explicit instantiation is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous initialization for field A is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous initialization for field %0 is here", | ||
[ | [e]=p, | ||
[ | [a]="previous initialization for field (.*?) is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous implicit declaration is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous implicit declaration is here", | ||
[ | [e]=p, | ||
[ | [a]="previous implicit declaration is here", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous initialization ...is here...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous initialization %select{|with side effects }0is here%select{| (side effects will not occur at run time)}0", | ||
[ | [e]=p, | ||
[ | [a]="previous initialization (?:|with side effects )is here(?:| \\(side effects will not occur at run time\\))", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous inheritance model specified here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous inheritance model specified here", | ||
[ | [e]=p, | ||
[ | [a]="previous inheritance model specified here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"}, | [i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previously defined as an alias for A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previously defined as an alias for %0", | ||
[ | [e]=p, | ||
[ | [a]="previously defined as an alias for (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous statement is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous statement is here", | ||
[ | [e]=p, | ||
[ | [a]="previous statement is here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="previous template specialization is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous template specialization is here", | ||
[ | [e]=p, | ||
[ | [a]="previous template specialization is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous use is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous use is here", | ||
[ | [e]=p, | ||
[ | [a]="previous use is here", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous uuid specified here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous uuid specified here", | ||
[ | [e]=p, | ||
[ | [a]="previous uuid specified here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids."}, | [i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="did you mean to call the A method?", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="did you mean to call the %0 method?", | ||
[ | [e]=p, | ||
[ | [a]="did you mean to call the (.*?) method\\?", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="while substituting prior template arguments into ... template parameterA B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="while substituting prior template arguments into %select{non-type|template}0 template parameter%1 %2", | ||
[ | [e]=p, | ||
[ | [a]="while substituting prior template arguments into (?:non\\-type|template) template parameter(.*?) (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use __attribute__((visibility(\"hidden\"))) attribute instead", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use __attribute__((visibility(\"hidden\"))) attribute instead", | ||
[ | [e]=p, | ||
[ | [a]="use __attribute__\\(\\(visibility\\(\"hidden\"\\)\\)\\) attribute instead", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="private module fragment begins here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="private module fragment begins here", | ||
[ | [e]=p, | ||
[ | [a]="private module fragment begins here", | ||
[ | [g]=m, | ||
[ | [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);"},{ | [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"]={ | ||
[ | [f]="module defined here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="module defined here", | ||
[ | [e]=p, | ||
[ | [a]="module defined here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="property A is declared ... here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="property %0 is declared %select{deprecated|unavailable|partial}1 here", | ||
[ | [e]=p, | ||
[ | [a]="property (.*?) is declared (?:deprecated|unavailable|partial) here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="property declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="property declared here", | ||
[ | [e]=p, | ||
[ | [a]="property declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="property synthesized here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="property synthesized here", | ||
[ | [e]=p, | ||
[ | [a]="property synthesized here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses setup of __block variable", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses setup of __block variable", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses setup of __block variable", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of variable with __attribute__((cleanup))", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of variable with __attribute__((cleanup))", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of variable with __attribute__\\(\\(cleanup\\)\\)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump enters controlled statement of consteval if", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump enters controlled statement of consteval if", | ||
[ | [e]=p, | ||
[ | [a]="jump enters controlled statement of consteval if", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={Mb,1615397021,Ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump enters controlled statement of constexpr if", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump enters controlled statement of constexpr if", | ||
[ | [e]=p, | ||
[ | [a]="jump enters controlled statement of constexpr if", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of catch block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of catch block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of catch block", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of try block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of try block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of try block", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump enters controlled statement of if available", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump enters controlled statement of if available", | ||
[ | [e]=p, | ||
[ | [a]="jump enters controlled statement of if available", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of variable of non-trivial C struct type", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of variable of non-trivial C struct type", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of variable of non\\-trivial C struct type", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses auto release push of @autoreleasepool block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses auto release push of @autoreleasepool block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses auto release push of @autoreleasepool block", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={Nc,1308178962,Cc}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of @catch block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of @catch block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of @catch block", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump enters Objective-C fast enumeration loop", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump enters Objective-C fast enumeration loop", | ||
[ | [e]=p, | ||
[ | [a]="jump enters Objective\\-C fast enumeration loop", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of @finally block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of @finally block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of @finally block", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of __strong variable", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of __strong variable", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of __strong variable", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | [i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of @synchronized block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of @synchronized block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of @synchronized block", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of @try block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of @try block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of @try block", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of __weak variable", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of __weak variable", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of __weak variable", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | [i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of __except block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of __except block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of __except block", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | [i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of __finally block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of __finally block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of __finally block", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | [i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of __try block", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of __try block", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of __try block", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | [i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="jump bypasses variable initialization", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses variable initialization", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses variable initialization", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of non-POD variable", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of non-POD variable", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of non\\-POD variable", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses variable with a non-trivial destructor", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses variable with a non-trivial destructor", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses variable with a non\\-trivial destructor", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of variable length array", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of variable length array", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of variable length array", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of VLA type alias", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of VLA type alias", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of VLA type alias", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="jump bypasses initialization of VLA typedef", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="jump bypasses initialization of VLA typedef", | ||
[ | [e]=p, | ||
[ | [a]="jump bypasses initialization of VLA typedef", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="protocol is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="protocol is declared here", | ||
[ | [e]=p, | ||
[ | [a]="protocol is declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="protocol A has no definition", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="protocol %0 has no definition", | ||
[ | [e]=p, | ||
[ | [a]="protocol (.*?) has no definition", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols"}, | [i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="protocol method is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="protocol method is here", | ||
[ | [e]=p, | ||
[ | [a]="protocol method is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="it could also be property ... declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [a]="it could also be property (?:of type (.*?)|without attribute \'(.*?)\'|with attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="qualified call to A::B is treated as a virtual call to C due to -fapple-kext", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="qualified call to %0::%1 is treated as a virtual call to %1 due to -fapple-kext", | ||
[ | [e]=p, | ||
[ | [a]="qualified call to (.*?)\\:\\:(.*?) is treated as a virtual call to (.*?) due to \\-fapple\\-kext", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="unimplemented pure virtual method A in B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="unimplemented pure virtual method %0 in %1", | ||
[ | [e]=p, | ||
[ | [a]="unimplemented pure virtual method (.*?) in (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."}, | [i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="add a variable name to declare a A initialized with B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="add a variable name to declare a %0 initialized with %1", | ||
[ | [e]=p, | ||
[ | [a]="add a variable name to declare a (.*?) initialized with (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="receiver is instance of class declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="receiver is instance of class declared here", | ||
[ | [e]=p, | ||
[ | [a]="receiver is instance of class declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="receiver expression is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="receiver expression is here", | ||
[ | [e]=p, | ||
[ | [a]="receiver expression is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="receiver is treated with \'id\' type for purpose of method lookup", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="receiver is treated with \'id\' type for purpose of method lookup", | ||
[ | [e]=p, | ||
[ | [a]="receiver is treated with \'id\' type for purpose of method lookup", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="default argument used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="default argument used here", | ||
[ | [e]=p, | ||
[ | [a]="default argument used here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'A\' included multiple times, additional include site here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' included multiple times, additional include site here", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' included multiple times, additional include site here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' included multiple times, additional include site in header from module \'B\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="\'%0\' included multiple times, additional include site in header from module \'%1\'", | ||
[ | [e]=p, | ||
[ | [a]="\'(.*?)\' included multiple times, additional include site in header from module \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... member declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{reference|pointer}0 member declared here", | ||
[ | [e]=p, | ||
[ | [a]="(?:reference|pointer) member declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... member A will never be initialized", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{const|reference}0 member %1 will never be initialized", | ||
[ | [e]=p, | ||
[ | [a]="(?:const|reference) member (.*?) will never be initialized", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A returns a reference", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 returns a reference", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) returns a reference", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="... template declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{class|type alias}0 template declared here", | ||
[ | [e]=p, | ||
[ | [a]="(?:class|type alias) template declared here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use \'static_cast\' to adjust the pointer correctly while ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use \'static_cast\' to adjust the pointer correctly while %select{upcasting|downcasting}0", | ||
[ | [e]=p, | ||
[ | [a]="use \'static_cast\' to adjust the pointer correctly while (?:upcasting|downcasting)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... method is explicitly declared \'instancetype\'...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{overridden|current}0 method is explicitly declared \'instancetype\'%select{| and is expected to return an instance of its class type}0", | ||
[ | [e]=p, | ||
[ | [a]="(?:overridden|current) method is explicitly declared \'instancetype\'(?:| and is expected to return an instance of its class type)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... method is part of the \'...\' method family...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... method A is assumed to return an instance of its receiver type (B)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{class|instance}0 method %1 is assumed to return an instance of its receiver type (%2)", | ||
[ | [e]=p, | ||
[ | [a]="(?:class|instance) method (.*?) is assumed to return an instance of its receiver type \\((.*?)\\)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="overridden method returns an instance of its class type", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="overridden method returns an instance of its class type", | ||
[ | [e]=p, | ||
[ | [a]="overridden method returns an instance of its class type", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="remove the call to \'A\' since unsigned values cannot be negative", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="remove the call to \'%0\' since unsigned values cannot be negative", | ||
[ | [e]=p, | ||
[ | [a]="remove the call to \'(.*?)\' since unsigned values cannot be negative", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="remove call to max function and unsigned zero argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="remove call to max function and unsigned zero argument", | ||
[ | [e]=p, | ||
[ | [a]="remove call to max function and unsigned zero argument", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="remove std::move call here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="remove std::move call here", | ||
[ | [e]=p, | ||
[ | [a]="remove std\\:\\:move call here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="remove parentheses to silence this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="remove parentheses to silence this warning", | ||
[ | [e]=p, | ||
[ | [a]="remove parentheses to silence this warning", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use function \'A\' instead", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use function \'%0\' instead", | ||
[ | [e]=p, | ||
[ | [a]="use function \'(.*?)\' instead", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="replace \'default\' with \'delete\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="replace \'default\' with \'delete\'", | ||
[ | [e]=p, | ||
[ | [a]="replace \'default\' with \'delete\'", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="while rewriting comparison as call to \'operator<=>\' declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="while rewriting comparison as call to \'operator<=>\' declared here", | ||
[ | [e]=p, | ||
[ | [a]="while rewriting comparison as call to \'operator\\<\\=\\>\' declared here", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={Ob,1567434909,Pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="repeated RISC-V \'interrupt\' attribute is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="repeated RISC-V \'interrupt\' attribute is here", | ||
[ | [e]=p, | ||
[ | [a]="repeated RISC\\-V \'interrupt\' attribute is here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"}, | [i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions", | ||
[ | [e]=p, | ||
[ | [a]="pass \\-fsafe\\-buffer\\-usage\\-suggestions to receive code hardening suggestions", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="in second definition, possible difference is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in second definition, possible difference is here", | ||
[ | [e]=p, | ||
[ | [a]="in second definition, possible difference is here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="... has been explicitly marked sentinel here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{function|method|block}0 has been explicitly marked sentinel here", | ||
[ | [e]=p, | ||
[ | [a]="(?:function|method|block) has been explicitly marked sentinel here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="declared here", | ||
[ | [e]=p, | ||
[ | [a]="declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic", | ||
[ | [e]=p, | ||
[ | [a]="if you supply your own aligned allocation functions, use \\-faligned\\-allocation to silence this diagnostic", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... A does not satisfy B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{and|because}0 %1 does not satisfy %2", | ||
[ | [e]=p, | ||
[ | [a]="(?:and|because) (.*?) does not satisfy (.*?)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="attempt to specialize declaration here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="attempt to specialize declaration here", | ||
[ | [e]=p, | ||
[ | [a]="attempt to specialize declaration here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="explicitly specialized declaration is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="explicitly specialized declaration is here", | ||
[ | [e]=p, | ||
[ | [a]="explicitly specialized declaration is here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="declare \'static\' if the ... is not intended to be used outside of this translation unit", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="declare \'static\' if the %select{variable|function}0 is not intended to be used outside of this translation unit", | ||
[ | [e]=p, | ||
[ | [a]="declare \'static\' if the (?:variable|function) is not intended to be used outside of this translation unit", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}"}, | [i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use array indexing to silence this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use array indexing to silence this warning", | ||
[ | [e]=p, | ||
[ | [a]="use array indexing to silence this warning", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="change size argument to be the size of the destination", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="change size argument to be the size of the destination", | ||
[ | [e]=p, | ||
[ | [a]="change size argument to be the size of the destination", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="change the argument to be the free space in the destination buffer minus the terminating null byte", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="change the argument to be the free space in the destination buffer minus the terminating null byte", | ||
[ | [e]=p, | ||
[ | [a]="change the argument to be the free space in the destination buffer minus the terminating null byte", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="did you mean ... here?", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="did you mean %select{struct|interface|class}0 here?", | ||
[ | [e]=p, | ||
[ | [a]="did you mean (?:struct|interface|class) here\\?", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="because substituted constraint expression is ill-formedA", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="because substituted constraint expression is ill-formed%0", | ||
[ | [e]=p, | ||
[ | [a]="because substituted constraint expression is ill\\-formed(.*?)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="use -analyzer-disable-all-checks to disable all static analyzer checkers", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use -analyzer-disable-all-checks to disable all static analyzer checkers", | ||
[ | [e]=p, | ||
[ | [a]="use \\-analyzer\\-disable\\-all\\-checks to disable all static analyzer checkers", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="parentheses are required around macro argument containing braced initializer list", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="parentheses are required around macro argument containing braced initializer list", | ||
[ | [e]=p, | ||
[ | [a]="parentheses are required around macro argument containing braced initializer list", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="add a deduction guide to suppress this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="add a deduction guide to suppress this warning", | ||
[ | [e]=p, | ||
[ | [a]="add a deduction guide to suppress this warning", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="class with specified objc_requires_property_definitions attribute is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="class with specified objc_requires_property_definitions attribute is declared here", | ||
[ | [e]=p, | ||
[ | [a]="class with specified objc_requires_property_definitions attribute is declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="surrounding namespace with visibility attribute ends here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="surrounding namespace with visibility attribute ends here", | ||
[ | [e]=p, | ||
[ | [a]="surrounding namespace with visibility attribute ends here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="surrounding namespace with visibility attribute starts here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="surrounding namespace with visibility attribute starts here", | ||
[ | [e]=p, | ||
[ | [a]="surrounding namespace with visibility attribute starts here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="parenthesize the second argument to silence", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="parenthesize the second argument to silence", | ||
[ | [e]=p, | ||
[ | [a]="parenthesize the second argument to silence", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="... to silence", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{parenthesize the third argument|cast the second argument to \'int\'}0 to silence", | ||
[ | [e]=p, | ||
[ | [a]="(?:parenthesize the third argument|cast the second argument to \'int\') to silence", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="conversion to ... type A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="conversion to %select{integral|enumeration}0 type %1", | ||
[ | [e]=p, | ||
[ | [a]="conversion to (?:integral|enumeration) type (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="tail call required by A attribute here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="tail call required by %0 attribute here", | ||
[ | [e]=p, | ||
[ | [a]="tail call required by (.*?) attribute here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="non-type template argument refers to ... here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="non-type template argument refers to %select{function|object}0 here", | ||
[ | [e]=p, | ||
[ | [a]="non\\-type template argument refers to (?:function|object) here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="non-type template argument refers here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="non-type template argument refers here", | ||
[ | [e]=p, | ||
[ | [a]="non\\-type template argument refers here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="template argument refers to function template A, here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="template argument refers to function template %0, here", | ||
[ | [e]=p, | ||
[ | [a]="template argument refers to function template (.*?), here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="class template A was explicitly specialized here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="class template %0 was explicitly specialized here", | ||
[ | [e]=p, | ||
[ | [a]="class template (.*?) was explicitly specialized here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of template class A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of template class %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of template class (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="class template A was instantiated here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="class template %0 was instantiated here", | ||
[ | [e]=p, | ||
[ | [a]="class template (.*?) was instantiated here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="template is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="template is declared here", | ||
[ | [e]=p, | ||
[ | [a]="template is declared here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... A declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{function template|class template|variable template|type alias template|template template parameter}0 %1 declared here", | ||
[ | [e]=p, | ||
[ | [a]="(?:function template|class template|variable template|type alias template|template template parameter) (.*?) declared here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | [i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="while checking a default template argument used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="while checking a default template argument used here", | ||
[ | [e]=p, | ||
[ | [a]="while checking a default template argument used here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of enumeration A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of enumeration %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of enumeration (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of exception specification for A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of exception specification for %0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of exception specification for (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="declared as a non-template here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="declared as a non-template here", | ||
[ | [e]=p, | ||
[ | [a]="declared as a non\\-template here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of member class A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of member class %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of member class (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of member function A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of member function %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of member function (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="template non-type parameter has a different type A in template argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="template non-type parameter has a different type %0 in template argument", | ||
[ | [e]=p, | ||
[ | [a]="template non\\-type parameter has a different type (.*?) in template argument", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous non-type template parameter with type A is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous non-type template parameter with type %0 is here", | ||
[ | [e]=p, | ||
[ | [a]="previous non\\-type template parameter with type (.*?) is here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="in instantiation of default member initializer A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of default member initializer %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of default member initializer (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="template parameter has a different kind in template argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="template parameter has a different kind in template argument", | ||
[ | [e]=p, | ||
[ | [a]="template parameter has a different kind in template argument", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="template parameter is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="template parameter is declared here", | ||
[ | [e]=p, | ||
[ | [a]="template parameter is declared here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [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);"},{ | [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"]={ | ||
[ | [f]="... template parameters in template template argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{too few|too many}0 template parameters in template template argument", | ||
[ | [e]=p, | ||
[ | [a]="(?:too few|too many) template parameters in template template argument", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous default template argument defined here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous default template argument defined here", | ||
[ | [e]=p, | ||
[ | [a]="previous default template argument defined here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous default template argument defined in module A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous default template argument defined in module %0", | ||
[ | [e]=p, | ||
[ | [a]="previous default template argument defined in module (.*?)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous ... parameter... declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous %select{template type|non-type template|template template}0 parameter%select{| pack}1 declared here", | ||
[ | [e]=p, | ||
[ | [a]="previous (?:template type|non\\-type template|template template) parameter(?:| pack) declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... parameter... does not match ... parameter... in template argument", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="previous template ... is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous template %select{declaration|template parameter}0 is here", | ||
[ | [e]=p, | ||
[ | [a]="previous template (?:declaration|template parameter) is here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use -ftemplate-depth=N to increase recursive template instantiation depth", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use -ftemplate-depth=N to increase recursive template instantiation depth", | ||
[ | [e]=p, | ||
[ | [a]="use \\-ftemplate\\-depth\\=N to increase recursive template instantiation depth", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="in instantiation of requirement here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of requirement here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of requirement here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of requirement parameters here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of requirement parameters here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of requirement parameters here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="in instantiation of static data member A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of static data member %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of static data member (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="in instantiation of template type alias A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of template type alias %0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of template type alias (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."}, | [i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="unnamed type used in template argument was declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="unnamed type used in template argument was declared here", | ||
[ | [e]=p, | ||
[ | [a]="unnamed type used in template argument was declared here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="in instantiation of variable template specialization A requested here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in instantiation of variable template specialization %q0 requested here", | ||
[ | [e]=p, | ||
[ | [a]="in instantiation of variable template specialization (.*?) requested here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="thread warning in function A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="thread warning in function %0", | ||
[ | [e]=p, | ||
[ | [a]="thread warning in function (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... has a ... exception specification", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{destructor|deallocator}0 has a %select{non-throwing|implicit non-throwing}1 exception specification", | ||
[ | [e]=p, | ||
[ | [a]="(?:destructor|deallocator) has a (?:non\\-throwing|implicit non\\-throwing) exception specification", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="function declared non-throwing here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="function declared non-throwing here", | ||
[ | [e]=p, | ||
[ | [a]="function declared non\\-throwing here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="required alignment of type A (B bytes) is larger than the supported alignment of C++ exception objects on this target (C bytes)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="required alignment of type %0 (%1 bytes) is larger than the supported alignment of C++ exception objects on this target (%2 bytes)", | ||
[ | [e]=p, | ||
[ | [a]="required alignment of type (.*?) \\((.*?) bytes\\) is larger than the supported alignment of C\\+\\+ exception objects on this target \\((.*?) bytes\\)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="AB in local locations, BB in locations loaded from AST files, for a total of CB (D% of available space)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0B in local locations, %1B in locations loaded from AST files, for a total of %2B (%3%% of available space)", | ||
[ | [e]=p, | ||
[ | [a]="(.*?)B in local locations, (.*?)B in locations loaded from AST files, for a total of (.*?)B \\((.*?)% of available space\\)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="... of first field is A bits", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{alignment|size}0 of first field is %1 bits", | ||
[ | [e]=p, | ||
[ | [a]="(?:alignment|size) of first field is (.*?) bits", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="definition of A is not complete until the closing \'}\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="definition of %0 is not complete until the closing \'}\'", | ||
[ | [e]=p, | ||
[ | [a]="definition of (.*?) is not complete until the closing \'\\}\'", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A is incomplete", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 is incomplete", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) is incomplete", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"ffa7dc379f2e",1422480686,"PR 17456"}, | [i]={"ffa7dc379f2e",1422480686,"PR 17456"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... \'A\' would be invalid: B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{and|because}0 \'%1\' would be invalid: %2", | ||
[ | [e]=p, | ||
[ | [a]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="... \'A\' would be invalid", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{and|because}0 \'%1\' would be invalid", | ||
[ | [e]=p, | ||
[ | [a]="(?:and|because) \'(.*?)\' would be invalid", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]=mc, | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... operand was implicitly converted to type A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{first|second}0 operand was implicitly converted to type %1", | ||
[ | [e]=p, | ||
[ | [a]="(?:first|second) operand was implicitly converted to type (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="did you mean to use \'.\' instead?", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="did you mean to use \'.\' instead?", | ||
[ | [e]=p, | ||
[ | [a]="did you mean to use \'\\.\' instead\\?", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="type is given name A for linkage purposes by this ... declaration", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="type is given name %0 for linkage purposes by this %select{typedef|alias}1 declaration", | ||
[ | [e]=p, | ||
[ | [a]="type is given name (.*?) for linkage purposes by this (?:typedef|alias) declaration", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="referenced member A is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="referenced member %0 is declared here", | ||
[ | [e]=p, | ||
[ | [a]="referenced member (.*?) is declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="referenced A is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="referenced %0 is declared here", | ||
[ | [e]=p, | ||
[ | [a]="referenced (.*?) is declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="did you mean to use \'\\u\'?", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="did you mean to use \'\\u\'?", | ||
[ | [e]=p, | ||
[ | [a]="did you mean to use \'\\\\u\'\\?", | ||
[ | [g]=m, | ||
[ | [h]=H, | ||
[i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234."}, | [i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="enclose A in ... check to silence this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="enclose %0 in %select{an @available|a __builtin_available}1 check to silence this warning", | ||
[ | [e]=p, | ||
[ | [a]="enclose (.*?) in (?:an @available|a __builtin_available) check to silence this warning", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="unimplemented constexpr lambda feature: A (coming soon!)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="unimplemented constexpr lambda feature: %0 (coming soon!)", | ||
[ | [e]=p, | ||
[ | [a]="unimplemented constexpr lambda feature\\: (.*?) \\(coming soon\\!\\)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="remove the ... is always ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="remove the %select{\'%1\' if its condition|condition if it}0 is always %select{false|true}2", | ||
[ | [e]=p, | ||
[ | [a]="remove the (?:\'(.*?)\' if its condition|condition if it) is always (?:false|true)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="during field initialization in ... constructor", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="during field initialization in %select{this|the implicit default}0 constructor", | ||
[ | [e]=p, | ||
[ | [a]="during field initialization in (?:this|the implicit default) constructor", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="uninitialized reference member is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="uninitialized reference member is here", | ||
[ | [e]=p, | ||
[ | [a]="uninitialized reference member is here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{uninitialized use occurs|variable is captured by block}0 here", | ||
[ | [e]=p, | ||
[ | [a]="(?:uninitialized use occurs|variable is captured by block) here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A released here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%0 released here", | ||
[ | [e]=p, | ||
[ | [a]="(.*?) released here", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={hb,1582847864,ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="(skipping A expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="(skipping %0 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)", | ||
[ | [e]=p, | ||
[ | [a]="\\(skipping (.*?) expansions in backtrace; use \\-fmacro\\-backtrace\\-limit\\=0 to see all\\)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="expanded from here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="expanded from here", | ||
[ | [e]=p, | ||
[ | [a]="expanded from here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="expanded from macro \'A\'", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="expanded from macro \'%0\'", | ||
[ | [e]=p, | ||
[ | [a]="expanded from macro \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="parentheses are required around this expression in a requires clause", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="parentheses are required around this expression in a requires clause", | ||
[ | [e]=p, | ||
[ | [a]="parentheses are required around this expression in a requires clause", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... here is not ...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [a]="(?:declaration|definition|default argument declared|explicit specialization declared|partial specialization declared) here is not (?:visible|reachable|reachable|reachable|reachable|reachable)", | ||
[ | [g]=m, | ||
[ | [h]=cc, | ||
[i]={ | [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"]={ | ||
[ | [f]="silence by adding parentheses to mark code as explicitly dead", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="silence by adding parentheses to mark code as explicitly dead", | ||
[ | [e]=p, | ||
[ | [a]="silence by adding parentheses to mark code as explicitly dead", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="used... here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="used%select{| in pointer arithmetic| in buffer access}0 here", | ||
[ | [e]=p, | ||
[ | [a]="used(?:| in pointer arithmetic| in buffer access) here", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="change type of A to \'...\' to preserve bounds information...", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [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", | ||
[ | [e]=p, | ||
[ | [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)", | ||
[ | [g]=m, | ||
[ | [h]=m, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use \'--\' to treat subsequent arguments as filenames", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use \'--\' to treat subsequent arguments as filenames", | ||
[ | [e]=p, | ||
[ | [a]="use \'\\-\\-\' to treat subsequent arguments as filenames", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="unguarded header; consider using #ifdef guards or #pragma once", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="unguarded header; consider using #ifdef guards or #pragma once", | ||
[ | [e]=p, | ||
[ | [a]="unguarded header; consider using \\#ifdef guards or \\#pragma once", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use non-reference type A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use non-reference type %0", | ||
[ | [e]=p, | ||
[ | [a]="use non\\-reference type (.*?)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use reference type A to prevent copying", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use reference type %0 to prevent copying", | ||
[ | [e]=p, | ||
[ | [a]="use reference type (.*?) to prevent copying", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use \'thread_local\' to allow this", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use \'thread_local\' to allow this", | ||
[ | [e]=p, | ||
[ | [a]="use \'thread_local\' to allow this", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use non-reference type A to make construction explicit or type B to prevent copying", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use non-reference type %0 to make construction explicit or type %1 to prevent copying", | ||
[ | [e]=p, | ||
[ | [a]="use non\\-reference type (.*?) to make construction explicit or type (.*?) to prevent copying", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="used here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="used here", | ||
[ | [e]=p, | ||
[ | [a]="used here", | ||
[ | [g]=m, | ||
[ | [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);"},{ | [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"]={ | ||
[ | [f]="used in initialization here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="used in initialization here", | ||
[ | [e]=p, | ||
[ | [a]="used in initialization here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="implicit default constructor suppressed by user-declared constructor", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="implicit default constructor suppressed by user-declared constructor", | ||
[ | [e]=p, | ||
[ | [a]="implicit default constructor suppressed by user\\-declared constructor", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="using", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="using", | ||
[ | [e]=p, | ||
[ | [a]="using", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="...using declaration", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{|previous }0using declaration", | ||
[ | [e]=p, | ||
[ | [a]="(?:|previous )using declaration", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use ... instead", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="use %select{an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable}0 instead", | ||
[ | [e]=p, | ||
[ | [a]="use (?:an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable) instead", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="conflicting declaration", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="conflicting declaration", | ||
[ | [e]=p, | ||
[ | [a]="conflicting declaration", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="target of using declaration", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="target of using declaration", | ||
[ | [e]=p, | ||
[ | [a]="target of using declaration", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="...using-enum declaration", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{|previous }0using-enum declaration", | ||
[ | [e]=p, | ||
[ | [a]="(?:|previous )using\\-enum declaration", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={ | [i]={Mb,1615397021,Ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="add \'typename\' to treat this using declaration as a type", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="add \'typename\' to treat this using declaration as a type", | ||
[ | [e]=p, | ||
[ | [a]="add \'typename\' to treat this using declaration as a type", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="valid target CPU values are: A", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="valid target CPU values are: %0", | ||
[ | [e]=p, | ||
[ | [a]="valid target CPU values are\\: (.*?)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="in value-initialization of type A here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="in value-initialization of type %0 here", | ||
[ | [e]=p, | ||
[ | [a]="in value\\-initialization of type (.*?) here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="variable A is declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="variable %0 is declared here", | ||
[ | [e]=p, | ||
[ | [a]="variable (.*?) is declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="variable A is... captured here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="variable %0 is%select{| explicitly}1 captured here", | ||
[ | [e]=p, | ||
[ | [a]="variable (.*?) is(?:| explicitly) captured here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="initialize the variable A to silence this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="initialize the variable %0 to silence this warning", | ||
[ | [e]=p, | ||
[ | [a]="initialize the variable (.*?) to silence this warning", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental"}, | [i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="previous declaration of variable template partial specialization is here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="previous declaration of variable template partial specialization is here", | ||
[ | [e]=p, | ||
[ | [a]="previous declaration of variable template partial specialization is here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]=mc, | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="%select{%1 is a virtual base class of base class %2 declared here|virtual base class %1 declared here}0", | ||
[ | [e]=p, | ||
[ | [a]="(?:(.*?) is a virtual base class of base class (.*?) declared here|virtual base class (.*?) declared here)", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="ambiguous marker \'A\' is defined here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="ambiguous marker \'%0\' is defined here", | ||
[ | [e]=p, | ||
[ | [a]="ambiguous marker \'(.*?)\' is defined here", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="variable length arrays are not supported for the current target", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="variable length arrays are not supported for the current target", | ||
[ | [e]=p, | ||
[ | [a]="variable length arrays are not supported for the current target", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="which delegates to", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="which delegates to", | ||
[ | [e]=p, | ||
[ | [a]="which delegates to", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="detected while default synthesizing properties in class implementation", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="detected while default synthesizing properties in class implementation", | ||
[ | [e]=p, | ||
[ | [a]="detected while default synthesizing properties in class implementation", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="widen this field to A bits to store all values of B", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="widen this field to %0 bits to store all values of %1", | ||
[ | [e]=p, | ||
[ | [a]="widen this field to (.*?) bits to store all values of (.*?)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="within field of type A declared here", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="within field of type %0 declared here", | ||
[ | [e]=p, | ||
[ | [a]="within field of type (.*?) declared here", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="replace expression with \'A\' ...to silence this warning", | ||
[ | [b]=n, | ||
[ | [c]=o, | ||
[ | [d]="replace expression with \'%0\' %select{|or use \'xor\' instead of \'^\' }1to silence this warning", | ||
[ | [e]=p, | ||
[ | [a]="replace expression with \'(.*?)\' (?:|or use \'xor\' instead of \'\\^\' )to silence this warning", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | [i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="null character(s) preserved in ... literal [-Wnull-character]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"null-character"}, | ||
[q]="null-character", | [q]="null-character", | ||
[ | [d]="null character(s) preserved in %select{char|string}0 literal", | ||
[ | [e]=u, | ||
[ | [a]="null character\\(s\\) preserved in (?:char|string) literal", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | [i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="null character ignored [-Wnull-character]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"null-character"}, | ||
[q]="null-character", | [q]="null-character", | ||
[ | [d]="null character ignored", | ||
[ | [e]=u, | ||
[ | [a]="null character ignored", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="non-virtual member function marked \'A\' hides virtual member ...", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="non-virtual member function marked \'%0\' hides virtual member %select{function|functions}1", | ||
[ | [e]=Yb, | ||
[ | [a]="non\\-virtual member function marked \'(.*?)\' hides virtual member (?:function|functions)", | ||
[ | [g]=m, | ||
[ | [h]=l, | ||
[i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func."}, | [i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="only virtual member functions can be marked \'A\'", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="only virtual member functions can be marked \'%0\'", | ||
[ | [e]=Yb, | ||
[ | [a]="only virtual member functions can be marked \'(.*?)\'", | ||
[ | [g]=m, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="disabled expansion of recursive macro [-Wdisabled-macro-expansion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"disabled-macro-expansion"}, | ||
[q]="disabled-macro-expansion", | [q]="disabled-macro-expansion", | ||
[ | [d]="disabled expansion of recursive macro", | ||
[ | [e]=u, | ||
[ | [a]="disabled expansion of recursive macro", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdisabled\\-macro\\-expansion[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning."}, | [i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... after #else", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="%select{#elif|#elifdef|#elifndef}0 after #else", | ||
[ | [e]=Yb, | ||
[ | [a]="(?:\\#elif|\\#elifdef|\\#elifndef) after \\#else", | ||
[ | [g]=m, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="... without #if", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="%select{#elif|#elifdef|#elifndef}0 without #if", | ||
[ | [e]=Yb, | ||
[ | [a]="(?:\\#elif|\\#elifdef|\\#elifndef) without \\#if", | ||
[ | [g]=m, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="#else after #else", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="#else after #else", | ||
[ | [e]=Yb, | ||
[ | [a]="\\#else after \\#else", | ||
[ | [g]=m, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="#else without #if", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="#else without #if", | ||
[ | [e]=Yb, | ||
[ | [a]="\\#else without \\#if", | ||
[ | [g]=m, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="A [-W#warnings]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"#warnings","cpp"}, | ||
[q]="#warnings", | [q]="#warnings", | ||
[ | [d]=Hc, | ||
[ | [e]=u, | ||
[ | [a]=Ic, | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-W\\#warnings[^\\]]*\\]", | ||
[ | [h]="User-Defined Issue", | ||
[i]={ | [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"]={ | ||
[ | [f]="the #__include_macros directive is only for internal use by -imacros", | ||
[ | [b]=vb, | ||
[ | [c]=ac, | ||
[ | [d]="the #__include_macros directive is only for internal use by -imacros", | ||
[ | [e]=Yb, | ||
[ | [a]="the \\#__include_macros directive is only for internal use by \\-imacros", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"include-next-absolute-path"}, | ||
[q]="include-next-absolute-path", | [q]="include-next-absolute-path", | ||
[ | [d]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", | ||
[ | [e]=u, | ||
[ | [a]="\\#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-absolute\\-path[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="#include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"include-next-outside-header"}, | ||
[q]="include-next-outside-header", | [q]="include-next-outside-header", | ||
[ | [d]="#include_next in primary source file; will search from start of include path", | ||
[ | [e]=u, | ||
[ | [a]="\\#include_next in primary source file; will search from start of include path", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-outside\\-header[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[f]="invalid string literal, ignoring final \'\\\'", | |||
[f | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="invalid string literal, ignoring final \'\\\'", | ||
[ | [e]=u, | ||
[i]={ | [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"]={ | ||
[ | [f]="macro is not used [-Wunused-macros]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"unused-macros"}, | ||
[q]="unused-macros", | [q]="unused-macros", | ||
[ | [d]="macro is not used", | ||
[ | [e]=u, | ||
[ | [a]="macro is not used", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wunused\\-macros[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-include-path]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"nonportable-include-path"}, | ||
[q]="nonportable-include-path", | [q]="nonportable-include-path", | ||
[ | [d]="non-portable path to file \'%0\'; specified path differs in case from file name on disk", | ||
[ | [e]=u, | ||
[ | [a]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-include\\-path[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-system-include-path]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"nonportable-system-include-path"}, | ||
[q]="nonportable-system-include-path", | [q]="nonportable-system-include-path", | ||
[ | [d]="non-portable path to file \'%0\'; specified path differs in case from file name on disk", | ||
[ | [e]=u, | ||
[ | [a]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-system\\-include\\-path[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="current file is older than dependency A", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="current file is older than dependency %0", | ||
[ | [e]=u, | ||
[i]={ | [a]="current file is older than dependency (.*?)", | ||
[j]={{ | [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"]={ | ||
[f]="poisoning existing macro", | |||
[f | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=ub, | [d]="poisoning existing macro", | ||
[ | [e]=u, | ||
[i]={ | [a]="poisoning existing macro", | ||
[j]={{ | [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"]={ | ||
[ | [f]="#pragma once in main file [-Wpragma-once-outside-header]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"pragma-once-outside-header"}, | ||
[q]="pragma-once-outside-header", | [q]="pragma-once-outside-header", | ||
[ | [d]="#pragma once in main file", | ||
[ | [e]=u, | ||
[ | [a]="\\#pragma once in main file", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wpragma\\-once\\-outside\\-header[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="#pragma system_header ignored in main file [-Wpragma-system-header-outside-header]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"pragma-system-header-outside-header"}, | ||
[q]="pragma-system-header-outside-header", | [q]="pragma-system-header-outside-header", | ||
[ | [d]="#pragma system_header ignored in main file", | ||
[ | [e]=u, | ||
[ | [a]="\\#pragma system_header ignored in main file", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wpragma\\-system\\-header\\-outside\\-header[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [i]={N,1236199783,M}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="generated arguments #A in round-trip: B [-Rround-trip-cc1-args]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"round-trip-cc1-args"}, | ||
[q]="round-trip-cc1-args", | [q]="round-trip-cc1-args", | ||
[ | [d]="generated arguments #%0 in round-trip: %1", | ||
[ | [e]=gb, | ||
[ | [a]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)", | ||
[ | [g]=m, | ||
[ | [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"]={ | ||
[ | [f]="A [-Rpass]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"pass"}, | ||
[q]="pass", | [q]="pass", | ||
[ | [d]=Hc, | ||
[ | [e]=gb, | ||
[ | [a]=Ic, | ||
[ | [g]=" \\[[^\\]]*\\-Rpass[^\\]]*\\]", | ||
[ | [h]=pc, | ||
[i]={"829b1700484d",1397667264,"Add support for optimization reports."}, | [i]={"829b1700484d",1397667264,"Add support for optimization reports."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A [-Rpass-analysis]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={vc}, | ||
[q]= | [q]=vc, | ||
[ | [d]=Hc, | ||
[ | [e]=gb, | ||
[ | [a]=Ic, | ||
[ | [g]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | ||
[ | [h]=pc, | ||
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."}, | [i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."}, | ||
[j]={{ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={vc}, | ||
[q]= | [q]=vc, | ||
[ | [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!", | ||
[ | [e]=gb, | ||
[ | [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\\!", | ||
[ | [g]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'. [-Rpass-analysis]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={vc}, | ||
[q]= | [q]=vc, | ||
[ | [d]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'.", | ||
[ | [e]=gb, | ||
[ | [a]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop or by providing the compiler option \'\\-ffast\\-math\'\\.", | ||
[ | [g]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A [-Rpass-missed]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"pass-missed"}, | ||
[q]="pass-missed", | [q]="pass-missed", | ||
[ | [d]=Hc, | ||
[ | [e]=gb, | ||
[ | [a]=Ic, | ||
[ | [g]=" \\[[^\\]]*\\-Rpass\\-missed[^\\]]*\\]", | ||
[ | [h]=pc, | ||
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."}, | [i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A [-Rremark-backend-plugin]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"remark-backend-plugin"}, | ||
[q]="remark-backend-plugin", | [q]="remark-backend-plugin", | ||
[ | [d]=Hc, | ||
[ | [e]=gb, | ||
[ | [a]=Ic, | ||
[ | [g]=" \\[[^\\]]*\\-Rremark\\-backend\\-plugin[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="building module \'A\' as \'B\' [-Rmodule-build]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={Sb}, | ||
[q]= | [q]=Sb, | ||
[ | [d]="building module \'%0\' as \'%1\'", | ||
[ | [e]=gb, | ||
[ | [a]="building module \'(.*?)\' as \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[ | [h]=m, | ||
[i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark"}, | [i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="finished building module \'A\' [-Rmodule-build]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={Sb}, | ||
[q]= | [q]=Sb, | ||
[ | [d]="finished building module \'%0\'", | ||
[ | [e]=gb, | ||
[ | [a]="finished building module \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="importing module \'A\'... from \'B\' [-Rmodule-import]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"module-import"}, | ||
[q]="module-import", | [q]="module-import", | ||
[ | [d]="importing module \'%0\'%select{| into \'%3\'}2 from \'%1\'", | ||
[ | [e]=gb, | ||
[ | [a]="importing module \'(.*?)\'(?:| into \'(.*?)\') from \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-import[^\\]]*\\]", | ||
[ | [h]="AST Deserialization Issue", | ||
[i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import"}, | [i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="locking \'A\' to build module \'B\' [-Rmodule-lock]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"module-lock"}, | ||
[q]="module-lock", | [q]="module-lock", | ||
[ | [d]="locking \'%0\' to build module \'%1\'", | ||
[ | [e]=gb, | ||
[ | [a]="locking \'(.*?)\' to build module \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-lock[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="could not acquire lock file for module \'A\': B [-Rmodule-build]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={Sb}, | ||
[q]= | [q]=Sb, | ||
[ | [d]="could not acquire lock file for module \'%0\': %1", | ||
[ | [e]=gb, | ||
[ | [a]="could not acquire lock file for module \'(.*?)\'\\: (.*?)", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="timed out waiting to acquire lock file for module \'A\' [-Rmodule-build]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={Sb}, | ||
[q]= | [q]=Sb, | ||
[ | [d]="timed out waiting to acquire lock file for module \'%0\'", | ||
[ | [e]=gb, | ||
[ | [a]="timed out waiting to acquire lock file for module \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="treating #... as an import of module \'A\' [-Rmodule-include-translation]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"module-include-translation"}, | ||
[q]="module-include-translation", | [q]="module-include-translation", | ||
[ | [d]="treating #%select{include|import|include_next|__include_macros}0 as an import of module \'%1\'", | ||
[ | [e]=gb, | ||
[ | [a]="treating \\#(?:include|import|include_next|__include_macros) as an import of module \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rmodule\\-include\\-translation[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="search path used: \'A\' [-Rsearch-path-usage]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"search-path-usage"}, | ||
[q]="search-path-usage", | [q]="search-path-usage", | ||
[ | [d]="search path used: \'%0\'", | ||
[ | [e]=gb, | ||
[ | [a]="search path used\\: \'(.*?)\'", | ||
[ | [g]=" \\[[^\\]]*\\-Rsearch\\-path\\-usage[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="-fsanitize-address-field-padding applied to A [-Rsanitize-address]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"sanitize-address"}, | ||
[q]="sanitize-address", | [q]="sanitize-address", | ||
[ | [d]="-fsanitize-address-field-padding applied to %0", | ||
[ | [e]=gb, | ||
[ | [a]="\\-fsanitize\\-address\\-field\\-padding applied to (.*?)", | ||
[ | [g]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="-fsanitize-address-field-padding ignored for A because it ... [-Rsanitize-address]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [B]=false, | ||
[ | [r]={"sanitize-address"}, | ||
[q]="sanitize-address", | [q]="sanitize-address", | ||
[ | [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", | ||
[ | [e]=gb, | ||
[ | [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)", | ||
[ | [g]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="source manager location address space usage: [-Rsloc-usage]", | ||
[ | [b]=db, | ||
[ | [c]=fb, | ||
[ | [r]={"sloc-usage"}, | ||
[q]="sloc-usage", | [q]="sloc-usage", | ||
[ | [d]="source manager location address space usage:", | ||
[ | [e]=gb, | ||
[ | [a]="source manager location address space usage\\:", | ||
[ | [g]=" \\[[^\\]]*\\-Rsloc\\-usage[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="trigraph converted to \'A\' character [-Wtrigraphs]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,mb,Nb}, | ||
[ | [q]=Nb, | ||
[i]={ | [d]="trigraph converted to \'%0\' character", | ||
[j]={{ | [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"]={ | ||
[ | [f]="trigraph ends block comment [-Wtrigraphs]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [r]={U,bb,mb,Nb}, | ||
[ | [q]=Nb, | ||
[i]={ | [d]="trigraph ends block comment", | ||
[j]={{ | [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"]={ | ||
[ | [f]="trigraph ignored [-Wtrigraphs]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [r]={U,bb,mb,Nb}, | ||
[ | [q]=Nb, | ||
[i]={ | [d]="trigraph ignored", | ||
[j]={{ | [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"]={ | ||
[ | [f]="ignored trigraph would end block comment [-Wtrigraphs]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [r]={U,bb,mb,Nb}, | ||
[ | [q]=Nb, | ||
[i]={ | [d]="ignored trigraph would end block comment", | ||
[j]={{ | [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"]={ | ||
[ | [f]="-O4 is equivalent to -O3 [-Wdeprecated]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Cb}, | ||
[ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"absolute-value"}, | ||
[q]="absolute-value", | [q]="absolute-value", | ||
[ | [d]="absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value", | ||
[ | [e]=u, | ||
[ | [a]="absolute value function (.*?) given an argument of type (.*?) but has parameter of type (.*?) which may cause truncation of value", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="abstract class is marked \'...\' [-Wabstract-final-class]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"abstract-final-class"}, | ||
[q]="abstract-final-class", | [q]="abstract-final-class", | ||
[ | [d]="abstract class is marked \'%select{final|sealed}0\'", | ||
[ | [e]=u, | ||
[ | [a]="abstract class is marked \'(?:final|sealed)\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wabstract\\-final\\-class[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes."}, | [i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="initializer for virtual base class A of abstract class B will never be used [-Wabstract-vbase-init]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"abstract-vbase-init"}, | ||
[q]="abstract-vbase-init", | [q]="abstract-vbase-init", | ||
[ | [d]="initializer for virtual base class %0 of abstract class %1 will never be used", | ||
[ | [e]=u, | ||
[ | [a]="initializer for virtual base class (.*?) of abstract class (.*?) will never be used", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wabstract\\-vbase\\-init[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:"}, | [i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="access declarations are deprecated; use using declarations instead [-Wdeprecated]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | [r]={Cb}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="type of property A does not match type of accessor B", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="type of property %0 does not match type of accessor %1", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="acquiring A \'B\' requires negative capability \'C\' [-Wthread-safety-negative]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"thread-safety-negative"}, | ||
[q]="thread-safety-negative", | [q]="thread-safety-negative", | ||
[ | [d]="acquiring %0 \'%1\' requires negative capability \'%2\'", | ||
[ | [e]=u, | ||
[ | [a]="acquiring (.*?) \'(.*?)\' requires negative capability \'(.*?)\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-negative[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A \'B\' must be acquired before \'C\' [-Wthread-safety-analysis]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="Cycle in acquired_before/after dependencies, starting with \'A\' [-Wthread-safety-analysis]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="operator \'A\' has lower precedence than \'B\'; \'C\' will be evaluated first [-Wshift-op-parentheses]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,"parentheses","shift-op-parentheses"}, | ||
[q]="shift-op-parentheses", | [q]="shift-op-parentheses", | ||
[ | [d]="operator \'%0\' has lower precedence than \'%1\'; \'%1\' will be evaluated first", | ||
[ | [e]=u, | ||
[ | [a]="operator \'(.*?)\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wshift\\-op\\-parentheses[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"bool-conversion","bool-conversions",Kb,Jb,"undefined-bool-conversion"}, | ||
[q]="undefined-bool-conversion", | [q]="undefined-bool-conversion", | ||
[ | [d]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", | ||
[ | [e]=u, | ||
[ | [a]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,mb,fc,"tautological-undefined-compare"}, | ||
[q]="tautological-undefined-compare", | [q]="tautological-undefined-compare", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="... will always resolve to A even if weak definition of B is overridden [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... will not be in section \'A\' but in the same section as the ... [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="requested alignment is less than minimum alignment of A for type B [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="requested alignment is less than minimum alignment of %1 for type %0", | ||
[j]={{ | [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"]={ | ||
[ | [f]="... to 1 byte is ... [-Wtautological-compare]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,mb,fc}, | ||
[ | [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"]={ | ||
[ | [f]="requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"non-power-of-two-alignment"}, | ||
[q]="non-power-of-two-alignment", | [q]="non-power-of-two-alignment", | ||
[ | [d]="requested alignment is not a power of 2", | ||
[ | [e]=u, | ||
[ | [a]="requested alignment is not a power of 2", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnon\\-power\\-of\\-two\\-alignment[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"alloca"}, | ||
[q]="alloca", | [q]="alloca", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [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", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Walloca[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="second argument to __builtin_alloca_with_align is supposed to be in bits [-Walloca-with-align-alignof]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"alloca-with-align-alignof"}, | ||
[q]="alloca-with-align-alignof", | [q]="alloca-with-align-alignof", | ||
[ | [d]="second argument to __builtin_alloca_with_align is supposed to be in bits", | ||
[ | [e]=u, | ||
[ | [a]="second argument to __builtin_alloca_with_align is supposed to be in bits", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Walloca\\-with\\-align\\-alignof[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined [-Walways-inline-coroutine]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"always-inline-coroutine","coroutine"}, | ||
[q]="always-inline-coroutine", | [q]="always-inline-coroutine", | ||
[ | [d]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined", | ||
[ | [e]=u, | ||
[ | [a]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Walways\\-inline\\-coroutine[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="multiple suitable A functions for B; no \'operator delete\' function will be invoked if initialization throws an exception [-Wambiguous-delete]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"ambiguous-delete"}, | ||
[q]="ambiguous-delete", | [q]="ambiguous-delete", | ||
[ | [d]="multiple suitable %0 functions for %1; no \'operator delete\' function will be invoked if initialization throws an exception", | ||
[ | [e]=u, | ||
[ | [a]="multiple suitable (.*?) functions for (.*?); no \'operator delete\' function will be invoked if initialization throws an exception", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-delete[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"deprecated-static-analyzer-flag"}, | ||
[q]="deprecated-static-analyzer-flag", | [q]="deprecated-static-analyzer-flag", | ||
[ | [d]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error.", | ||
[ | [e]=u, | ||
[ | [a]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\.", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"deprecated-static-analyzer-flag"}, | ||
[q]="deprecated-static-analyzer-flag", | [q]="deprecated-static-analyzer-flag", | ||
[ | [d]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error. Use \'%2\' instead.", | ||
[ | [e]=u, | ||
[ | [a]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\. Use \'(.*?)\' instead\\.", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\' [-Winterrupt-service-routine]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"interrupt-service-routine"}, | ||
[q]="interrupt-service-routine", | [q]="interrupt-service-routine", | ||
[ | [d]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'", | ||
[ | [e]=u, | ||
[ | [a]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Winterrupt\\-service\\-routine[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'A\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"arc-bridge-casts-disallowed-in-nonarc"}, | ||
[q]="arc-bridge-casts-disallowed-in-nonarc", | [q]="arc-bridge-casts-disallowed-in-nonarc", | ||
[ | [d]="\'%0\' casts have no effect when not using ARC", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' casts have no effect when not using ARC", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Warc\\-bridge\\-casts\\-disallowed\\-in\\-nonarc[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="ARC ... lifetime qualifier on return type is ignored [-Wignored-qualifiers]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={m,U,Mc,"ignored-qualifiers"}, | ||
[q]="ignored-qualifiers", | [q]="ignored-qualifiers", | ||
[ | [d]="ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", | ||
[ | [e]=u, | ||
[ | [a]="ARC (?:unused|__unsafe_unretained|__strong|__weak|__autoreleasing) lifetime qualifier on return type is ignored", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="assigning ... to a weak ...; object will be released after assignment [-Warc-unsafe-retained-assign]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Dc,wc}, | ||
[ | [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"]={ | ||
[ | [f]="... this A call is a pointer to ownership-qualified type B [-Warc-non-pod-memaccess]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Dc,"arc-non-pod-memaccess"}, | ||
[q]="arc-non-pod-memaccess", | [q]="arc-non-pod-memaccess", | ||
[ | [d]="%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", | ||
[ | [e]=u, | ||
[ | [a]="(?:destination for|source of) this (.*?) call is a pointer to ownership\\-qualified type (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Warc\\-non\\-pod\\-memaccess[^\\]]*\\]", | ||
[ | [h]=qc, | ||
[i]={ | [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"]={ | ||
[ | [f]="performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leaks]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"arc-performSelector-leaks"}, | ||
[q]="arc-performSelector-leaks", | [q]="arc-performSelector-leaks", | ||
[ | [d]="performSelector may cause a leak because its selector is unknown", | ||
[ | [e]=u, | ||
[ | [a]="performSelector may cause a leak because its selector is unknown", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Warc\\-performSelector\\-leaks[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [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", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [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", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Warc\\-maybe\\-repeated\\-use\\-of\\-weak[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"arc-repeated-use-of-weak"}, | ||
[q]="arc-repeated-use-of-weak", | [q]="arc-repeated-use-of-weak", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [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", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Warc\\-repeated\\-use\\-of\\-weak[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="capturing A strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Dc,"arc-retain-cycles"}, | ||
[q]="arc-retain-cycles", | [q]="arc-retain-cycles", | ||
[ | [d]="capturing %0 strongly in this block is likely to lead to a retain cycle", | ||
[ | [e]=u, | ||
[ | [a]="capturing (.*?) strongly in this block is likely to lead to a retain cycle", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Warc\\-retain\\-cycles[^\\]]*\\]", | ||
[ | [h]="ARC Retain Cycle", | ||
[i]={ | [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"]={ | ||
[ | [f]="assigning retained object to ... ...; object will be released after assignment [-Warc-unsafe-retained-assign]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Dc,wc}, | ||
[ | [q]=wc, | ||
[i]={ | [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"]={ | ||
[ | [f]="assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | [r]={Dc,wc}, | ||
[ | [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"]={ | ||
[ | [f]="method parameter of type A with no explicit ownership [-Wexplicit-ownership-type]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"explicit-ownership-type"}, | ||
[q]="explicit-ownership-type", | [q]="explicit-ownership-type", | ||
[ | [d]="method parameter of type %0 with no explicit ownership", | ||
[ | [e]=u, | ||
[ | [a]="method parameter of type (.*?) with no explicit ownership", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-ownership\\-type[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[f]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", | |||
[f | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", | ||
[ | [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"]={ | ||
[ | [f]="argument value A is outside the valid range [B, C] [-Wargument-outside-range]", | ||
[ | [b]=vb, | ||
[ | [c]=Gc, | ||
[ | [r]={"argument-outside-range"}, | ||
[q]="argument-outside-range", | [q]="argument-outside-range", | ||
[ | [d]="argument value %0 is outside the valid range [%1, %2]", | ||
[ | [e]=Lc, | ||
[ | [a]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]", | ||
[ | [g]=" \\[[^\\]]*\\-Wargument\\-outside\\-range[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="argument value A will result in undefined behaviour [-Wargument-undefined-behaviour]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"argument-undefined-behaviour"}, | ||
[q]="argument-undefined-behaviour", | [q]="argument-undefined-behaviour", | ||
[ | [d]="argument value %0 will result in undefined behaviour", | ||
[ | [e]=u, | ||
[ | [a]="argument value (.*?) will result in undefined behaviour", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wargument\\-undefined\\-behaviour[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [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"]={ | ||
[ | [f]="... ... type A with ... type B [-Wenum-float-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Kb,tc,"enum-float-conversion",Jb}, | ||
[q]="enum-float-conversion", | [q]="enum-float-conversion", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [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 (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wenum\\-float\\-conversion[^\\]]*\\]", | ||
[ | [h]=hc, | ||
[i]={ | [i]={zc,1575504770,Ac}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... ... type A with ... type B is deprecated [-Wdeprecated-enum-float-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Kb,Cb,"deprecated-enum-float-conversion",tc,"enum-float-conversion",Jb}, | ||
[q]="deprecated-enum-float-conversion", | [q]="deprecated-enum-float-conversion", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [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", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-float\\-conversion[^\\]]*\\]", | ||
[ | [h]=Wb, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) [-Wanon-enum-enum-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"anon-enum-enum-conversion"}, | ||
[q]="anon-enum-enum-conversion", | [q]="anon-enum-enum-conversion", | ||
[ | [d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wanon\\-enum\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={zc,1575504770,Ac}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-anon-enum-enum-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"anon-enum-enum-conversion",Cb,"deprecated-anon-enum-enum-conversion"}, | ||
[q]="deprecated-anon-enum-enum-conversion", | [q]="deprecated-anon-enum-enum-conversion", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-anon\\-enum\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [h]=Wb, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) [-Wenum-enum-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Kb,tc,"enum-enum-conversion",Jb}, | ||
[q]="enum-enum-conversion", | [q]="enum-enum-conversion", | ||
[ | [d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wenum\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [h]=hc, | ||
[i]={ | [i]={zc,1575504770,Ac}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-enum-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Kb,Cb,"deprecated-enum-enum-conversion",tc,"enum-enum-conversion",Jb}, | ||
[q]="deprecated-enum-enum-conversion", | [q]="deprecated-enum-enum-conversion", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [h]=Wb, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wextra[^\\]]*\\]", | [r]={m,U,Mc}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="array index A is past the end of the array (that has type B...) [-Warray-bounds]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={ic}, | ||
[ | [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"]={ | ||
[ | [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]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={ic}, | ||
[ | [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"]={ | ||
[ | [f]="array index A is before the beginning of the array [-Warray-bounds]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={ic}, | ||
[ | [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"]={ | ||
[ | [f]="ignored asm label \'A\' on automatic variable", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="ignored asm label \'%0\' on automatic variable", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"asm","asm-operand-widths"}, | ||
[q]="asm-operand-widths", | [q]="asm-operand-widths", | ||
[ | [d]="value size does not match register size specified by the constraint and modifier", | ||
[ | [e]=u, | ||
[ | [a]="value size does not match register size specified by the constraint and modifier", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wasm\\-operand\\-widths[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="requested alignment must be A bytes or smaller; maximum alignment assumed [-Wbuiltin-assume-aligned-alignment]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"builtin-assume-aligned-alignment"}, | ||
[q]="builtin-assume-aligned-alignment", | [q]="builtin-assume-aligned-alignment", | ||
[ | [d]="requested alignment must be %0 bytes or smaller; maximum alignment assumed", | ||
[ | [e]=u, | ||
[ | [a]="requested alignment must be (.*?) bytes or smaller; maximum alignment assumed", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-assume\\-aligned\\-alignment[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [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;"},{ | [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"]={ | ||
[ | [f]="unknown assumption string \'A\'; attribute is potentially ignored [-Wunknown-assumption]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"unknown-assumption"}, | ||
[q]="unknown-assumption", | [q]="unknown-assumption", | ||
[ | [d]="unknown assumption string \'%0\'; attribute is potentially ignored", | ||
[ | [e]=u, | ||
[ | [a]="unknown assumption string \'(.*?)\'; attribute is potentially ignored", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-assumption[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={rb,1590001902,pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="unknown assumption string \'A\' may be misspelled; attribute is potentially ignored, did you mean \'B\'? [-Wmisspelled-assumption]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"misspelled-assumption"}, | ||
[q]="misspelled-assumption", | [q]="misspelled-assumption", | ||
[ | [d]="unknown assumption string \'%0\' may be misspelled; attribute is potentially ignored, did you mean \'%1\'?", | ||
[ | [e]=u, | ||
[ | [a]="unknown assumption string \'(.*?)\' may be misspelled; attribute is potentially ignored, did you mean \'(.*?)\'\\?", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wmisspelled\\-assumption[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={rb,1590001902,pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="the argument to A has side effects that will be discarded [-Wassume]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"assume"}, | ||
[q]="assume", | [q]="assume", | ||
[ | [d]="the argument to %0 has side effects that will be discarded", | ||
[ | [e]=u, | ||
[ | [a]="the argument to (.*?) has side effects that will be discarded", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wassume[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="... does not guard availability here; use if (...) instead [-Wunsupported-availability-guard]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"unsupported-availability-guard"}, | ||
[q]="unsupported-availability-guard", | [q]="unsupported-availability-guard", | ||
[ | [d]="%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", | ||
[ | [e]=u, | ||
[ | [a]="(?:@available|__builtin_available) does not guard availability here; use if \\((?:@available|__builtin_available)\\) instead", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-availability\\-guard[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules [-Watimport-in-framework-header]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"atimport-in-framework-header"}, | ||
[q]="atimport-in-framework-header", | [q]="atimport-in-framework-header", | ||
[ | [d]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules", | ||
[ | [e]=u, | ||
[ | [a]="use of \'@import\' in framework header is discouraged, including this header requires \\-fmodules", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Watimport\\-in\\-framework\\-header[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead [-Wdeprecated-declarations]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Cb,"deprecated-declarations"}, | ||
[q]="deprecated-declarations", | [q]="deprecated-declarations", | ||
[ | [d]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead", | ||
[ | [e]=u, | ||
[ | [a]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"atomic-implicit-seq-cst"}, | ||
[q]="atomic-implicit-seq-cst", | [q]="atomic-implicit-seq-cst", | ||
[ | [d]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary", | ||
[ | [e]=u, | ||
[ | [a]="implicit use of sequentially\\-consistent atomic may incur stronger memory barriers than necessary", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Watomic\\-implicit\\-seq\\-cst[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]", | ||
[ | [b]=vb, | ||
[ | [c]=Gc, | ||
[ | [r]={"atomic-access"}, | ||
[q]="atomic-access", | [q]="atomic-access", | ||
[ | [d]="accessing a member of an atomic structure or union is undefined behavior", | ||
[ | [e]=Lc, | ||
[ | [a]="accessing a member of an atomic structure or union is undefined behavior", | ||
[ | [g]=" \\[[^\\]]*\\-Watomic\\-access[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="memory order argument to atomic operation is invalid [-Watomic-memory-ordering]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"atomic-memory-ordering"}, | ||
[q]="atomic-memory-ordering", | [q]="atomic-memory-ordering", | ||
[ | [d]="memory order argument to atomic operation is invalid", | ||
[ | [e]=u, | ||
[ | [a]="memory order argument to atomic operation is invalid", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Watomic\\-memory\\-ordering[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="misaligned atomic operation may incur significant performance penalty; the expected alignment (A bytes) exceeds the actual alignment (B bytes) [-Watomic-alignment]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"atomic-alignment"}, | ||
[q]="atomic-alignment", | [q]="atomic-alignment", | ||
[ | [d]="misaligned atomic operation may incur significant performance penalty; the expected alignment (%0 bytes) exceeds the actual alignment (%1 bytes)", | ||
[ | [e]=u, | ||
[ | [a]="misaligned atomic operation may incur significant performance penalty; the expected alignment \\((.*?) bytes\\) exceeds the actual alignment \\((.*?) bytes\\)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="large atomic operation may incur significant performance penalty; the access size (A bytes) exceeds the max lock-free size (B bytes) [-Watomic-alignment]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"atomic-alignment"}, | ||
[q]="atomic-alignment", | [q]="atomic-alignment", | ||
[ | [d]="large atomic operation may incur significant performance penalty; the access size (%0 bytes) exceeds the max lock-free size (%1 bytes)", | ||
[ | [e]=u, | ||
[ | [a]="large atomic operation may incur significant performance penalty; the access size \\((.*?) bytes\\) exceeds the max lock\\-free size \\((.*?) bytes\\)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="writable atomic property A cannot pair a synthesized ... with a user defined ... [-Watomic-property-with-user-defined-accessor]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"atomic-property-with-user-defined-accessor"}, | ||
[q]="atomic-property-with-user-defined-accessor", | [q]="atomic-property-with-user-defined-accessor", | ||
[ | [d]="writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", | ||
[ | [e]=u, | ||
[ | [a]="writable atomic property (.*?) cannot pair a synthesized (?:getter|setter) with a user defined (?:getter|setter)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Watomic\\-property\\-with\\-user\\-defined\\-accessor[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'abi_tag\' attribute on ... namespace ignored [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="consumed analysis attribute is attached to member of class A which isn\'t marked as consumable [-Wconsumed]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"consumed"}, | ||
[q]="consumed", | [q]="consumed", | ||
[ | [d]="consumed analysis attribute is attached to member of class %0 which isn\'t marked as consumable", | ||
[ | [e]=u, | ||
[ | [a]="consumed analysis attribute is attached to member of class (.*?) which isn\'t marked as consumable", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute."}, | [i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute cannot be applied to this declaration [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute cannot be applied to this declaration", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute cannot be applied to a ... with no parameters [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute cannot be applied to a %select{function|method}1 with no parameters", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute argument must be a string literal specifying a Swift function name", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute for getter must not have any parameters besides \'self:\'", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute has invalid identifier for the ... name [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute has invalid identifier for the %select{base|context|parameter}1 name", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute is missing parameter label clause [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute is missing parameter label clause", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute cannot specify more than one \'self:\' parameter [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute cannot specify more than one \'self:\' parameter", | ||
[j]={{ | [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"]={ | ||
[ | [f]="too ... parameters in the signature specified by the A attribute (expected B; got C) [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="too %select{few|many}0 parameters in the signature specified by the %1 attribute (expected %2; got %3)", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute for setter must have one parameter for new value [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute for setter must have one parameter for new value", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute for \'subscript\' getter cannot have a \'newValue:\' parameter [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute for \'subscript\' getter cannot have a \'newValue:\' parameter", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute for \'subscript\' must ... [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute for \'subscript\' must %select{be a getter or setter|have at least one parameter|have a \'self:\' parameter}1", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute for \'subscript\' setter must have a \'newValue:\' parameter [-Wswift-name-attribute]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={T}, | ||
[ | [q]=T, | ||
[i]={ | [d]="%0 attribute for \'subscript\' setter must have a \'newValue:\' parameter", | ||
[j]={{ | [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"]={ | ||
[ | [f]="multiple identical address spaces specified for type [-Wduplicate-decl-specifier]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"duplicate-decl-specifier"}, | ||
[q]="duplicate-decl-specifier", | [q]="duplicate-decl-specifier", | ||
[ | [d]="multiple identical address spaces specified for type", | ||
[ | [e]=u, | ||
[ | [a]="multiple identical address spaces specified for type", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="attribute A after definition is ignored [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute parameter B is negative and will be ignored [-Wcuda-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"cuda-compat"}, | ||
[q]="cuda-compat", | [q]="cuda-compat", | ||
[ | [d]="%0 attribute parameter %1 is negative and will be ignored", | ||
[ | [e]=u, | ||
[ | [a]="(.*?) attribute parameter (.*?) is negative and will be ignored", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage", | ||
[j]={{ | [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"]={ | ||
[ | [f]="propagating dll attribute to ... base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"unsupported-dll-base-class-template"}, | ||
[q]="unsupported-dll-base-class-template", | [q]="unsupported-dll-base-class-template", | ||
[ | [d]="propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", | ||
[ | [e]=u, | ||
[ | [a]="propagating dll attribute to (?:already instantiated|explicitly specialized) base class template without dll attribute is not supported", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-dll\\-base\\-class\\-template[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="redeclaration of A should not add B attribute [-Wdll-attribute-on-redeclaration]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"dll-attribute-on-redeclaration"}, | ||
[q]="dll-attribute-on-redeclaration", | [q]="dll-attribute-on-redeclaration", | ||
[ | [d]="redeclaration of %q0 should not add %q1 attribute", | ||
[ | [e]=u, | ||
[ | [a]="redeclaration of (.*?) should not add (.*?) attribute", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdll\\-attribute\\-on\\-redeclaration[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"dllexport-explicit-instantiation-decl"}, | ||
[q]="dllexport-explicit-instantiation-decl", | [q]="dllexport-explicit-instantiation-decl", | ||
[ | [d]="explicit instantiation declaration should not be \'dllexport\'", | ||
[ | [e]=u, | ||
[ | [a]="explicit instantiation declaration should not be \'dllexport\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdllexport\\-explicit\\-instantiation\\-decl[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'dllexport\' attribute ignored on explicit instantiation definition [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="definition of dllimport static field [-Wdllimport-static-field-def]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"dllimport-static-field-def"}, | ||
[q]="dllimport-static-field-def", | [q]="dllimport-static-field-def", | ||
[ | [d]="definition of dllimport static field", | ||
[ | [e]=u, | ||
[ | [a]="definition of dllimport static field", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdllimport\\-static\\-field\\-def[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="attribute A has no effect when annotating an \'if ...\' statement [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="attribute %0 has no effect when annotating an \'if %select{constexpr|consteval}1\' statement", | ||
[j]={{ | [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"]={ | ||
[ | [f]="attribute A has no effect when annotating an infinite loop [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [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"]={ | ||
[ | [f]="A attribute can only be applied to instance variables or properties [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute ignored [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[ | [d]="%0 attribute ignored", | ||
[ | [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"]={ | ||
[ | [f]="A attribute ignored for field of type B [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="%0 attribute ignored for field of type %1", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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"]={ | ||
[ | [f]="A attribute is ignored because B is not a function pointer [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="%0 attribute is ignored because %1 is not a function pointer", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute ignored on inline function [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute ignored on a non-definition declaration [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="%0 attribute ignored on a non-definition declaration", | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'A\' attribute cannot be specified on a definition [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' is not a valid builtin name for B [-Winvalid-no-builtin-names]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"invalid-no-builtin-names"}, | ||
[q]="invalid-no-builtin-names", | [q]="invalid-no-builtin-names", | ||
[ | [d]="\'%0\' is not a valid builtin name for %1", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' is not a valid builtin name for (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-no\\-builtin\\-names[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"}, | [i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="attribute A ignored, because it is not attached to a declaration [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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"]={ | ||
[ | [f]="\'nonnull\' attribute applied to function with no pointer arguments [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="\'nonnull\' attribute applied to function with no pointer arguments", | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute ignored when parsing type [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="GCC does not allow A attribute in this position on a function definition [-Wgcc-compat]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={uc}, | ||
[ | [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"]={ | ||
[ | [f]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang [-Wattribute-packed-for-bitfield]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"attribute-packed-for-bitfield"}, | ||
[q]="attribute-packed-for-bitfield", | [q]="attribute-packed-for-bitfield", | ||
[ | [d]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", | ||
[ | [e]=u, | ||
[ | [a]="\'packed\' attribute was ignored on bit\\-fields with single\\-byte alignment in older versions of GCC and Clang", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wattribute\\-packed\\-for\\-bitfield[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute only applies to a pointer or reference (B is invalid) [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute only applies to... pointer arguments [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="attribute declaration must precede definition [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="target does not support \'protected\' visibility; using \'default\' [-Wunsupported-visibility]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"unsupported-visibility"}, | ||
[q]="unsupported-visibility", | [q]="unsupported-visibility", | ||
[ | [d]="target does not support \'protected\' visibility; using \'default\'", | ||
[ | [e]=u, | ||
[ | [a]="target does not support \'protected\' visibility; using \'default\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-visibility[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute only applies to return values that are pointers [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A attribute only applies to return values that are pointers or references [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="#pragma A(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"microsoft","microsoft-drectve-section"}, | ||
[q]="microsoft-drectve-section", | [q]="microsoft-drectve-section", | ||
[ | [d]="#pragma %0(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead", | ||
[ | [e]=u, | ||
[ | [a]="\\#pragma (.*?)\\(\"\\.drectve\"\\) has undefined behavior, use \\#pragma comment\\(linker, \\.\\.\\.\\) instead", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-drectve\\-section[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="section attribute is specified on redeclared variable [-Wsection]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"section"}, | ||
[q]="section", | [q]="section", | ||
[ | [d]="section attribute is specified on redeclared variable", | ||
[ | [e]=u, | ||
[ | [a]="section attribute is specified on redeclared variable", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. "}, | [i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. "}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'sentinel\' attribute requires named arguments [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'sentinel\' attribute only supported for variadic ... [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="\'sentinel\' attribute only supported for variadic %select{functions|blocks}0", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A attribute argument not supported: B [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[ | [d]="%0 attribute argument not supported: %1", | ||
[ | [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"]={ | ||
[ | [f]="A attribute argument \'B\' not supported on a global variable [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="%0 attribute argument \'%1\' not supported on a global variable", | ||
[j]={{ | [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"]={ | ||
[ | [f]="unknown visibility A [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="unknown visibility %0", | ||
[j]={{ | [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"]={ | ||
[ | [f]="attribute A cannot be applied to ... without return value [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="__weak attribute cannot be specified on a field declaration [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="__weak attribute cannot be specified on a field declaration", | ||
[j]={{ | [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"]={ | ||
[ | [f]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A... only applies to ... [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[r]={K,A}, | |||
[e]= | [q]=A, | ||
[ | [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", | ||
[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"]={ | ||
[ | [f]="A... only applies to B [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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\";"},{ | [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"]={ | ||
[ | [f]="conflicting attributes A are ignored [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [q]=A, | ||
[i]={ | [d]="conflicting attributes %0 are ignored", | ||
[j]={{ | [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"]={ | ||
[ | [f]="property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"atomic-properties","implicit-atomic-properties"}, | ||
[q]="implicit-atomic-properties", | [q]="implicit-atomic-properties", | ||
[ | [d]="property is assumed atomic when auto-synthesizing the property", | ||
[ | [e]=u, | ||
[ | [a]="property is assumed atomic when auto\\-synthesizing the property", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"}, | [i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="readonly IBOutlet property A when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"readonly-iboutlet-property"}, | ||
[q]="readonly-iboutlet-property", | [q]="readonly-iboutlet-property", | ||
[ | [d]="readonly IBOutlet property %0 when auto-synthesized may not work correctly with \'nib\' loader", | ||
[ | [e]=u, | ||
[ | [a]="readonly IBOutlet property (.*?) when auto\\-synthesized may not work correctly with \'nib\' loader", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wreadonly\\-iboutlet\\-property[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"c++0x-compat","c++11-compat","c++11-compat-pedantic"}, | ||
[q]="c++11-compat", | [q]="c++11-compat", | ||
[ | [d]="\'auto\' storage class specifier is redundant and incompatible with C++11", | ||
[ | [e]=u, | ||
[ | [a]="\'auto\' storage class specifier is redundant and incompatible with C\\+\\+11", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="auto property synthesis will not synthesize property A declared in protocol B [-Wobjc-protocol-property-synthesis]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-protocol-property-synthesis"}, | ||
[q]="objc-protocol-property-synthesis", | [q]="objc-protocol-property-synthesis", | ||
[ | [d]="auto property synthesis will not synthesize property %0 declared in protocol %1", | ||
[ | [e]=u, | ||
[ | [a]="auto property synthesis will not synthesize property (.*?) declared in protocol (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-property\\-synthesis[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'auto\' deduced as \'id\' in declaration of A [-Wauto-var-id]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"auto-var-id"}, | ||
[q]="auto-var-id", | [q]="auto-var-id", | ||
[ | [d]="\'auto\' deduced as \'id\' in declaration of %0", | ||
[ | [e]=u, | ||
[ | [a]="\'auto\' deduced as \'id\' in declaration of (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wauto\\-var\\-id[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="auto property synthesis will not synthesize property A; it will be implemented by its superclass, use @dynamic to acknowledge intention [-Wobjc-property-synthesis]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-property-synthesis"}, | ||
[q]="objc-property-synthesis", | [q]="objc-property-synthesis", | ||
[ | [d]="auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", | ||
[ | [e]=u, | ||
[ | [a]="auto property synthesis will not synthesize property (.*?); it will be implemented by its superclass, use @dynamic to acknowledge intention", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="autosynthesized property A will use ... instance variable B, not existing instance variable C [-Wobjc-autosynthesis-property-ivar-name-match]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-autosynthesis-property-ivar-name-match"}, | ||
[q]="objc-autosynthesis-property-ivar-name-match", | [q]="objc-autosynthesis-property-ivar-name-match", | ||
[ | [d]="autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", | ||
[ | [e]=u, | ||
[ | [a]="autosynthesized property (.*?) will use (?:|synthesized) instance variable (.*?), not existing instance variable (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-autosynthesis\\-property\\-ivar\\-name\\-match[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'unavailable\' availability overrides all other availability information [-Wavailability]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={tb}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={tb}, | ||
[ | [q]=tb, | ||
[i]={ | [d]="Fuchsia API Level prohibits specifying a minor or sub-minor version", | ||
[j]={{ | [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"]={ | ||
[ | [f]="ignoring availability attribute ... [-Wavailability]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={tb}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="only \'unavailable\' and \'deprecated\' are supported for Swift availability [-Wavailability]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [r]={tb}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="unknown platform A in availability macro [-Wavailability]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={tb}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="feature cannot be ... in A version B before it was ... in version C; attribute ignored [-Wavailability]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={tb}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="AVX vector ... of type A without \'B\' enabled changes the ABI [-Wpsabi]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"psabi"}, | ||
[q]="psabi", | [q]="psabi", | ||
[ | [d]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI", | ||
[ | [e]=u, | ||
[ | [a]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wpsabi[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="illegal character encoding in character literal [-Winvalid-source-encoding]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"invalid-source-encoding"}, | ||
[q]="invalid-source-encoding", | [q]="invalid-source-encoding", | ||
[ | [d]="illegal character encoding in character literal", | ||
[ | [e]=u, | ||
[ | [a]="illegal character encoding in character literal", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... from A to B changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"incompatible-pointer-types","incompatible-pointer-types-discards-qualifiers"}, | ||
[q]="incompatible-pointer-types-discards-qualifiers", | [q]="incompatible-pointer-types-discards-qualifiers", | ||
[ | [d]="%select{reinterpret_cast|C-style cast}0 from %1 to %2 changes address space of nested pointers", | ||
[ | [e]=u, | ||
[ | [a]="(?:reinterpret_cast|C\\-style cast) from (.*?) to (.*?) changes address space of nested pointers", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={Ab,1576809732,xb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="cast from function call of type A to non-matching type B [-Wbad-function-cast]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"bad-function-cast"}, | ||
[q]="bad-function-cast", | [q]="bad-function-cast", | ||
[ | [d]="cast from function call of type %0 to non-matching type %1", | ||
[ | [e]=u, | ||
[ | [a]="cast from function call of type (.*?) to non\\-matching type (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbad\\-function\\-cast[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="receiver type A is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"receiver-expr"}, | ||
[q]="receiver-expr", | [q]="receiver-expr", | ||
[ | [d]="receiver type %0 is not \'id\' or interface pointer, consider casting it to \'id\'", | ||
[ | [e]=u, | ||
[ | [a]="receiver type (.*?) is not \'id\' or interface pointer, consider casting it to \'id\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-expr[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="illegal character encoding in string literal [-Winvalid-source-encoding]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"invalid-source-encoding"}, | ||
[q]="invalid-source-encoding", | [q]="invalid-source-encoding", | ||
[ | [d]="illegal character encoding in string literal", | ||
[ | [e]=u, | ||
[ | [a]="illegal character encoding in string literal", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="base class A is uninitialized when used here to access B [-Wuninitialized]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,mb,"uninitialized"}, | ||
[q]="uninitialized", | [q]="uninitialized", | ||
[ | [d]="base class %0 is uninitialized when used here to access %q1", | ||
[ | [e]=u, | ||
[ | [a]="base class (.*?) is uninitialized when used here to access (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="binding reference member A to stack allocated ... B [-Wdangling-field]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"dangling","dangling-field"}, | ||
[q]="dangling-field", | [q]="dangling-field", | ||
[ | [d]="binding reference member %0 to stack allocated %select{variable|parameter}2 %1", | ||
[ | [e]=u, | ||
[ | [a]="binding reference member (.*?) to stack allocated (?:variable|parameter) (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="binding dereferenced null pointer to reference has undefined behavior [-Wnull-dereference]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"null-dereference"}, | ||
[q]="null-dereference", | [q]="null-dereference", | ||
[ | [d]="binding dereferenced null pointer to reference has undefined behavior", | ||
[ | [e]=u, | ||
[ | [a]="binding dereferenced null pointer to reference has undefined behavior", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="bit-field A is not wide enough to store all enumerators of B [-Wbitfield-enum-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"bitfield-enum-conversion",Kb,Jb}, | ||
[q]="bitfield-enum-conversion", | [q]="bitfield-enum-conversion", | ||
[ | [d]="bit-field %0 is not wide enough to store all enumerators of %1", | ||
[ | [e]=u, | ||
[ | [a]="bit\\-field (.*?) is not wide enough to store all enumerators of (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="width of bit-field A (B bits) exceeds the width of its type; value will be truncated to C bitD [-Wbitfield-width]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"bitfield-width"}, | ||
[q]="bitfield-width", | [q]="bitfield-width", | ||
[ | [d]="width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", | ||
[ | [e]=u, | ||
[ | [a]="width of bit\\-field (.*?) \\((.*?) bits\\) exceeds the width of its type; value will be truncated to (.*?) bit(.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-width[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"}, | [i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use of bitwise \'A\' with boolean operands [-Wbitwise-instead-of-logical]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={U,bb,"bitwise-instead-of-logical","bool-operation",mb}, | ||
[q]="bitwise-instead-of-logical", | [q]="bitwise-instead-of-logical", | ||
[ | [d]="use of bitwise \'%0\' with boolean operands", | ||
[ | [e]=u, | ||
[ | [a]="use of bitwise \'(.*?)\' with boolean operands", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-instead\\-of\\-logical[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [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"]={ | ||
[ | [f]="bitwise negation of a boolean expression... did you mean logical negation? [-Wbool-operation]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={U,bb,"bool-operation",mb}, | ||
[q]="bool-operation", | [q]="bool-operation", | ||
[ | [d]="bitwise negation of a boolean expression%select{;| always evaluates to \'true\';}0 did you mean logical negation?", | ||
[ | [e]=u, | ||
[ | [a]="bitwise negation of a boolean expression(?:;| always evaluates to \'true\';) did you mean logical negation\\?", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbool\\-operation[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [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"]={ | ||
[ | [f]="\'A\' within \'B\' [-Wbitwise-op-parentheses]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={U,bb,"bitwise-op-parentheses","parentheses"}, | ||
[q]="bitwise-op-parentheses", | [q]="bitwise-op-parentheses", | ||
[ | [d]="\'%0\' within \'%1\'", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' within \'(.*?)\'", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-op\\-parentheses[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"block-capture-autoreleasing"}, | ||
[q]="block-capture-autoreleasing", | [q]="block-capture-autoreleasing", | ||
[ | [d]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs", | ||
[ | [e]=u, | ||
[ | [a]="block captures an autoreleasing out\\-parameter, which may result in use\\-after\\-free bugs", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wblock\\-capture\\-autoreleasing[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="attribute A ignored, because it cannot be applied to omitted return type [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' qualifier on omitted return type B has no effect [-Wignored-qualifiers]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={m,U,Mc,"ignored-qualifiers"}, | ||
[q]="ignored-qualifiers", | [q]="ignored-qualifiers", | ||
[ | [d]="\'%0\' qualifier on omitted return type %1 has no effect", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' qualifier on omitted return type (.*?) has no effect", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="switch condition has boolean value [-Wswitch-bool]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,"switch-bool"}, | ||
[q]="switch-bool", | [q]="switch-bool", | ||
[ | [d]="switch condition has boolean value", | ||
[ | [e]=u, | ||
[ | [a]="switch condition has boolean value", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wswitch\\-bool[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan."}, | [i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="braces around ...initializer [-Wbraced-scalar-init]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"braced-scalar-init"}, | ||
[q]="braced-scalar-init", | [q]="braced-scalar-init", | ||
[ | [d]="braces around %select{scalar |}0initializer", | ||
[ | [e]=u, | ||
[ | [a]="braces around (?:scalar |)initializer", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbraced\\-scalar\\-init[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | [r]={uc}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' will always overflow; destination buffer has size B, but size argument is C [-Wbuiltin-memcpy-chk-size]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"builtin-memcpy-chk-size"}, | ||
[q]="builtin-memcpy-chk-size", | [q]="builtin-memcpy-chk-size", | ||
[ | [d]="\'%0\' will always overflow; destination buffer has size %1, but size argument is %2", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-memcpy\\-chk\\-size[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="use of unknown builtin A [-Wimplicit-function-declaration]", | ||
[ | [b]=vb, | ||
[ | [c]=Gc, | ||
[ | [r]={U,bb,"implicit","implicit-function-declaration",mb}, | ||
[q]="implicit-function-declaration", | [q]="implicit-function-declaration", | ||
[ | [d]="use of unknown builtin %0", | ||
[ | [e]=Lc, | ||
[ | [a]="use of unknown builtin (.*?)", | ||
[ | [g]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="\'...\' as the only parameter of a function is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="\'\\.\\.\\.\' as the only parameter of a function is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="\'_Static_assert\' with no message is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="\'_Static_assert\' with no message is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="\'_Static_assert\' with no message is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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"]={ | ||
[ | [f]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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);"},{ | [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"]={ | ||
[ | [f]="digit separators are incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="digit separators are incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="digit separators are incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [h]=H, | ||
[i]={"e44831005905",1615551663,"Add support for digit separators in C2x."}, | [i]={"e44831005905",1615551663,"Add support for digit separators in C2x."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="use of an empty initializer is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="use of an empty initializer is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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"]={ | ||
[ | [f]="\'A\' is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="\'%0\' is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="label at end of compound statement is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="label at end of compound statement is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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"]={ | ||
[ | [f]="universal character name referring to a control character is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="universal character name referring to a control character is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="universal character name referring to a control character is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="specifying character \'A\' with a universal character name is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="specifying character \'%0\' with a universal character name is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="specifying character \'(.*?)\' with a universal character name is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="use of a \'#...\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="#warning is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={V,zb}, | ||
[q]=V, | [q]=V, | ||
[ | [d]="#warning is incompatible with C standards before C2x", | ||
[ | [e]=u, | ||
[ | [a]="\\#warning is incompatible with C standards before C2x", | ||
[ | [g]=yb, | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="\'A\' is a keyword in C2x [-Wc2x-compat]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"c2x-compat"}, | ||
[q]="c2x-compat", | [q]="c2x-compat", | ||
[ | [d]="\'%0\' is a keyword in C2x", | ||
[ | [e]=u, | ||
[ | [a]="\'(.*?)\' is a keyword in C2x", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wc2x\\-compat[^\\]]*\\]", | ||
[ | [h]=H, | ||
[i]={ | [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"]={ | ||
[ | [f]="... is incompatible with C99 [-Wc99-compat]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="unicode literals are incompatible with C99 [-Wc99-compat]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | [B]=false, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="\'A\' is a keyword in C99 [-Wc99-compat]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={oc}, | ||
[i]={ | [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"]={ | ||
[f]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only", | |||
[f | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only", | ||
[ | [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"]={ | ||
[ | [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]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"call-to-pure-virtual-from-ctor-dtor"}, | ||
[q]="call-to-pure-virtual-from-ctor-dtor", | [q]="call-to-pure-virtual-from-ctor-dtor", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="call to pure virtual member function (.*?) has undefined behavior; overrides of (.*?) in subclasses are not available in the (?:constructor|destructor) of (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcall\\-to\\-pure\\-virtual\\-from\\-ctor\\-dtor[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="too ... arguments in call to A", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="too %select{few|many}0 arguments in call to %1", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Eb}, | ||
[ | [q]=Eb, | ||
[i]={ | [d]="%0 parameter marked \'called_once\' is called twice", | ||
[j]={{ | [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"]={ | ||
[ | [f]="...A parameter marked \'called_once\' is never called [-Wcalled-once-parameter]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Eb}, | ||
[ | [q]=Eb, | ||
[i]={ | [d]="%select{|captured }1%0 parameter marked \'called_once\' is never called", | ||
[j]={{ | [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"]={ | ||
[ | [f]="A parameter marked \'called_once\' is never ... when ... [-Wcalled-once-parameter]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Eb}, | ||
[ | [q]=Eb, | ||
[i]={ | [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]={{ | [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"]={ | ||
[ | [f]="cannot pass object of ... type A through variadic ...; call will abort at runtime [-Wnon-pod-varargs]", | ||
[ | [b]=vb, | ||
[ | [c]=Gc, | ||
[ | [r]={"class-varargs","non-pod-varargs"}, | ||
[q]="non-pod-varargs", | [q]="non-pod-varargs", | ||
[ | [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", | ||
[ | [e]=Lc, | ||
[ | [a]="cannot pass object of (?:non\\-POD|non\\-trivial) type (.*?) through variadic (?:function|block|method|constructor); call will abort at runtime", | ||
[ | [g]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="cannot resolve lock expression [-Wthread-safety-analysis]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | [B]=false, | ||
[ | [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]={{ | [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"]={ | ||
[f]="empty case range specified", | |||
[f | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=ub, | [d]="empty case range specified", | ||
[ | [e]=u, | ||
[i]={X,1237025389, | [a]="empty case range specified", | ||
[j]={{ | [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"]={ | ||
[ | [f]="overflow converting case value to switch condition type (A to B) [-Wswitch]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,"switch"}, | ||
[q]="switch", | [q]="switch", | ||
[ | [d]="overflow converting case value to switch condition type (%0 to %1)", | ||
[ | [e]=u, | ||
[ | [a]="overflow converting case value to switch condition type \\((.*?) to (.*?)\\)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="cast from A to B increases required alignment from C to D [-Wcast-align]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"cast-align"}, | ||
[q]="cast-align", | [q]="cast-align", | ||
[ | [d]="cast from %0 to %1 increases required alignment from %2 to %3", | ||
[ | [e]=u, | ||
[ | [a]="cast from (.*?) to (.*?) increases required alignment from (.*?) to (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-align[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="cast between incompatible calling conventions \'A\' and \'B\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"cast-calling-convention"}, | ||
[q]="cast-calling-convention", | [q]="cast-calling-convention", | ||
[ | [d]="cast between incompatible calling conventions \'%0\' and \'%1\'; calls through this pointer may abort at runtime", | ||
[ | [e]=u, | ||
[ | [a]="cast between incompatible calling conventions \'(.*?)\' and \'(.*?)\'; calls through this pointer may abort at runtime", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-calling\\-convention[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="cast from A to B converts to incompatible function type [-Wcast-function-type]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"cast-function-type"}, | ||
[q]="cast-function-type", | [q]="cast-function-type", | ||
[ | [d]="cast %diff{from $ to $ |}0,1converts to incompatible function type", | ||
[ | [e]=u, | ||
[ | [a]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={rb,1590001902,pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="cast from A to B converts to incompatible function type [-Wcast-function-type-strict]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"cast-function-type","cast-function-type-strict"}, | ||
[q]="cast-function-type-strict", | [q]="cast-function-type-strict", | ||
[ | [d]="cast %diff{from $ to $ |}0,1converts to incompatible function type", | ||
[ | [e]=u, | ||
[ | [a]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type\\-strict[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={ab,1625925174,Z}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="nonnull ... \'A\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"address","bool-conversion","bool-conversions",Kb,Jb,"pointer-bool-conversion"}, | ||
[q]="pointer-bool-conversion", | [q]="pointer-bool-conversion", | ||
[ | [d]="nonnull %select{function call|parameter}0 \'%1\' will evaluate to \'true\' on first encounter", | ||
[ | [e]=u, | ||
[ | [a]="nonnull (?:function call|parameter) \'(.*?)\' will evaluate to \'true\' on first encounter", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="cast of type A to B is deprecated; use sel_getName instead [-Wcast-of-sel-type]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,"cast-of-sel-type",mb}, | ||
[q]="cast-of-sel-type", | [q]="cast-of-sel-type", | ||
[ | [d]="cast of type %0 to %1 is deprecated; use sel_getName instead", | ||
[ | [e]=u, | ||
[ | [a]="cast of type (.*?) to (.*?) is deprecated; use sel_getName instead", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-of\\-sel\\-type[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="cast from A to B drops ... [-Wcast-qual]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"cast-qual"}, | ||
[q]="cast-qual", | [q]="cast-qual", | ||
[ | [d]="cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", | ||
[ | [e]=u, | ||
[ | [a]="cast from (.*?) to (.*?) drops (?:const and volatile qualifiers|const qualifier|volatile qualifier)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."}, | [i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="cast from A to B must have all intermediate pointers const qualified to be safe [-Wcast-qual]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"cast-qual"}, | ||
[q]="cast-qual", | [q]="cast-qual", | ||
[ | [d]="cast from %0 to %1 must have all intermediate pointers const qualified to be safe", | ||
[ | [e]=u, | ||
[ | [a]="cast from (.*?) to (.*?) must have all intermediate pointers const qualified to be safe", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."}, | [i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-protocol-method-implementation"}, | ||
[q]="objc-protocol-method-implementation", | [q]="objc-protocol-method-implementation", | ||
[ | [d]="category is implementing a method which will also be implemented by its primary class", | ||
[ | [e]=u, | ||
[ | [a]="category is implementing a method which will also be implemented by its primary class", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-method\\-implementation[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="function with no prototype cannot use the A calling convention [-Wmissing-prototype-for-cc]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"missing-prototype-for-cc"}, | ||
[q]="missing-prototype-for-cc", | [q]="missing-prototype-for-cc", | ||
[ | [d]="function with no prototype cannot use the %0 calling convention", | ||
[ | [e]=u, | ||
[ | [a]="function with no prototype cannot use the (.*?) calling convention", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototype\\-for\\-cc[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="A calling convention is not supported ... [-Wignored-attributes]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={K,A}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="cannot refer to a non-static member from the handler of a ... function try block [-Wexceptions]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"exceptions"}, | ||
[q]="exceptions", | [q]="exceptions", | ||
[ | [d]="cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", | ||
[ | [e]=u, | ||
[ | [a]="cannot refer to a non\\-static member from the handler of a (?:constructor|destructor) function try block", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 [-WCFString-literal]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"CFString-literal"}, | ||
[q]="CFString-literal", | [q]="CFString-literal", | ||
[ | [d]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8", | ||
[ | [e]=u, | ||
[ | [a]="input conversion stopped due to an input byte that does not belong to the input codeset UTF\\-8", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-WCFString\\-literal[^\\]]*\\]", | ||
[ | [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"]={ | ||
[f]="character constant too long for its type", | |||
[f | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=ub, | [d]="character constant too long for its type", | ||
[ | [e]=u, | ||
[i]={ | [a]="character constant too long for its type", | ||
[j]={{ | [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"]={ | ||
[ | [f]="class method A not found (return type defaults to \'id\') [-Wobjc-method-access]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-method-access"}, | ||
[q]="objc-method-access", | [q]="objc-method-access", | ||
[ | [d]="class method %objcclass0 not found (return type defaults to \'id\')", | ||
[ | [e]=u, | ||
[ | [a]="class method (.*?) not found \\(return type defaults to \'id\'\\)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="class method A not found (return type defaults to \'id\'); did you mean B? [-Wobjc-method-access]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-method-access"}, | ||
[q]="objc-method-access", | [q]="objc-method-access", | ||
[ | [d]="class method %objcclass0 not found (return type defaults to \'id\'); did you mean %objcclass2?", | ||
[ | [e]=u, | ||
[ | [a]="class method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="expected string literal in \'clause A\' - ignoring [-Wignored-pragmas]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"ignored-pragmas","pragmas"}, | ||
[q]="ignored-pragmas", | [q]="ignored-pragmas", | ||
[ | [d]="expected string literal in \'clause %0\' - ignoring", | ||
[ | [e]=u, | ||
[ | [a]="expected string literal in \'clause (.*?)\' \\- ignoring", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]", | ||
[ | [h]=Q, | ||
[i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause."}, | [i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier [-Wgcc-compat]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | [r]={uc}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="passing union across security boundary via ... may leak information [-Wcmse-union-leak]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"cmse-union-leak"}, | ||
[q]="cmse-union-leak", | [q]="cmse-union-leak", | ||
[ | [d]="passing union across security boundary via %select{parameter %1|return value}0 may leak information", | ||
[ | [e]=u, | ||
[ | [a]="passing union across security boundary via (?:parameter (.*?)|return value) may leak information", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcmse\\-union\\-leak[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="property follows Cocoa naming convention for returning \'owned\' objects [-Wobjc-property-matches-cocoa-ownership-rule]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-property-matches-cocoa-ownership-rule"}, | ||
[q]="objc-property-matches-cocoa-ownership-rule", | [q]="objc-property-matches-cocoa-ownership-rule", | ||
[ | [d]="property follows Cocoa naming convention for returning \'owned\' objects", | ||
[ | [e]=u, | ||
[ | [a]="property follows Cocoa naming convention for returning \'owned\' objects", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-matches\\-cocoa\\-ownership\\-rule[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="collection expression type A may not respond to B", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [d]="collection expression type %0 may not respond to %1", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="possible misuse of comma operator here [-Wcomma]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"comma"}, | ||
[q]="comma", | [q]="comma", | ||
[ | [d]="possible misuse of comma operator here", | ||
[ | [e]=u, | ||
[ | [a]="possible misuse of comma operator here", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcomma[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."}, | [i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="...comparison always evaluates to ... [-Wtautological-compare]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,mb,fc}, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="bitwise comparison always evaluates to ... [-Wtautological-bitwise-compare]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={U,bb,mb,"tautological-bitwise-compare",fc}, | ||
[q]="tautological-bitwise-compare", | [q]="tautological-bitwise-compare", | ||
[ | [d]="bitwise comparison always evaluates to %select{false|true}0", | ||
[ | [e]=u, | ||
[ | [a]="bitwise comparison always evaluates to (?:false|true)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={U,bb,mb,"tautological-bitwise-compare",fc}, | ||
[q]="tautological-bitwise-compare", | [q]="tautological-bitwise-compare", | ||
[ | [d]="bitwise or with non-zero value always evaluates to true", | ||
[ | [e]=u, | ||
[ | [a]="bitwise or with non\\-zero value always evaluates to true", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={Ob,1567434909,Pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) [-Wenum-compare]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"enum-compare"}, | ||
[q]="enum-compare", | [q]="enum-compare", | ||
[ | [d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={zc,1575504770,Ac}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Cb,"deprecated-enum-compare","enum-compare"}, | ||
[q]="deprecated-enum-compare", | [q]="deprecated-enum-compare", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare[^\\]]*\\]", | ||
[ | [h]=Wb, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="comparison of different enumeration types in switch statement (A and B) [-Wenum-compare-switch]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"enum-compare","enum-compare-switch"}, | ||
[q]="enum-compare-switch", | [q]="enum-compare-switch", | ||
[ | [d]="comparison of different enumeration types in switch statement%diff{ ($ and $)|}0,1", | ||
[ | [e]=u, | ||
[ | [a]="comparison of different enumeration types in switch statement(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-switch[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="completion handler is called twice [-Wcompletion-handler]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | [B]=false, | ||
[ | [r]={Eb,sc}, | ||
[i]={ | [q]=sc, | ||
[j]={{ | [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"]={ | ||
[ | [f]="...completion handler is never called [-Wcompletion-handler]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Eb,sc}, | ||
[i]={ | [q]=sc, | ||
[j]={{ | [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"]={ | ||
[ | [f]="completion handler is never ... when ... [-Wcompletion-handler]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Eb,sc}, | ||
[i]={ | [q]=sc, | ||
[j]={{ | [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"]={ | ||
[ | [f]="...A tokens ... appear in different macro expansion contexts [-Wcompound-token-split-by-macro]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"compound-token-split","compound-token-split-by-macro"}, | ||
[q]="compound-token-split-by-macro", | [q]="compound-token-split-by-macro", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) appear in different macro expansion contexts", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-macro[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="...A tokens ... are separated by whitespace [-Wcompound-token-split-by-space]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"compound-token-split","compound-token-split-by-space"}, | ||
[q]="compound-token-split-by-space", | [q]="compound-token-split-by-space", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) are separated by whitespace", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-space[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={m,U,Mc,"string-concatenation"}, | ||
[q]="string-concatenation", | [q]="string-concatenation", | ||
[ | [d]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma?", | ||
[ | [e]=u, | ||
[ | [a]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma\\?", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wstring\\-concatenation[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={hb,1582847864,ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"objc-string-concatenation"}, | ||
[q]="objc-string-concatenation", | [q]="objc-string-concatenation", | ||
[ | [d]="concatenated NSString literal for an NSArray expression - possibly missing a comma", | ||
[ | [e]=u, | ||
[ | [a]="concatenated NSString literal for an NSArray expression \\- possibly missing a comma", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-string\\-concatenation[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="using the result of an assignment as a condition without parentheses [-Wparentheses]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={U,bb,"parentheses"}, | ||
[q]="parentheses", | [q]="parentheses", | ||
[ | [d]="using the result of an assignment as a condition without parentheses", | ||
[ | [e]=u, | ||
[ | [a]="using the result of an assignment as a condition without parentheses", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="using the result of an assignment as a condition without parentheses [-Widiomatic-parentheses]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={"idiomatic-parentheses"}, | ||
[q]="idiomatic-parentheses", | [q]="idiomatic-parentheses", | ||
[ | [d]="using the result of an assignment as a condition without parentheses", | ||
[ | [e]=u, | ||
[ | [a]="using the result of an assignment as a condition without parentheses", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Widiomatic\\-parentheses[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) [-Wenum-compare-conditional]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Kb,"enum-compare-conditional",tc,Jb}, | ||
[q]="enum-compare-conditional", | [q]="enum-compare-conditional", | ||
[ | [d]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-conditional[^\\]]*\\]", | ||
[ | [h]=hc, | ||
[i]={ | [i]={Ob,1567434909,Pb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare-conditional]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={Kb,Cb,"deprecated-enum-compare-conditional","enum-compare-conditional",tc,Jb}, | ||
[q]="deprecated-enum-compare-conditional", | [q]="deprecated-enum-compare-conditional", | ||
[ | [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", | ||
[ | [e]=u, | ||
[ | [a]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare\\-conditional[^\\]]*\\]", | ||
[ | [h]=Wb, | ||
[i]={ | [i]={kb,1576908663,jb}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting nullability specifier on parameter types, A conflicts with existing specifier B [-Wnullability]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"nullability"}, | ||
[q]="nullability", | [q]="nullability", | ||
[ | [d]="conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", | ||
[ | [e]=u, | ||
[ | [a]="conflicting nullability specifier on parameter types, (.*?) conflicts with existing specifier (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | ||
[ | [h]="Nullability Issue", | ||
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."}, | [i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting nullability specifier on return types, A conflicts with existing specifier B [-Wnullability]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"nullability"}, | ||
[q]="nullability", | [q]="nullability", | ||
[ | [d]="conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", | ||
[ | [e]=u, | ||
[ | [a]="conflicting nullability specifier on return types, (.*?) conflicts with existing specifier (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | ||
[ | [h]="Nullability Issue", | ||
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."}, | [i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting distributed object modifiers on parameter type in declaration of A [-Woverriding-method-mismatch]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Bb}, | ||
[i]={ | [q]=Bb, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting parameter types in declaration of A: B vs C [-Woverriding-method-mismatch]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Bb}, | ||
[i]={ | [q]=Bb, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting distributed object modifiers on return type in declaration of A [-Woverriding-method-mismatch]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Bb}, | ||
[i]={ | [q]=Bb, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting return type in declaration of A: B vs C [-Woverriding-method-mismatch]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[ | [B]=false, | ||
[ | [r]={Bb}, | ||
[i]={ | [q]=Bb, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting variadic declaration of method and its implementation [-Woverriding-method-mismatch]", | ||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]= | [B]=false, | ||
[ | [r]={Bb}, | ||
[i]={ | [q]=Bb, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conflicting distributed object modifiers on parameter type in implementation of A [-Wdistributed-object-modifiers]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"distributed-object-modifiers"}, | ||
[q]="distributed-object-modifiers", | [q]="distributed-object-modifiers", | ||
[ | [d]="conflicting distributed object modifiers on parameter type in implementation of %0", | ||
[ | [e]=u, | ||
[ | [a]="conflicting distributed object modifiers on parameter type in implementation of (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="conflicting parameter types in implementation of A: B vs C [-Wmismatched-parameter-types]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"mismatched-parameter-types"}, | ||
[q]="mismatched-parameter-types", | [q]="mismatched-parameter-types", | ||
[ | [d]="conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", | ||
[ | [e]=u, | ||
[ | [a]="conflicting parameter types in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-parameter\\-types[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="conflicting distributed object modifiers on return type in implementation of A [-Wdistributed-object-modifiers]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"distributed-object-modifiers"}, | ||
[q]="distributed-object-modifiers", | [q]="distributed-object-modifiers", | ||
[ | [d]="conflicting distributed object modifiers on return type in implementation of %0", | ||
[ | [e]=u, | ||
[ | [a]="conflicting distributed object modifiers on return type in implementation of (.*?)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="conflicting return type in implementation of A: B vs C [-Wmismatched-return-types]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"mismatched-return-types"}, | ||
[q]="mismatched-return-types", | [q]="mismatched-return-types", | ||
[ | [d]="conflicting return type in implementation of %0%diff{: $ vs $|}1,2", | ||
[ | [e]=u, | ||
[ | [a]="conflicting return type in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-return\\-types[^\\]]*\\]", | ||
[ | [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]={{ | [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"]={ | ||
[f]=Rc, | |||
[f]= | |||
[b]=t, | [b]=t, | ||
[ | [c]=s, | ||
[a]=ub, | [d]=Rc, | ||
[ | [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]={{ | [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"]={ | ||
[ | [f]="consteval if is always true in an ... context [-Wredundant-consteval-if]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"redundant-consteval-if"}, | ||
[q]="redundant-consteval-if", | [q]="redundant-consteval-if", | ||
[ | [d]="consteval if is always true in an %select{unevaluated|immediate}0 context", | ||
[ | [e]=u, | ||
[ | [a]="consteval if is always true in an (?:unevaluated|immediate) context", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wredundant\\-consteval\\-if[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={ | [i]={Mb,1615397021,Ib}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="integer value A is outside the valid range of values [B, C] for the enumeration type D [-Wenum-constexpr-conversion]", | ||
[ | [b]=vb, | ||
[ | [c]=Gc, | ||
[ | [r]={"enum-constexpr-conversion"}, | ||
[q]="enum-constexpr-conversion", | [q]="enum-constexpr-conversion", | ||
[ | [d]="integer value %0 is outside the valid range of values [%1, %2] for the enumeration type %3", | ||
[ | [e]=Lc, | ||
[ | [a]="integer value (.*?) is outside the valid range of values \\[(.*?), (.*?)\\] for the enumeration type (.*?)", | ||
[ | [g]=" \\[[^\\]]*\\-Wenum\\-constexpr\\-conversion[^\\]]*\\]", | ||
[ | [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"]={ | ||
[ | [f]="conversion function converting A to its base class B will never be used [-Wclass-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"class-conversion"}, | ||
[q]="class-conversion", | [q]="class-conversion", | ||
[ | [d]="conversion function converting %0 to its base class %1 will never be used", | ||
[ | [e]=u, | ||
[ | [a]="conversion function converting (.*?) to its base class (.*?) will never be used", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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"]={ | ||
[ | [f]="conversion function converting A to itself will never be used [-Wclass-conversion]", | ||
[ | [b]=t, | ||
[ | [c]=s, | ||
[ | [r]={"class-conversion"}, | ||
[q]="class-conversion", | [q]="class-conversion", | ||
[ | [d]="conversion function converting %0 to itself will never be used", | ||
[ | [e]=u, | ||
[ | [a]="conversion function converting (.*?) to itself will never be used", | ||
[ | [g]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | ||
[ | [h]=l, | ||
[i]={X,1237025389, | [i]={X,1237025389,Y}, | ||
[j]={{ | [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]"} | |||
} | |||
} | } | ||
}; | }; |
edits