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 15: | Line 15: | ||
local o="note\\: "; | local o="note\\: "; | ||
local p="note: "; | local p="note: "; | ||
local q=" | local q="maingroup"; | ||
local r=" | local r="groups"; | ||
local s="(?:warning|error|fatal error)\\: "; | local s="Warning"; | ||
local | local t="(?:warning|error|fatal error)\\: "; | ||
local u="warning: "; | |||
local v="clang/lib/Sema/SemaDeclAttr.cpp"; | local v="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local w="clang/lib/Sema/SemaDecl.cpp"; | local w="clang/lib/Sema/SemaDecl.cpp"; | ||
Line 36: | Line 36: | ||
local J="OpenMP Issue"; | local J="OpenMP Issue"; | ||
local K="Implement P2361 Unevaluated string literals"; | local K="Implement P2361 Unevaluated string literals"; | ||
local L=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\] | local L="clang/lib/Sema/AnalysisBasedWarnings.cpp"; | ||
local M="attributes"; | |||
local N=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]"; | |||
local O="The basic representation of diagnostics information in tablegen format, plus (uncommented and | local O="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format."; | ||
local P="b1c4d5507fad"; | local P="b1c4d5507fad"; | ||
local Q="The basic representation of diagnostics information in tablegen format, plus (uncommented and | local Q="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | ||
local R="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; | local R="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; | ||
local S="clang/lib/Sema/JumpDiagnostics.cpp"; | local S="clang/lib/Sema/JumpDiagnostics.cpp"; | ||
local T | local T="clang/lib/Sema/SemaStmt.cpp"; | ||
local U="Parse Issue"; | |||
local V="clang/lib/Parse/ParseOpenMP.cpp"; | local V="clang/lib/Parse/ParseOpenMP.cpp"; | ||
local W=" | local W="swift-name-attribute"; | ||
local X="clang/lib/Lex/PPDirectives.cpp"; | local X="Let clang atomic builtins fetch add/sub support floating point types"; | ||
local | local Y="clang/lib/Lex/PPDirectives.cpp"; | ||
local | local Z="CL4"; | ||
local | local ab="pre-c2x-compat"; | ||
local | local bb="clang/lib/Sema/SemaInit.cpp"; | ||
local cb="[OpenMP][Part 2] Use reusable OpenMP context/traits handling"; | |||
local db="clang | local db="[WebAssembly] Improve clang diagnostics for wasm attributes"; | ||
local eb="5a8987ca5113"; | local eb="5a8987ca5113"; | ||
local fb="95f50964fbf5"; | local fb="95f50964fbf5"; | ||
local gb=" | local gb="[attributes][analyzer] Add annotations for handles."; | ||
local hb=" | local hb="all"; | ||
local ib="clang/lib/Sema/ | local ib="clang/lib/Sema/SemaType.cpp"; | ||
local jb=" | local jb="remark\\: "; | ||
local kb="Reland [clang] Check unsupported types in expressions"; | local kb="14f6bfcb52e7"; | ||
local | local lb="Reland [clang] Check unsupported types in expressions"; | ||
local | local mb="clang/lib/Sema/SemaTemplateInstantiate.cpp"; | ||
local | local nb="remark: "; | ||
local | local ob="Remark"; | ||
local pb="[clang] New __attribute__((__clang_arm_mve_alias))."; | |||
local qb="clang/lib/Lex/Lexer.cpp"; | local qb="clang/lib/Lex/Lexer.cpp"; | ||
local rb="most"; | local rb="most"; | ||
Line 74: | Line 74: | ||
local vb="clang/lib/Sema/SemaExprObjC.cpp"; | local vb="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local wb="61d065e21ff3"; | local wb="61d065e21ff3"; | ||
local xb | local xb="error: "; | ||
local yb="clang/lib/Sema/SemaAttr.cpp"; | |||
local | local zb="availability"; | ||
local Ab="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | local Ab="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | ||
local Bb=" | local Bb="1228d42ddab8"; | ||
local Cb=" \\[(?:\\-Werror,)?\\-Wpre\\-c2x\\-compat[^\\]]*\\]"; | local Cb=" \\[(?:\\-Werror,)?\\-Wpre\\-c2x\\-compat[^\\]]*\\]"; | ||
local Db=" | local Db="pre-c2x-compat-pedantic"; | ||
local Eb="objective-c: Using existing infrastructure for finding "; | local Eb="931fcd3ba011"; | ||
local | local Fb="fe17b30a7957"; | ||
local | local Gb="objective-c: Using existing infrastructure for finding "; | ||
local Hb="deprecated"; | |||
local | local Ib="overriding-method-mismatch"; | ||
local | local Jb="Automatic Reference Counting."; | ||
local | local Kb="clang/test/SemaObjC/attr-swift_name.m"; | ||
local | local Lb="clang/test/SemaCXX/uninitialized.cpp:928:5: note: during field initialization in this constructor"; | ||
local | local Mb="3dbcea8b957a"; | ||
local | local Nb="clang/test/SemaCXX/uninitialized.cpp:944:10: note: during field initialization in the implicit default constructor"; | ||
local | local Ob="clang/lib/Sema/SemaPseudoObject.cpp"; | ||
local | local Pb="conversion"; | ||
local | local Qb="clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp:4:50: note: in instantiation of exception specification for \'go\' requested here"; | ||
local | local Rb="called-once-parameter"; | ||
local | local Sb="non-gcc"; | ||
local | local Tb="Implement VectorType conditional operator GNU extension."; | ||
local | local Ub="clang/test/Lexer/deprecate-macro.c:29:29: note: macro marked \'deprecated\' here"; | ||
local | local Vb="clang/lib/Sema/SemaAvailability.cpp"; | ||
local | local Wb="clang/test/SemaSYCL/zero-length-arrays.cpp:31:24: note: within field of type \'InnerTemplated<0U>[1]\' declared here"; | ||
local | local Xb="trigraphs"; | ||
local | local Yb="Deprecations"; | ||
local | local Zb="Improve static checks for sprintf and __builtin___sprintf_chk"; | ||
local | local ac="rewrite the goto scope checking code to be more efficient, simpler,"; | ||
local | local bc="7c11da0cfd33"; | ||
local | local cc="[clang] Add no_builtin attribute"; | ||
local dc="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 | local ec="clang/lib/Lex/Pragma.cpp"; | ||
local | local fc="module-build"; | ||
local gc="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 hc="clang/lib/Sema/SemaExprCXX.cpp"; | |||
local ic="clang/ | local ic="clang/lib/Serialization/ASTReader.cpp"; | ||
local jc="Modules Issue"; | local jc="Modules Issue"; | ||
local kc=" | local kc="Error"; | ||
local lc="clang/lib/ | local lc="clang/lib/Parse/ParseDecl.cpp"; | ||
local mc=" | local mc="(?:error|fatal error)\\: "; | ||
local nc="clang/ | local nc="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 oc=" | local oc="tautological-compare"; | ||
local pc="clang | local pc="Add #pragma clang attribute"; | ||
local qc=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\] | local qc="MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"; | ||
local rc=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]"; | |||
local sc="clang/ | local sc="clang/lib/Sema/SemaModule.cpp"; | ||
local tc="enum-conversion"; | local tc="enum-conversion"; | ||
local uc=" | local uc="completion-handler"; | ||
local vc=" | local vc="clang/test/Sema/div-sizeof-ptr.cpp:10:16: note: pointer \'p\' declared here"; | ||
local wc=" | local wc="[Sema] Improve redefinition errors pointing to the same header"; | ||
local xc=" | local xc="..."; | ||
local yc=" | local yc="Add new warning -Wrange-loop-analysis to warn on copies during loops."; | ||
local zc="ARC Semantic Issue"; | local zc="ARC Semantic Issue"; | ||
local Ac=" | local Ac="arc-unsafe-retained-assign"; | ||
local Bc=" | local Bc="Improve overload diagnostics some more by calling out qualifier mismatches"; | ||
local Cc=" | local Cc="thread-safety-analysis"; | ||
local Dc=" | local Dc="c99-compat"; | ||
local Ec=" | local Ec="pass-analysis"; | ||
local Fc=" | local Fc="Implement jump scope SEHmantic analysis."; | ||
local Gc=" | local Gc="Add -Wabsolute-value, warnings about absolute value functions."; | ||
local Hc | local Hc="Add a limit to the length of a sequence of \'operator->\' functions we will"; | ||
local Ic="Value Conversion Issue"; | |||
local Jc="clang/test/SemaObjC/warn-called-once.m"; | |||
local Kc=" | local Kc="clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:46:10: note: \'get\' returns a reference"; | ||
local Lc=" | local Lc="Backend Issue"; | ||
local Mc=" | local Mc="Improve the diagnostics used to report implicitly-generated class members"; | ||
local Nc="array-bounds"; | local Nc="array-bounds"; | ||
local Oc | local Oc="clang/lib/Frontend/CompilerInstance.cpp"; | ||
local Pc="gcc-compat"; | |||
local Qc="clang/lib/Sema/SemaExceptionSpec.cpp"; | |||
local Rc="Downgradable Error"; | |||
local | local Sc="clang/lib/Parse/ParseExpr.cpp"; | ||
local | local Tc="clang/test/SemaCXX/warn-consumed-parsing.cpp"; | ||
local Uc="clang/lib/Lex/LiteralSupport.cpp"; | |||
local | local Vc="(.*?)"; | ||
local | local Wc="clang/test/SemaObjC/scope-check.m"; | ||
local | local Xc="extra"; | ||
local | local Yc="%0"; | ||
local | local Zc="clang/lib/Lex/PPMacroExpansion.cpp"; | ||
local | local ad="(?:error|warning|fatal error)\\: "; | ||
local | local bd="arc"; | ||
local | local cd="31168b077c36"; | ||
local | local dd="3c12dd7675cd"; | ||
local | local ed="clang/test/CXX/expr/expr.arith.conv/p2.cpp"; | ||
local | local fd="clang/lib/CodeGen/CodeGenAction.cpp"; | ||
local | local gd="clang/lib/Sema/Sema.cpp"; | ||
local | local hd="conflicting variadic declaration of method and its implementation"; | ||
local id=" | local id=" \\[(?:\\-Werror,)?\\-Woverriding\\-method\\-mismatch[^\\]]*\\]"; | ||
local jd="clang/lib/CodeGen/ | local jd="clang/lib/CodeGen/CodeGenModule.cpp"; | ||
return { | return { | ||
["note_omp_atomic_capture"]={ | ["note_omp_atomic_capture"]={ | ||
[a]= | [a]=xc, | ||
[c]=p, | [c]=p, | ||
[d]=n, | [d]=n, | ||
Line 177: | Line 177: | ||
[f]=J, | [f]=J, | ||
[i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct.","[OPENMP] Sema analysis for \'atomic capture\' construct."}, | [i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct.","[OPENMP] Sema analysis for \'atomic capture\' construct."}, | ||
[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;"}}, | [j]={{x,12793,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n // ...\n if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n // ...\n if (ErrorFound != NoError) {\n // ...\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 // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n // ...\n if (ErrorFound != NoError) {\n // ...\n Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 183: | Line 183: | ||
}, | }, | ||
["note_omp_atomic_compare"]={ | ["note_omp_atomic_compare"]={ | ||
[a]= | [a]=xc, | ||
[c]=p, | [c]=p, | ||
[d]=n, | [d]=n, | ||
Line 192: | Line 192: | ||
[f]=J, | [f]=J, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[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;"}}, | [j]={{x,12968,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n // ...\n } else if (AtomicKind == OMPC_compare) {\n if (IsCompareCapture) {\n // ...\n if (!Checker.checkStmt(Body, ErrorInfo)) {\n // ...\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 // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n // ...\n } else if (AtomicKind == OMPC_compare) {\n if (IsCompareCapture) {\n // ...\n } else {\n // ...\n if (!Checker.checkStmt(Body, ErrorInfo)) {\n // ...\n Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 198: | Line 198: | ||
}, | }, | ||
["note_omp_atomic_read_write"]={ | ["note_omp_atomic_read_write"]={ | ||
[a]= | [a]=xc, | ||
[c]=p, | [c]=p, | ||
[d]=n, | [d]=n, | ||
Line 207: | Line 207: | ||
[f]=J, | [f]=J, | ||
[i]={"f33eba65730d",1417159300,"[OPENMP] Additional processing of \'omp atomic write\' directive.","[OPENMP] Additional processing of \'omp atomic write\' directive."}, | [i]={"f33eba65730d",1417159300,"[OPENMP] Additional processing of \'omp atomic write\' directive.","[OPENMP] Additional processing of \'omp atomic write\' directive."}, | ||
[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;"}}, | [j]={{x,12656,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\n if (ErrorFound != NoError) {\n // ...\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 // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n if (ErrorFound != NoError) {\n // ...\n Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 213: | Line 213: | ||
}, | }, | ||
["note_omp_atomic_update"]={ | ["note_omp_atomic_update"]={ | ||
[a]= | [a]=xc, | ||
[c]=p, | [c]=p, | ||
[d]=n, | [d]=n, | ||
Line 222: | Line 222: | ||
[f]=J, | [f]=J, | ||
[i]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'.","[OPENMP] Additional sema analysis for \'omp atomic[ update]\'."}, | [i]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'.","[OPENMP] Additional sema analysis for \'omp atomic[ update]\'."}, | ||
[j]={{x,12739,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // OpenMP [2.12.6, atomic Construct]\n // In the next expressions:\n // * x and v (as applicable) are both l-value expressions with scalar type.\n // * During the execution of an atomic region, multiple syntactic\n // occurrences of x must designate the same storage location.\n // * Neither of v and expr (as applicable) may access the storage location\n // designated by x.\n // * Neither of x and expr (as applicable) may access the storage location\n // designated by v.\n // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n // (expr). This requirement is satisfied if the operators in expr have\n // precedence greater than binop, or by using parentheses around expr or\n // subexpressions of expr.\n // * The expression expr binop x must be numerically equivalent to (expr)\n // binop x. This requirement is satisfied if the operators in expr have\n // precedence equal to or greater than binop, or by using parentheses around\n // expr or subexpressions of expr.\n // * For forms that allow multiple occurrences of x, the number of times\n // that x is evaluated is unspecified.\n if (AtomicKind == OMPC_read) {\n } else if (AtomicKind == OMPC_write) {\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"},{x,12774,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // OpenMP [2.12.6, atomic Construct]\n // In the next expressions:\n // * x and v (as applicable) are both l-value expressions with scalar type.\n // * During the execution of an atomic region, multiple syntactic\n // occurrences of x must designate the same storage location.\n // * Neither of v and expr (as applicable) may access the storage location\n // designated by x.\n // * Neither of x and expr (as applicable) may access the storage location\n // designated by v.\n // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n // (expr). This requirement is satisfied if the operators in expr have\n // precedence greater than binop, or by using parentheses around expr or\n // subexpressions of expr.\n // * The expression expr binop x must be numerically equivalent to (expr)\n // binop x. This requirement is satisfied if the operators in expr have\n // precedence equal to or greater than binop, or by using parentheses around\n // expr or subexpressions of expr.\n // * For forms that allow multiple occurrences of x, the number of times\n // that x is evaluated is unspecified.\n if (AtomicKind == OMPC_read) {\n } else if (AtomicKind == OMPC_write) {\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n } else if (AtomicKind == OMPC_capture) {\n if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n if (AtomicBinOp && AtomicBinOp->getOpcode() == BO_Assign) {\n if (Checker.checkStatement(Body, diag::err_omp_atomic_capture_not_expression_statement, diag::note_omp_atomic_update))"}}, | [j]={{x,12739,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\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 // ...\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 // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n // ...\n if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n // ...\n if (AtomicBinOp && AtomicBinOp->getOpcode() == BO_Assign) {\n // ...\n if (Checker.checkStatement(Body, diag::err_omp_atomic_capture_not_expression_statement, diag::note_omp_atomic_update))"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 237: | Line 237: | ||
[f]=J, | [f]=J, | ||
[i]={"10e775f4a882",1438256176,"[OPENMP 4.1] Initial support for extended \'ordered\' clause.","[OPENMP 4.1] Initial support for extended \'ordered\' clause."}, | [i]={"10e775f4a882",1438256176,"[OPENMP 4.1] Initial support for extended \'ordered\' clause.","[OPENMP 4.1] Initial support for extended \'ordered\' clause."}, | ||
[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();"}}, | [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 // ...\n // Ranged for is supported only in OpenMP 5.0.\n if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n // ...\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 // ...\n // Ranged for is supported only in OpenMP 5.0.\n if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n // ...\n if (TotalNestedLoopCount > 1) {\n if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n // ...\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 // ...\n // Ranged for is supported only in OpenMP 5.0.\n if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n // ...\n if (TotalNestedLoopCount > 1) {\n if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n // ...\n else if (CollapseLoopCountExpr)\n // ...\n else\n SemaRef.Diag(OrderedLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 1 << OrderedLoopCountExpr->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:108:28: note: as specified in \'collapse\' clause"} | ["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:108:28: note: as specified in \'collapse\' clause"} | ||
Line 252: | Line 252: | ||
[f]=J, | [f]=J, | ||
[i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'","[OPENMP] Clause \'num_threads\'"}, | [i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'","[OPENMP] Clause \'num_threads\'"}, | ||
[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; }"}} | [j]={{x,16406,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n // ...\n class IntConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\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 // ...\n class IntConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\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"]={ | ||
Line 264: | Line 264: | ||
[f]=J, | [f]=J, | ||
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive.","[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.","[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."}, | ||
[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"}}, | [j]={{x,10890,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n if (Pair.first && DirName.getName() && !DependentHint) {\n if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n // ...\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 // ...\n if (Pair.first && DirName.getName() && !DependentHint) {\n if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n // ...\n if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n Diag(C->getBeginLoc(), diag::note_omp_critical_hint_here) << 1"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 279: | Line 279: | ||
[f]=J, | [f]=J, | ||
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive.","[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.","[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."}, | ||
[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;"}} | [j]={{x,10893,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n if (Pair.first && DirName.getName() && !DependentHint) {\n if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n // ...\n if (HintLoc.isValid())\n // ...\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 // ...\n if (Pair.first && DirName.getName() && !DependentHint) {\n if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n // ...\n if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n // ...\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"]={ | ||
Line 289: | Line 289: | ||
[b]="the context property \'(.*?)\' can be nested in the context selector \'(.*?)\' which is nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)\\((.*?)\\)\\}\\)\'", | [b]="the context property \'(.*?)\' can be nested in the context selector \'(.*?)\' which is nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)\\((.*?)\\)\\}\\)\'", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{V,1032,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n Diag(PropertyLoc, diag::note_omp_ctx_compatible_set_and_selector_for_property) << getOpenMPContextTraitPropertyName(TIProperty.Kind, TIProperty.RawString) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(TIProperty.Kind)) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(TIProperty.Kind));"}} | [j]={{V,1032,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\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"]={ | ||
Line 301: | Line 301: | ||
[b]="the context selector \'(.*?)\' can be nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)(?:|\\(property\\))\\}\\)\'", | [b]="the context selector \'(.*?)\' can be nested in the context set \'(.*?)\'; try \'match\\((.*?)\\=\\{(.*?)(?:|\\(property\\))\\}\\)\'", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{V,1164,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n if (!isValidTraitSelectorForTraitSet(TISelector.Kind, Set, AllowsTraitScore, RequiresProperty)) {\n Diag(SelectorLoc, diag::note_omp_ctx_compatible_set_for_selector) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(TISelector.Kind)) << RequiresProperty;"}}, | [j]={{V,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 // ...\n if (!isValidTraitSelectorForTraitSet(TISelector.Kind, Set, AllowsTraitScore, RequiresProperty)) {\n // ...\n Diag(SelectorLoc, diag::note_omp_ctx_compatible_set_for_selector) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(TISelector.Kind)) << RequiresProperty;"}}, | ||
[k]={ | [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)})\'"} | ["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)})\'"} | ||
Line 316: | Line 316: | ||
[b]="the ignored (?:set|selector|property) spans until here", | [b]="the ignored (?:set|selector|property) spans until here", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{V,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;"},{V,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;"},{V,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;"},{V,1318,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n // If anything went wrong we issue an error or warning and then skip the rest\n // of the set. However, commas are ambiguous so we look for the nesting\n // of braces here as well.\n auto FinishSelectorSet = [this, OuterBC]() -> void {\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_SET_LVL;"}}, | [j]={{V,1013,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\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;"},{V,1039,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{V,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 // ...\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 // ...\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_LVL;"},{V,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 // ...\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 // ...\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_SET_LVL;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 331: | Line 331: | ||
[b]="\'(.*?)\' is a context (?:set|selector|property) not a context (?:set|selector|property)", | [b]="\'(.*?)\' is a context (?:set|selector|property) not a context (?:set|selector|property)", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{V,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;"},{V,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;"},{V,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;"},{V,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;"},{V,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;"},{V,1275,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_SET_LVL;"}} | [j]={{V,905,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SetForName != TraitSet::invalid) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_TRAIT_LVL;"},{V,914,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SelectorForName != TraitSelector::invalid) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_TRAIT_LVL;"},{V,1069,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SetForName != TraitSet::invalid) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_SELECTOR_LVL;"},{V,1083,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_LVL;"},{V,1255,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SelectorForName != TraitSelector::invalid) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_SELECTOR_SET_LVL;"},{V,1275,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n // ...\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"]={ | ||
Line 343: | Line 343: | ||
[b]="context (?:set|selector|property) options are\\: (.*?)", | [b]="context (?:set|selector|property) options are\\: (.*?)", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,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();"},{V,1285,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"}}, | [j]={{V,884,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (Name.empty()) {\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{V,942,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{V,1051,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (Name.empty()) {\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{V,1093,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{V,1237,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (Name.empty()) {\n Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"},{V,1285,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 358: | Line 358: | ||
[b]="try \'match\\((.*?)\\=\\{(.*?)(.*?)\\}\\)\'", | [b]="try \'match\\((.*?)\\=\\{(.*?)(.*?)\\}\\)\'", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{V,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>\""},{V,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>)\" : \"\");"},{V,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();"},{V,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>\""},{V,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();"},{V,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>)\" : \"\");"},{V,1277,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"}}, | [j]={{V,907,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SetForName != TraitSet::invalid) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{V,921,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SelectorForName != TraitSelector::invalid) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{V,934,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{V,1071,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SetForName != TraitSet::invalid) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{V,1085,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{V,1262,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (SelectorForName != TraitSelector::invalid) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{V,1277,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n // ...\n Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:47:66: note: try \'match(implementation={vendor(ibm)})\'"} | ["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:47:66: note: try \'match(implementation={vendor(ibm)})\'"} | ||
Line 373: | Line 373: | ||
[b]="the previous context (?:set|selector|property) \'(.*?)\' used here", | [b]="the previous context (?:set|selector|property) \'(.*?)\' used here", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"70d2e5427ed3",1570556872,"[OPENMP50]Do not allow multiple same context traits in the same context","[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","[OPENMP50]Do not allow multiple same context traits in the same context"}, | ||
[j]={{V,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;"},{V,985,"static bool checkExtensionProperty(Parser &P, SourceLocation Loc, OMPTraitProperty &TIProperty, OMPTraitSelector &TISelector, llvm::StringMap<SourceLocation> &Seen) {\n if (IsMatchExtension(TIProperty)) {\n for (OMPTraitProperty &SeenProp : TISelector.Properties)\n if (IsMatchExtension(SeenProp)) {\n P.Diag(SeenLoc, diag::note_omp_declare_variant_ctx_used_here) << CONTEXT_TRAIT_LVL << SeenName;"}}, | [j]={{V,869,"static bool checkForDuplicates(Parser &P, StringRef Name, SourceLocation NameLoc, llvm::StringMap<SourceLocation> &Seen, OMPContextLvl Lvl) {\n // ...\n P.Diag(Res.first->getValue(), diag::note_omp_declare_variant_ctx_used_here) << Lvl << Name;"},{V,985,"static bool checkExtensionProperty(Parser &P, SourceLocation Loc, OMPTraitProperty &TIProperty, OMPTraitSelector &TISelector, llvm::StringMap<SourceLocation> &Seen) {\n // ...\n if (IsMatchExtension(TIProperty)) {\n for (OMPTraitProperty &SeenProp : TISelector.Properties)\n if (IsMatchExtension(SeenProp)) {\n // ...\n P.Diag(SeenLoc, diag::note_omp_declare_variant_ctx_used_here) << CONTEXT_TRAIT_LVL << SeenName;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 390: | Line 390: | ||
[f]=J, | [f]=J, | ||
[i]={"cf9e7a282b74",1557164962,"[OPENMP]Fix PR41768: check DSA for globals with `default(none)` clauses.","[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.","[OPENMP]Fix PR41768: check DSA for globals with `default(none)` clauses."}, | ||
[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);"}}, | [j]={{x,6796,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n for (const auto &P : VarsWithInheritedDSA) {\n // ...\n if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n // ...\n Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_default_dsa_none);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 405: | Line 405: | ||
[f]=J, | [f]=J, | ||
[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining"}, | [i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining"}, | ||
[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);"}}, | [j]={{x,6802,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n for (const auto &P : VarsWithInheritedDSA) {\n // ...\n if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n // ...\n } else if (getLangOpts().OpenMP >= 50) {\n // ...\n Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_defaultmap_attr_none);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 419: | Line 419: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[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\";"}}, | [j]={{x,14994,"StmtResult Sema::ActOnOpenMPUnrollDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n if (FullClause) {\n if (!VerifyPositiveIntegerConstantInClause(LoopHelper.NumIterations, OMPC_full, /*StrictlyPositive=*/false,\n // ...\n Diag(FullClause->getBeginLoc(), diag::note_omp_directive_here) << \"#pragma omp unroll full\";"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 434: | Line 434: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[j]={{S,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());"},{S,946,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n // Warn on gotos out of __finally blocks.\n if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n // less nested scope. Check if it crosses a __finally along the way.\n for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n S.Diag(To->getBeginLoc(), diag::note_omp_exits_structured_block);"}}, | [j]={{S,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 // ...\n default:\n if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n if (!ED->isStandaloneDirective()) {\n // ...\n Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{S,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 // ...\n // Warn on gotos out of __finally blocks.\n if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n // less nested scope. Check if it crosses a __finally along the way.\n for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n // ...\n if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n // ...\n S.Diag(To->getBeginLoc(), diag::note_omp_exits_structured_block);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/master_messages.cpp"]={"clang/test/OpenMP/master_messages.cpp:57:3: note: jump exits scope of OpenMP structured block"} | ["clang/test/OpenMP/master_messages.cpp"]={"clang/test/OpenMP/master_messages.cpp:57:3: note: jump exits scope of OpenMP structured block"} | ||
Line 450: | Line 450: | ||
[f]=J, | [f]=J, | ||
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'","OpenMP: Data-sharing attributes analysis and clause \'shared\'"}, | [i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'","OpenMP: Data-sharing attributes analysis and clause \'shared\'"}, | ||
[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);"}}, | [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 // ...\n for (const Expr *E : Aligneds) {\n // ...\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n // ...\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 // ...\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 // ...\n for (const Expr *E : Aligneds) {\n // ...\n if (isa<CXXThisExpr>(E)) {\n if (AlignedThis) {\n // ...\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 // ...\n for (const Expr *E : Linears) {\n // ...\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n // ...\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 // ...\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 // ...\n for (const Expr *E : Linears) {\n // ...\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n // ...\n if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n // ...\n // Each argument can appear in at most one uniform or linear clause.\n if (UniformedArgs.count(CanonPVD) > 0) {\n // ...\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 // ...\n for (const Expr *E : Linears) {\n // ...\n if (isa<CXXThisExpr>(E)) {\n if (UniformedLinearThis) {\n // ...\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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_nontemporal);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:49:62: note: defined as private"} | ["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:49:62: note: defined as private"} | ||
Line 464: | Line 464: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[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());"}}, | [j]={{x,11242,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n if (FC && OrderClause) {\n // ...\n Diag(OrderClause->getBeginLoc(), diag::note_omp_flush_order_clause_here) << getOpenMPClauseName(OrderClause->getClauseKind());"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/flush_messages.cpp"]={"clang/test/OpenMP/flush_messages.cpp:146:25: note: memory order clause \'acq_rel\' is specified here"} | ["clang/test/OpenMP/flush_messages.cpp"]={"clang/test/OpenMP/flush_messages.cpp:146:25: note: memory order clause \'acq_rel\' is specified here"} | ||
Line 480: | Line 480: | ||
[f]=J, | [f]=J, | ||
[i]={"bae9a793fdf7",1403865426,"[OPENMP] Parsing and sema analysis for \'copyprivate\' clause.","[OPENMP] Parsing and sema analysis for \'copyprivate\' clause."}, | [i]={"bae9a793fdf7",1403865426,"[OPENMP] Parsing and sema analysis for \'copyprivate\' clause.","[OPENMP] Parsing and sema analysis for \'copyprivate\' clause."}, | ||
[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);"}}, | [j]={{x,3616,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n // ...\n if (Reason != PDSA_Implicit) {\n // ...\n } else if (DVar.ImplicitDSALoc.isValid()) {\n SemaRef.Diag(DVar.ImplicitDSALoc, diag::note_omp_implicit_dsa) << getOpenMPClauseName(DVar.CKind);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 495: | Line 495: | ||
[f]=J, | [f]=J, | ||
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982"}, | [i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982"}, | ||
[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);"}}, | [j]={{x,21319,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n // ...\n bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n // ...\n if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n // ...\n if (!OASE->getLength()->isValueDependent() && OASE->getLength()->EvaluateAsInt(ResultR, SemaRef.getASTContext()) && !ResultR.Val.getInt().isOne()) {\n // ...\n SemaRef.Diag(OASE->getLength()->getExprLoc(), diag::note_omp_invalid_length_on_this_ptr_mapping);"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 510: | Line 510: | ||
[f]=J, | [f]=J, | ||
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982"}, | [i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982"}, | ||
[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);"}}, | [j]={{x,21328,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n // ...\n bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n // ...\n if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n // ...\n if (OASE->getLowerBound() && !OASE->getLowerBound()->isValueDependent() && OASE->getLowerBound()->EvaluateAsInt(ResultL, SemaRef.getASTContext()) && !ResultL.Val.getInt().isZero()) {\n // ...\n SemaRef.Diag(OASE->getLowerBound()->getExprLoc(), diag::note_omp_invalid_lower_bound_on_this_ptr_mapping);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 525: | Line 525: | ||
[f]=J, | [f]=J, | ||
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982"}, | [i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982"}, | ||
[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);"}}, | [j]={{x,21240,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n // ...\n bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {\n // ...\n if (const auto *TE = dyn_cast<CXXThisExpr>(E->IgnoreParenCasts())) {\n // ...\n if (!AE->getIdx()->isValueDependent() && AE->getIdx()->EvaluateAsInt(Result, SemaRef.getASTContext()) && !Result.Val.getInt().isZero()) {\n // ...\n SemaRef.Diag(AE->getIdx()->getExprLoc(), diag::note_omp_invalid_subscript_on_this_ptr_map);"}}, | ||
[k]={ | [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]\'"} | ["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]\'"} | ||
Line 540: | Line 540: | ||
[f]=J, | [f]=J, | ||
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)","[OPENMP] Loop canonical form analysis (Sema)"}, | [i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)","[OPENMP] Loop canonical form analysis (Sema)"}, | ||
[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;"}}, | [j]={{x,8026,"bool OpenMPIterationSpaceChecker::setStep(Expr *NewStep, bool Subtract) {\n // ...\n if (!NewStep->isValueDependent()) {\n // ...\n if (UB && (IsConstZero || (*TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract)) : (IsConstPos || (IsUnsigned && !Subtract))))) {\n // ...\n SemaRef.Diag(ConditionLoc, diag::note_omp_loop_cond_requres_compatible_incr) << *TestIsLessOp << ConditionSrcRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 554: | Line 554: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[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;"}}, | [j]={{x,7584,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n // Check if variant function is not marked with declare variant directive.\n if (NewFD->hasAttrs() && NewFD->hasAttr<OMPDeclareVariantAttr>()) {\n // ...\n Diag(SR.getBegin(), diag::note_omp_marked_declare_variant_here) << SR;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:173:1: note: marked as \'declare variant\' here"} | ["clang/test/OpenMP/declare_variant_messages.c"]={"clang/test/OpenMP/declare_variant_messages.c:173:1: note: marked as \'declare variant\' here"} | ||
Line 570: | Line 570: | ||
[f]=J, | [f]=J, | ||
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target","[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","[OPENMP5.0]Add support for device_type clause in declare target"}, | ||
[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;"}}, | [j]={{x,2722,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n // ...\n if (LangOpts.OpenMPIsTargetDevice && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_Host) {\n // ...\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 // ...\n if (!LangOpts.OpenMPIsTargetDevice && !LangOpts.OpenMPOffloadMandatory && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_NoHost) {\n // ...\n Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << NoHostDevTy;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 585: | Line 585: | ||
[f]=J, | [f]=J, | ||
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support.","[OPENMP] \'omp teams\' directive basic support."}, | [i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support.","[OPENMP] \'omp teams\' directive basic support."}, | ||
[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);"}}, | [j]={{x,13062,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\n if (!OMPTeamsFound) {\n // ...\n Diag(S->getBeginLoc(), diag::note_omp_nested_statement_here) << isa<OMPExecutableDirective>(S);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 600: | Line 600: | ||
[f]=J, | [f]=J, | ||
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support.","[OPENMP] \'omp teams\' directive basic support."}, | [i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support.","[OPENMP] \'omp teams\' directive basic support."}, | ||
[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);"}}, | [j]={{x,13061,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\n if (!OMPTeamsFound) {\n // ...\n Diag(DSAStack->getInnerTeamsRegionLoc(), diag::note_omp_nested_teams_construct_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 615: | Line 615: | ||
[f]=J, | [f]=J, | ||
[i]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive.","[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive."}, | [i]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive.","[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive."}, | ||
[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);"}}, | [j]={{x,10826,"StmtResult Sema::ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n for (const OMPClause *Clause : Clauses) {\n // ...\n if (Copyprivate && Nowait) {\n // ...\n Diag(Nowait->getBeginLoc(), diag::note_omp_nowait_clause_here);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/single_copyprivate_messages.cpp"]={"clang/test/OpenMP/single_copyprivate_messages.cpp:179:35: note: \'nowait\' clause is here"} | ["clang/test/OpenMP/single_copyprivate_messages.cpp"]={"clang/test/OpenMP/single_copyprivate_messages.cpp:179:35: note: \'nowait\' clause is here"} | ||
Line 630: | Line 630: | ||
[f]=J, | [f]=J, | ||
[i]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'.","[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'."}, | [i]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'.","[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'."}, | ||
[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;"}}, | [j]={{x,4766,"static bool checkOrderedOrderSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n // ...\n if (Ordered && Order) {\n // ...\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 // ...\n if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n // ...\n } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n // ...\n } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) {\n // ...\n } else if (TC || Clauses.empty()) {\n if (const Expr *Param = DSAStack->getParentOrderedRegionParam().first) {\n // ...\n Diag(Param->getBeginLoc(), diag::note_omp_ordered_param) << 1;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/for_misc_messages.c"]={"clang/test/OpenMP/for_misc_messages.c:419:17: note: \'ordered\' clause"} | ["clang/test/OpenMP/for_misc_messages.c"]={"clang/test/OpenMP/for_misc_messages.c:419:17: note: \'ordered\' clause"} | ||
Line 644: | Line 644: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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();"}}, | [j]={{x,23913,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n // ...\n for (const UsesAllocatorsData &D : Data) {\n // ...\n // Check allocator expression.\n if (D.Allocator->isTypeDependent()) {\n // ...\n } else {\n // ...\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 // ...\n Diag(D.Allocator->getExprLoc(), diag::note_omp_predefined_allocator) << cast<NamedDecl>(DRE->getDecl())->getName() << D.Allocator->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 660: | Line 660: | ||
[f]=J, | [f]=J, | ||
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'","OpenMP: Data-sharing attributes analysis and clause \'shared\'"}, | [i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'","OpenMP: Data-sharing attributes analysis and clause \'shared\'"}, | ||
[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());"}}, | [j]={{x,3612,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n // ...\n if (Reason != PDSA_Implicit) {\n SemaRef.Diag(ReportLoc, diag::note_omp_predetermined_dsa) << Reason << ReportHint << getOpenMPDirectiveName(Stack->getCurrentDirective());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 675: | Line 675: | ||
[f]=J, | [f]=J, | ||
[i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable.","[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.","[OPENMP]Warn if the different allocator is used for the variable."}, | ||
[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;"}}, | [j]={{x,3347,"static bool checkPreviousOMPAllocateAttribute(Sema &S, DSAStackTy *Stack, Expr *RefExpr, VarDecl *VD, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorKind, Expr *Allocator) {\n // ...\n if (!AllocatorsMatch) {\n // ...\n S.Diag(PrevAllocatorLoc, diag::note_omp_previous_allocator) << PrevAllocatorRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 689: | Line 689: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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());"}}, | [j]={{x,11101,"/// Find and diagnose mutually exclusive clause kinds.\nstatic bool checkMutuallyExclusiveClauses(Sema &S, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPClauseKind> MutuallyExclusiveClauses) {\n // ...\n for (const OMPClause *C : Clauses) {\n if (llvm::is_contained(MutuallyExclusiveClauses, C->getClauseKind())) {\n if (!PrevClause) {\n // ...\n } else if (PrevClause->getClauseKind() != C->getClauseKind()) {\n // ...\n S.Diag(PrevClause->getBeginLoc(), diag::note_omp_previous_clause) << getOpenMPClauseName(PrevClause->getClauseKind());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 705: | Line 705: | ||
[f]=J, | [f]=J, | ||
[i]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'.","[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'."}, | [i]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'.","[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'."}, | ||
[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);"}}, | [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 // ...\n if (CurrentRegion == OMPD_cancellation_point || CurrentRegion == OMPD_cancel) {\n // ...\n } else if (CurrentRegion == OMPD_master || CurrentRegion == OMPD_masked) {\n // ...\n } else if (CurrentRegion == OMPD_critical && CurrentName.getName()) {\n // ...\n if (DeadLock) {\n // ...\n if (PreviousCriticalLoc.isValid())\n SemaRef.Diag(PreviousCriticalLoc, diag::note_omp_previous_critical_region);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 719: | Line 719: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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\";"}}, | [j]={{x,11293,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n // Check that only one instance of scan directives is used in the same outer\n // region.\n if (DSAStack->doesParentHasScanDirective()) {\n // ...\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 // ...\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 // ...\n Diag(DSAStack->getParentOrderedDirectiveLoc(), diag::note_omp_previous_directive) << \"ordered\";"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 734: | Line 734: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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);"}}, | [j]={{x,2821,"/// Check consistency of the reduction clauses.\nstatic void checkReductionClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n // ...\n if (InscanFound) {\n for (OMPClause *C : Clauses) {\n // ...\n if (RC->getModifier() != OMPC_REDUCTION_inscan) {\n // ...\n S.Diag(InscanLoc, diag::note_omp_previous_inscan_reduction);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 749: | Line 749: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[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);"}}, | [j]={{x,11231,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\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 // ...\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 // ...\n for (const OMPClause *C : Clauses) {\n // ...\n case OMPC_capture:\n case OMPC_compare: {\n if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n // ...\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 // ...\n for (const OMPClause *C : Clauses) {\n // ...\n case OMPC_capture:\n case OMPC_compare: {\n if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n // ...\n } else {\n // ...\n if (!EncounteredAtomicKinds.insert(C->getClauseKind()).second) {\n // ...\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 // ...\n for (const OMPClause *C : Clauses) {\n // ...\n case OMPC_seq_cst:\n case OMPC_acq_rel:\n case OMPC_acquire:\n case OMPC_release:\n case OMPC_relaxed: {\n if (MemOrderKind != OMPC_unknown) {\n // ...\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 // ...\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 // ...\n Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 765: | Line 765: | ||
[f]=J, | [f]=J, | ||
[i]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause.","[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.","[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause."}, | ||
[j]={{x,5320,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n // If any if clause on the directive includes a directive-name-modifier then\n // all if clauses on the directive must include a directive-name-modifier.\n if (FoundNameModifiers[OMPD_unknown] && NamedModifiersNumber > 0) {\n for (SourceLocation Loc : NameModifierLoc) {\n S.Diag(Loc, diag::note_omp_previous_named_if_clause);"}}, | [j]={{x,5320,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n // ...\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 // ...\n for (SourceLocation Loc : NameModifierLoc) {\n S.Diag(Loc, diag::note_omp_previous_named_if_clause);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 780: | Line 780: | ||
[f]=J, | [f]=J, | ||
[i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause.","[OPENMP] Initial support for \'in_reduction\' clause."}, | [i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause.","[OPENMP] Initial support for \'in_reduction\' clause."}, | ||
[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();"}}, | [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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n if ((DeclareReductionRef.isUnset() && IsParentReductionOp) || (DeclareReductionRef.isUsable() && IsParentBOK) || (IsParentBOK && BOK != ParentBOK) || IsParentReductionOp) {\n // ...\n if (EmitError) {\n // ...\n S.Diag(ParentSR.getBegin(), diag::note_omp_previous_reduction_identifier) << ParentSR << (IsParentBOK ? ParentBOKDSA.RefExpr : ParentReductionOpDSA.RefExpr)->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 794: | Line 794: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[j]={{S,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());"},{S,944,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n // Warn on gotos out of __finally blocks.\n if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n // less nested scope. Check if it crosses a __finally along the way.\n for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {"}}, | [j]={{S,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 // ...\n default:\n if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n if (!ED->isStandaloneDirective()) {\n // ...\n Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{S,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 // ...\n // Warn on gotos out of __finally blocks.\n if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n // less nested scope. Check if it crosses a __finally along the way.\n for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n // ...\n if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/master_messages.cpp"]={"clang/test/OpenMP/master_messages.cpp:66:3: note: jump bypasses OpenMP structured block"} | ["clang/test/OpenMP/master_messages.cpp"]={"clang/test/OpenMP/master_messages.cpp:66:3: note: jump bypasses OpenMP structured block"} | ||
Line 810: | Line 810: | ||
[f]=J, | [f]=J, | ||
[i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause"}, | [i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause"}, | ||
[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);"}}, | [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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n if (DVar.CKind == OMPC_reduction) {\n // ...\n if (DVar.RefExpr)\n S.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_referenced);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 824: | Line 824: | ||
[h]=m, | [h]=m, | ||
[f]=J, | [f]=J, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[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\";"}}, | [j]={{x,3545,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n // ...\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 // ...\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 // ...\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 // ...\n } else if (!AtomicLoc.isInvalid() && isa<OMPAtomicDefaultMemOrderClause>(CNew)) {\n // ...\n Diag(AtomicLoc, diag::note_omp_requires_encountered_directive) << \"atomic\";"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 840: | Line 840: | ||
[f]=J, | [f]=J, | ||
[i]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause","[OPENMP] Add support for OMP5 requires directive + unified_address clause"}, | [i]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause","[OPENMP] Add support for OMP5 requires directive + unified_address clause"}, | ||
[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());"}}, | [j]={{x,681,"/// Stack for tracking declarations used in OpenMP directives and\n/// clauses and their data-sharing attributes.\nclass DSAStackTy {\n // ...\n /// Checks for a duplicate clause amongst previously declared requires\n /// directives\n bool hasDuplicateRequiresClause(ArrayRef<OMPClause *> ClauseList) const {\n // ...\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 // ...\n SemaRef.Diag(CPrev->getBeginLoc(), diag::note_omp_requires_previous_clause) << getOpenMPClauseName(CPrev->getClauseKind());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 855: | Line 855: | ||
[f]=J, | [f]=J, | ||
[i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause.","[OPENMP] Codegen for \'firstprivate\' clause."}, | [i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause.","[OPENMP] Codegen for \'firstprivate\' clause."}, | ||
[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);"}} | [j]={{x,18440,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\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"]={ | ||
Line 867: | Line 867: | ||
[f]=l, | [f]=l, | ||
[i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs","[OpenCL] Fix access qualifiers handling for typedefs"}, | [i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs","[OpenCL] Fix access qualifiers handling for typedefs"}, | ||
[j]={{ | [j]={{ib,8443,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // ...\n S.Diag(TypedefTy->getDecl()->getBeginLoc(), diag::note_opencl_typedef_access_qualifier) << PrevAccessQual;"}} | ||
}, | }, | ||
["note_operator_arrow_depth"]={ | ["note_operator_arrow_depth"]={ | ||
Line 878: | Line 878: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"79c927bfe9fc",1383766311, | [i]={"79c927bfe9fc",1383766311,Hc,Hc}, | ||
[j]={{ | [j]={{hc,7591,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\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 // ...\n while (BaseType->isRecordType()) {\n if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n // ...\n Diag(OpLoc, diag::note_operator_arrow_depth) << getLangOpts().ArrowDepth;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 893: | Line 893: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"79c927bfe9fc",1383766311, | [i]={"79c927bfe9fc",1383766311,Hc,Hc}, | ||
[j]={{ | [j]={{hc,7537,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n // ...\n for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n if (I == SkipStart) {\n // ...\n } else {\n S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrow_here) << OperatorArrows[I]->getCallResultType();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 908: | Line 908: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"79c927bfe9fc",1383766311, | [i]={"79c927bfe9fc",1383766311,Hc,Hc}, | ||
[j]={{ | [j]={{hc,7533,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n // ...\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]={ | [k]={ | ||
["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:10:10: note: (skipping 2 \'operator->\'s in backtrace)"} | ["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:10:10: note: (skipping 2 \'operator->\'s in backtrace)"} | ||
Line 924: | Line 924: | ||
[f]=l, | [f]=l, | ||
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'.","Add support for attribute \'noescape\'."}, | [i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'.","Add support for attribute \'noescape\'."}, | ||
[j]={{z,17985,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n if (OldFT->hasExtParameterInfos()) {\n for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)\n // A parameter of the overriding method should be annotated with noescape\n // if the corresponding parameter of the overridden method is annotated.\n if (OldFT->getExtParameterInfo(I).isNoEscape() && !NewFT->getExtParameterInfo(I).isNoEscape()) {\n Diag(Old->getParamDecl(I)->getLocation(), diag::note_overridden_marked_noescape);"},{C,119,"/// Issue a warning if the parameter of the overridden method is non-escaping\n/// but the parameter of the overriding method is not.\nstatic bool diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, Sema &S) {\n if (OldD->hasAttr<NoEscapeAttr>() && !NewD->hasAttr<NoEscapeAttr>()) {\n S.Diag(OldD->getLocation(), diag::note_overridden_marked_noescape);"}}, | [j]={{z,17985,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\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 // ...\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 // ...\n S.Diag(OldD->getLocation(), diag::note_overridden_marked_noescape);"}}, | ||
[k]={ | [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))"} | ["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))"} | ||
Line 939: | Line 939: | ||
[f]=l, | [f]=l, | ||
[i]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an"}, | [i]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an"}, | ||
[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);"}}, | [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 // ...\n if (D->hasAttrs()) {\n // ...\n for (unsigned i = 0, e = Attrs.size(); i != e;) {\n // ...\n if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n if (OverrideOrImpl) {\n // ...\n if (AMK == AMK_Override)\n Diag(CI.getLoc(), diag::note_overridden_method);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 954: | Line 954: | ||
[f]=l, | [f]=l, | ||
[i]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t...","Add return type checking for overriding virtual functions. We currently don\'t check covariance but that\'s next."}, | [i]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t...","Add return type checking for overriding virtual functions. We currently don\'t check covariance but that\'s next."}, | ||
[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();"},{ | [j]={{w,19002,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n // ...\n if (CXXRecord) {\n // ...\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 // ...\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 // ...\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 // ...\n if (!isa<CXXConstructorDecl>(NewFD)) {\n // ...\n if (Method && Method->isVirtual()) {\n if (getLangOpts().CPlusPlus20) {\n // ...\n } else {\n // ...\n if (WrittenVirtual != Method)\n Diag(WrittenVirtual->getLocation(), diag::note_overridden_virtual_function);"},{z,3310,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n // ...\n if (MD->size_overridden_methods() > 0) {\n auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) {\n // ...\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 // ...\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 // ...\n for (const CXXMethodDecl *O : MD->overridden_methods()) {\n if (Report(O)) {\n // ...\n S.Diag(O->getLocation(), diag::note_overridden_virtual_function);"},{z,18015,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{z,18052,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n // The return types aren\'t either both pointers or references to a class type.\n if (NewClassTy.isNull()) {\n // ...\n Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18077,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n // ...\n // Check if the new class derives from the old class.\n if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {\n // ...\n Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18093,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n // ...\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 // ...\n Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18105,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n // The qualifiers of the return types must be the same.\n if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {\n // ...\n Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{z,18117,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n // The new class type must have the same or less qualifiers as the old type.\n if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {\n // ...\n Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{Qc,995,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 969: | Line 969: | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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);"}}, | [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 // ...\n case OR_Success: {\n // ...\n if (FnDecl) {\n // ...\n if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n // ...\n if (!AmbiguousWith.empty()) {\n // ...\n if (AmbiguousWithSelf) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 983: | Line 983: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[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);"}} | [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 // ...\n case OR_Success: {\n // ...\n if (FnDecl) {\n // ...\n if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n // ...\n if (!AmbiguousWith.empty()) {\n // ...\n if (AmbiguousWithSelf) {\n // ...\n } else {\n // ...\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"]={ | ||
Line 995: | Line 995: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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);"}}, | [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 // ...\n case OR_Success: {\n // ...\n if (FnDecl) {\n // ...\n if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n // ...\n if (!AmbiguousWith.empty()) {\n // ...\n if (AmbiguousWithSelf) {\n Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_self);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,010: | Line 1,010: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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);"}} | [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 // ...\n case OR_Success: {\n // ...\n if (FnDecl) {\n // ...\n if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n // ...\n if (!AmbiguousWith.empty()) {\n // ...\n if (AmbiguousWithSelf) {\n // ...\n } else {\n Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_selected_candidate);"}} | ||
}, | }, | ||
["note_ovl_builtin_candidate"]={ | ["note_ovl_builtin_candidate"]={ | ||
Line 1,022: | Line 1,022: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[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;"}}, | [j]={{E,11681,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n // ...\n if (Cand->Conversions.size() == 1) {\n // ...\n S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"},{E,11686,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n // ...\n if (Cand->Conversions.size() == 1) {\n // ...\n } else {\n // ...\n S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"}}, | ||
[k]={ | [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::*)"} | ["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::*)"} | ||
Line 1,037: | Line 1,037: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"fd0b2f8fe486",1262770994, | [i]={"fd0b2f8fe486",1262770994,Mc,Mc}, | ||
[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);"}}, | [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 // ...\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 // ...\n void EliminateAllExceptMostSpecializedTemplate() {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,053: | Line 1,053: | ||
[f]=l, | [f]=l, | ||
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason","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","Improve the reporting of non-viable overload candidates by noting the reason"}, | ||
[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();"}}, | [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 // ...\n if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,068: | Line 1,068: | ||
[f]=l, | [f]=l, | ||
[i]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","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","PR11857: When the wrong number of arguments are provided for a function"}, | ||
[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();"}}, | [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 // ...\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]={ | [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"} | ["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"} | ||
Line 1,082: | Line 1,082: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"47000997193c",1263439737, | [i]={"47000997193c",1263439737,Bc,Bc}, | ||
[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;"}}, | [j]={{E,10841,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n // ...\n if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n if (isObjectArgument)\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,097: | Line 1,097: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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();"}}, | [j]={{E,10837,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 1,113: | Line 1,113: | ||
[f]=l, | [f]=l, | ||
[i]={"a644f9cb73a1",1311182049,"arc-objc++: Issue an arc specific diagnostic when overload resolution","arc-objc++: Issue an arc specific diagnostic when overload resolution"}, | [i]={"a644f9cb73a1",1311182049,"arc-objc++: Issue an arc specific diagnostic when overload resolution","arc-objc++: Issue an arc specific diagnostic when overload resolution"}, | ||
[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;"}}, | [j]={{E,10970,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (isa<ObjCObjectPointerType>(CFromTy) && isa<PointerType>(CToTy)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,128: | Line 1,128: | ||
[f]=l, | [f]=l, | ||
[i]={"fb0c0d37b7f2",1277950485,"Extend the \"cannot convert from base class pointer to derived class","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","Extend the \"cannot convert from base class pointer to derived class"}, | ||
[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;"}}, | [j]={{E,10957,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,143: | Line 1,143: | ||
[f]=l, | [f]=l, | ||
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason","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","Improve the reporting of non-viable overload candidates by noting the reason"}, | ||
[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);"}}, | [j]={{E,10984,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,158: | Line 1,158: | ||
[f]=l, | [f]=l, | ||
[i]={"6d174646dd1a",1264234249,"Produce a special diagnostic when users call a function with an argument of","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","Produce a special diagnostic when users call a function with an argument of"}, | ||
[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);"}}, | [j]={{E,10916,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (TempFromTy->isIncompleteType()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,172: | Line 1,172: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"47000997193c",1263439737, | [i]={"47000997193c",1263439737,Bc,Bc}, | ||
[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;"}}, | [j]={{E,10875,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n // ...\n if (isObjectArgument) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,187: | Line 1,187: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"47000997193c",1263439737, | [i]={"47000997193c",1263439737,Bc,Bc}, | ||
[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);"}}, | [j]={{E,10871,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,203: | Line 1,203: | ||
[f]=l, | [f]=l, | ||
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument","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","Note that an overload candidate was non-viable because template argument"}, | ||
[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);"}}, | [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 // ...\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]={ | [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"} | ["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"} | ||
Line 1,218: | Line 1,218: | ||
[f]=l, | [f]=l, | ||
[i]={"aec25847606f",1303859806,"When computing Objective-C pointer conversions in C++, retain","When computing Objective-C pointer conversions in C++, retain"}, | [i]={"aec25847606f",1303859806,"When computing Objective-C pointer conversions in C++, retain","When computing Objective-C pointer conversions in C++, retain"}, | ||
[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;"}}, | [j]={{E,10859,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,233: | Line 1,233: | ||
[f]=l, | [f]=l, | ||
[i]={"a72462cdf43b",1316886512,"Add a special note for overload resolution when an initializer list argument","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","Add a special note for overload resolution when an initializer list argument"}, | ||
[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);"}}, | [j]={{E,10897,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 1,248: | Line 1,248: | ||
[f]=l, | [f]=l, | ||
[i]={"fb7ad0f57a0c",1265078572,"Improve the diagnostic used when an incompatible overload set is passed","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","Improve the diagnostic used when an incompatible overload set is passed"}, | ||
[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;"}}, | [j]={{E,10808,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (FromTy == S.Context.OverloadTy) {\n // ...\n S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << ToTy << Name << I + 1;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,263: | Line 1,263: | ||
[f]=l, | [f]=l, | ||
[i]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'."}, | [i]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'."}, | ||
[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;"}}, | [j]={{E,10850,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\n if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,278: | Line 1,278: | ||
[f]=l, | [f]=l, | ||
[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets"}, | [i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets"}, | ||
[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 */"}}, | [j]={{E,11397,"/// CUDA: diagnose an invalid call across targets.\nstatic void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {\n // ...\n S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,292: | Line 1,292: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[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;"}}, | [j]={{E,10885,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,307: | Line 1,307: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"349636d2bfc3",1575555459, | [i]={"349636d2bfc3",1575555459,Tb,Tb}, | ||
[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 */;"}}, | [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 // ...\n case ovl_fail_constraints_not_satisfied: {\n // ...\n S.Diag(Fn->getLocation(), diag::note_ovl_candidate_constraints_not_satisfied) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,323: | Line 1,323: | ||
[f]=l, | [f]=l, | ||
[i]={"9b534547250a",1451527374,"Improve diagnostic for the case where a function template candidate is rejected","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","Improve diagnostic for the case where a function template candidate is rejected"}, | ||
[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);"}}, | [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 // ...\n case Sema::TDK_DeducedMismatch:\n case Sema::TDK_DeducedMismatchNested: {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 1,337: | Line 1,337: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"fd0b2f8fe486",1262770994, | [i]={"fd0b2f8fe486",1262770994,Mc,Mc}, | ||
[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);"}}, | [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 // ...\n // Note deleted candidates, but only if they\'re viable.\n if (Cand->Viable) {\n if (Fn->isDeleted()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,353: | Line 1,353: | ||
[f]=l, | [f]=l, | ||
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:","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:","A little tweak to the SFINAE condition reporting. Don\'t say:"}, | ||
[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;"}}, | [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 // ...\n case Sema::TDK_SubstitutionFailure: {\n // ...\n if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_enable_if) {\n // ...\n S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if) << \"\'enable_if\'\" << TemplateArgString;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 1,368: | Line 1,368: | ||
[f]=l, | [f]=l, | ||
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang."}, | [i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang."}, | ||
[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();"}}, | [j]={{D,7023,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n // ...\n if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n // ...\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 // ...\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 // ...\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 // ...\n Diag(Method->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"}}, | ||
[k]={ | [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>"} | ["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>"} | ||
Line 1,383: | Line 1,383: | ||
[f]=l, | [f]=l, | ||
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition.","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.","Customize the SFINAE diagnostics for enable_if to provide the failed condition."}, | ||
[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;"}}, | [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 // ...\n case Sema::TDK_SubstitutionFailure: {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 1,397: | Line 1,397: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"349636d2bfc3",1575555459, | [i]={"349636d2bfc3",1575555459,Tb,Tb}, | ||
[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());"}}, | [j]={{E,11480,"static void DiagnoseFailedExplicitSpec(Sema &S, OverloadCandidate *Cand) {\n // ...\n S.Diag(First->getLocation(), diag::note_ovl_candidate_explicit) << Kind << (ES.getExpr() ? 1 : 0) << (ES.getExpr() ? ES.getExpr()->getSourceRange() : SourceRange());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,413: | Line 1,413: | ||
[f]=l, | [f]=l, | ||
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that","Improve overload-candidate diagnostic for a function template that"}, | [i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that","Improve overload-candidate diagnostic for a function template that"}, | ||
[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();"}}, | [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 // ...\n case Sema::TDK_InvalidExplicitArguments:\n // ...\n if (ParamD->getDeclName())\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_named) << ParamD->getDeclName();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,428: | Line 1,428: | ||
[f]=l, | [f]=l, | ||
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that","Improve overload-candidate diagnostic for a function template that"}, | [i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that","Improve overload-candidate diagnostic for a function template that"}, | ||
[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);"}}, | [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 // ...\n case Sema::TDK_InvalidExplicitArguments:\n // ...\n if (ParamD->getDeclName())\n // ...\n else {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) << (index + 1);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,443: | Line 1,443: | ||
[f]=l, | [f]=l, | ||
[i]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang."}, | [i]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang."}, | ||
[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;"}}, | [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 // ...\n if (Complain) {\n // ...\n if (InOverloadResolution)\n S.Diag(FD->getLocation(), diag::note_ovl_candidate_has_pass_object_size_params) << ParamNo;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,458: | Line 1,458: | ||
[f]=l, | [f]=l, | ||
[i]={"578a1f8c6d27",1418521613,"If a non-template constructor instantiated to X(X),","If a non-template constructor instantiated to X(X),"}, | [i]={"578a1f8c6d27",1418521613,"If a non-template constructor instantiated to X(X),","If a non-template constructor instantiated to X(X),"}, | ||
[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);"}}, | [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 // ...\n case ovl_fail_illegal_constructor: {\n S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor) << (Fn->getPrimaryTemplate() ? 1 : 0);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,473: | Line 1,473: | ||
[f]=l, | [f]=l, | ||
[i]={"c25ea86d4392",1561047808,"[Sema] Diagnose addr space mismatch while constructing objects","[Sema] Diagnose addr space mismatch while constructing objects"}, | [i]={"c25ea86d4392",1561047808,"[Sema] Diagnose addr space mismatch while constructing objects","[Sema] Diagnose addr space mismatch while constructing objects"}, | ||
[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;"}}, | [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 // ...\n case ovl_fail_object_addrspace_mismatch: {\n // ...\n S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor_adrspace_mismatch) << QualsForPrinting;"}}, | ||
[k]={ | [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)))\'"} | ["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)))\'"} | ||
Line 1,488: | Line 1,488: | ||
[f]=l, | [f]=l, | ||
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument","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","Note that an overload candidate was non-viable because template argument"}, | ||
[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();"}}, | [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 // ...\n case Sema::TDK_Incomplete: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction) << ParamD->getDeclName();"}}, | ||
[k]={ | [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"]={nc,nc,nc,nc,nc,nc,nc,"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\'"} | ||
} | } | ||
}, | }, | ||
Line 1,503: | Line 1,503: | ||
[f]=l, | [f]=l, | ||
[i]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value","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","Fix template argument deduction when a parameter pack has a value"}, | ||
[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();"}}, | [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 // ...\n case Sema::TDK_IncompletePack: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction_pack) << ParamD->getDeclName() << (DeductionFailure.getFirstArg()->pack_size() + 1) << *DeductionFailure.getFirstArg();"}}, | ||
[k]={ | [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>"} | ["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>"} | ||
Line 1,518: | Line 1,518: | ||
[f]=l, | [f]=l, | ||
[i]={"3626a5cac2ed",1273340492,"When printing a non-viable overload candidate that failed due to","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","When printing a non-viable overload candidate that failed due to"}, | ||
[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();"}}, | [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 // ...\n case Sema::TDK_Inconsistent: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction) << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg();"}}, | ||
[k]={ | [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\')"} | ["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\')"} | ||
Line 1,533: | Line 1,533: | ||
[f]=l, | [f]=l, | ||
[i]={"593d6a168f45",1482456639,"When merging two deduced non-type template arguments for the same parameter,","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,","When merging two deduced non-type template arguments for the same parameter,"}, | ||
[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;"}}, | [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 // ...\n case Sema::TDK_Inconsistent: {\n // ...\n if (isa<TemplateTypeParmDecl>(ParamD))\n // ...\n else if (isa<NonTypeTemplateParmDecl>(ParamD)) {\n // ...\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]={ | [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\')"} | ["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\')"} | ||
Line 1,563: | Line 1,563: | ||
[f]=l, | [f]=l, | ||
[i]={"f9c59b71220c",1483911944,"PR30305: Implement proposed DR resolution to prevent slicing via inherited constructor.","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.","PR30305: Implement proposed DR resolution to prevent slicing via inherited constructor."}, | ||
[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();"}}, | [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 // ...\n case ovl_fail_inhctor_slice:\n // ...\n S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inherited_constructor_slice) << (Fn->getPrimaryTemplate() ? 1 : 0) << Fn->getParamDecl(0)->getType()->isRValueReferenceType();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,578: | Line 1,578: | ||
[f]=l, | [f]=l, | ||
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a","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","When printing an overload candidate that failed due to SFINAE, print a"}, | ||
[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);"}} | [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 // ...\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"]={ | ||
Line 1,590: | Line 1,590: | ||
[f]=l, | [f]=l, | ||
[i]={"44ecdbdc6134",1359609589,"Improve \'failed template argument deduction\' diagnostic for the case where we","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","Improve \'failed template argument deduction\' diagnostic for the case where we"}, | ||
[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;"}}, | [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 // ...\n case Sema::TDK_NonDeducedMismatch: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch) << FirstTA << SecondTA;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,605: | Line 1,605: | ||
[f]=l, | [f]=l, | ||
[i]={"e373235c7cf8",1365455500,"Fix PR15634, better error message for template deduction failure.","Fix PR15634, better error message for template deduction failure."}, | [i]={"e373235c7cf8",1365455500,"Fix PR15634, better error message for template deduction failure.","Fix PR15634, better error message for template deduction failure."}, | ||
[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();"}} | [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 // ...\n case Sema::TDK_NonDeducedMismatch: {\n // ...\n if (FirstTA.getKind() == TemplateArgument::Template && SecondTA.getKind() == TemplateArgument::Template) {\n // ...\n if (FirstTN.getKind() == TemplateName::Template && SecondTN.getKind() == TemplateName::Template) {\n if (FirstTN.getAsTemplateDecl()->getName() == SecondTN.getAsTemplateDecl()->getName()) {\n // ...\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"]={ | ||
Line 1,617: | Line 1,617: | ||
[f]=l, | [f]=l, | ||
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a","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","When printing an overload candidate that failed due to SFINAE, print a"}, | ||
[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;"}}, | [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 // ...\n case Sema::TDK_SubstitutionFailure: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_substitution_failure) << TemplateArgString << SFINAEArgString << R;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,632: | Line 1,632: | ||
[f]=l, | [f]=l, | ||
[i]={"42d7d19710d0",1280999108,"TDK_InconsistentQuals is really totally different from TDK_Inconsistent.","TDK_InconsistentQuals is really totally different from TDK_Inconsistent."}, | [i]={"42d7d19710d0",1280999108,"TDK_InconsistentQuals is really totally different from TDK_Inconsistent.","TDK_InconsistentQuals is really totally different from TDK_Inconsistent."}, | ||
[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;"}}, | [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 // ...\n case Sema::TDK_Underqualified: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified) << ParamD->getDeclName() << Arg << NonCanonParam;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,646: | Line 1,646: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"bd8791610948",1569403888, | [i]={"bd8791610948",1569403888,cc,cc}, | ||
[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;"}}, | [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 // ...\n if (FD->getTrailingRequiresClause()) {\n // ...\n if (!Satisfaction.IsSatisfied) {\n if (Complain) {\n if (InOverloadResolution) {\n // ...\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 // ...\n case Sema::TDK_ConstraintsNotSatisfied: {\n // ...\n S.Diag(Templated->getLocation(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"}}, | ||
[k]={ | [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>]"} | ["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>]"} | ||
Line 1,661: | Line 1,661: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"fd0b2f8fe486",1262770994, | [i]={"fd0b2f8fe486",1262770994,Mc,Mc}, | ||
[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;"}}, | [j]={{E,11666,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n // ...\n if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n // ...\n } else {\n S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) << FnType;"}}, | ||
[k]={ | [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)\'"} | ["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)\'"} | ||
Line 1,677: | Line 1,677: | ||
[f]=l, | [f]=l, | ||
[i]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas.","[Clang] Fix constraint checking of non-generic lambdas."}, | [i]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas.","[Clang] Fix constraint checking of non-generic lambdas."}, | ||
[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;"}}, | [j]={{E,11660,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n // ...\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]={ | [k]={ | ||
["clang/test/SemaTemplate/concepts.cpp"]={"clang/test/SemaTemplate/concepts.cpp:727:5: note: conversion candidate \'operator int (*)(int)\' not viable: constraints not satisfied"} | ["clang/test/SemaTemplate/concepts.cpp"]={"clang/test/SemaTemplate/concepts.cpp:727:5: note: conversion candidate \'operator int (*)(int)\' not viable: constraints not satisfied"} | ||
Line 1,692: | Line 1,692: | ||
[f]=l, | [f]=l, | ||
[i]={"2b99c6fc4f3e",1276235867,"Add an option -fshow-overloads=best|all to limit the number of overload","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","Add an option -fshow-overloads=best|all to limit the number of overload"}, | ||
[j]={{ | [j]={{gd,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 // ...\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 // ...\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 // ...\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 // ...\n if (I != E)\n S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,707: | Line 1,707: | ||
[f]=l, | [f]=l, | ||
[i]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar...","Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declaration. This removes a FIXME from the code."}, | [i]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar...","Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declaration. This removes a FIXME from the code."}, | ||
[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();"}}, | [j]={{v,1898,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n // ...\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 // ...\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 // ...\n if (I->args_size())\n S.Diag(AL.getLoc(), diag::note_ownership_returns_index_mismatch) << Idx.getSourceIndex() << Ex->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/attr-ownership.cpp"]={"clang/test/Sema/attr-ownership.cpp:6:22: note: declared with index 3 here"} | ["clang/test/Sema/attr-ownership.cpp"]={"clang/test/Sema/attr-ownership.cpp:6:22: note: declared with index 3 here"} | ||
Line 1,722: | Line 1,722: | ||
[f]=l, | [f]=l, | ||
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or","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","Whenever we complain about a failed initialization of a function or"}, | ||
[j]={{ | [j]={{bb,6965,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n // ...\n if (Entity.getDecl()->getDeclName())\n // ...\n else\n S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,736: | Line 1,736: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"349636d2bfc3",1575555459, | [i]={"349636d2bfc3",1575555459,Tb,Tb}, | ||
[j]={{ | [j]={{mb,1065,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::ParameterMappingSubstitution:\n Diags.Report(Active->PointOfInstantiation, diag::note_parameter_mapping_substitution_here) << Active->InstantiationRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,752: | Line 1,752: | ||
[f]=l, | [f]=l, | ||
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or","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","Whenever we complain about a failed initialization of a function or"}, | ||
[j]={{ | [j]={{bb,6962,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n // ...\n if (Entity.getDecl()->getDeclName())\n S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) << Entity.getDecl()->getDeclName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,767: | Line 1,767: | ||
[f]=l, | [f]=l, | ||
[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a"}, | [i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a"}, | ||
[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 // ...\n case LookupResult::NotFound:\n case LookupResult::NotFoundInCurrentInstantiation: {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,782: | Line 1,782: | ||
[f]=l, | [f]=l, | ||
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"}, | [i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"}, | ||
[j]={{G,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]={{G,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 // ...\n if (!SecondArgIsLastNamedArgument)\n // ...\n else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n // ...\n Diag(ParamLoc, diag::note_parameter_type) << Type;"},{Ob,1232,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n // ...\n if (AtIndexGetter) {\n // ...\n if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n // ...\n S.Diag(AtIndexGetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Ob,1348,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n // ...\n if (AtIndexSetter && arrayRef) {\n // ...\n if (!T->isIntegralOrEnumerationType()) {\n // ...\n S.Diag(AtIndexSetter->parameters()[1]->getLocation(), diag::note_parameter_type) << T;"},{Ob,1356,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n // ...\n if (AtIndexSetter && arrayRef) {\n // ...\n if (!T->isObjCObjectPointerType()) {\n // ...\n S.Diag(AtIndexSetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Ob,1371,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n // ...\n if (AtIndexSetter && arrayRef) {\n // ...\n } else if (AtIndexSetter && !arrayRef)\n for (unsigned i = 0; i < 2; i++) {\n // ...\n if (!T->isObjCObjectPointerType()) {\n // ...\n S.Diag(AtIndexSetter->parameters()[i]->getLocation(), diag::note_parameter_type) << T;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,797: | Line 1,797: | ||
[f]=l, | [f]=l, | ||
[i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note","Improve a -Wunguarded-availability note"}, | [i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note","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 // ...\n case AR_NotYetIntroduced: {\n // ...\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 // ...\n if (Result != AR_Available) {\n // ...\n SemaRef.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << SemaRef.Context.getTargetInfo().getPlatformMinVersion().getAsString();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,812: | Line 1,812: | ||
[f]=l, | [f]=l, | ||
[i]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations ","Implement partial ordering of class template partial specializations "}, | [i]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations ","Implement partial ordering of class template partial specializations "}, | ||
[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);"},{ | [j]={{y,4857,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n // ...\n if (AmbiguousPartialSpec) {\n // ...\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);"},{mb,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 // ...\n if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n // ...\n if (Matched.size() >= 1) {\n // ...\n if (Matched.size() == 1) {\n // ...\n } else {\n // ...\n if (Ambiguous) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 1,827: | Line 1,827: | ||
[f]="AST Deserialization Issue", | [f]="AST Deserialization Issue", | ||
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified","Improve the error message when a PCH dependency is modified"}, | [i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified","Improve the error message when a PCH dependency is modified"}, | ||
[j]={{ | [j]={{ic,2519,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n // ...\n // For an overridden file, there is nothing to validate.\n if (!Overridden && FileChange.Kind != Change::None) {\n if (Complain && !Diags.isDiagnosticInFlight()) {\n // ...\n Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;"}} | ||
}, | }, | ||
["note_pch_required_by"]={ | ["note_pch_required_by"]={ | ||
Line 1,839: | Line 1,839: | ||
[f]="AST Deserialization Issue", | [f]="AST Deserialization Issue", | ||
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified","Improve the error message when a PCH dependency is modified"}, | [i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified","Improve the error message when a PCH dependency is modified"}, | ||
[j]={{ | [j]={{ic,2512,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n // ...\n // For an overridden file, there is nothing to validate.\n if (!Overridden && FileChange.Kind != Change::None) {\n if (Complain && !Diags.isDiagnosticInFlight()) {\n // ...\n // Print the import stack.\n if (ImportStack.size() > 1) {\n Diag(diag::note_pch_required_by) << Filename << ImportStack[0]->FileName;"},{ic,2515,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n // ...\n // For an overridden file, there is nothing to validate.\n if (!Overridden && FileChange.Kind != Change::None) {\n if (Complain && !Diags.isDiagnosticInFlight()) {\n // ...\n // Print the import stack.\n if (ImportStack.size() > 1) {\n // ...\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"]={ | ||
Line 1,851: | Line 1,851: | ||
[f]="ARC Restrictions", | [f]="ARC Restrictions", | ||
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics","Refine r251469 to give better (and more localizable) diagnostics"}, | [i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics","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 // ...\n case AR_Unavailable:\n // ...\n if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n if (AL->isImplicit() && AL->getImplicitReason()) {\n // ...\n case UnavailableAttr::IR_ARCForbiddenConversion:\n // ...\n diag_available_here = diag::note_performs_forbidden_arc_conversion;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,866: | Line 1,866: | ||
[f]=l, | [f]=l, | ||
[i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div","[Diagnostics] Improve -Wsizeof-pointer-div"}, | [i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div","[Diagnostics] Improve -Wsizeof-pointer-div"}, | ||
[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;"}}, | [j]={{D,11325,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n // ...\n if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n // ...\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]={ | [k]={ | ||
["clang/test/Sema/div-sizeof-ptr.cpp"]={ | ["clang/test/Sema/div-sizeof-ptr.cpp"]={vc,vc,vc,vc,vc,"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",vc} | ||
} | } | ||
}, | }, | ||
Line 1,880: | Line 1,880: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={ | [i]={cd,1308178962,Jb,Jb}, | ||
[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();"}}, | [j]={{C,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n // ...\n if (issueDiagnostic) {\n // ...\n Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,896: | Line 1,896: | ||
[f]=l, | [f]=l, | ||
[i]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion","Catch placeholder types in DefaultLvalueConversion"}, | [i]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion","Catch placeholder types in DefaultLvalueConversion"}, | ||
[j]={{ | [j]={{gd,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 // ...\n for (UnresolvedSetImpl::iterator It = Overloads.begin(), DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {\n // ...\n S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/attr-target-mv.c"]={"clang/test/Sema/attr-target-mv.c:12:42: note: possible target for call"} | ["clang/test/Sema/attr-target-mv.c"]={"clang/test/Sema/attr-target-mv.c:12:42: note: possible target for call"} | ||
Line 1,911: | Line 1,911: | ||
[f]=H, | [f]=H, | ||
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen","Diagnose the expansion of ambiguous macro definitions. This can happen"}, | [i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen","Diagnose the expansion of ambiguous macro definitions. This can happen"}, | ||
[j]={{ | [j]={{Zc,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 // ...\n // If the macro definition is ambiguous, complain.\n if (M.isAmbiguous()) {\n // ...\n Diag(MI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_chosen) << Identifier.getIdentifierInfo();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,926: | Line 1,926: | ||
[f]=H, | [f]=H, | ||
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen","Diagnose the expansion of ambiguous macro definitions. This can happen"}, | [i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen","Diagnose the expansion of ambiguous macro definitions. This can happen"}, | ||
[j]={{ | [j]={{Zc,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 // ...\n // If the macro definition is ambiguous, complain.\n if (M.isAmbiguous()) {\n // ...\n M.forAllDefinitions([&](const MacroInfo *OtherMI) {\n if (OtherMI != MI)\n Diag(OtherMI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_other) << Identifier.getIdentifierInfo();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,941: | Line 1,941: | ||
[f]=H, | [f]=H, | ||
[i]={"421380a10816",1549406095,"[Preprocessor] Add a note with framework location for \"file not found\" error.","[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.","[Preprocessor] Add a note with framework location for \"file not found\" error."}, | ||
[j]={{ | [j]={{Y,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 // ...\n if (IsFrameworkFound) {\n // ...\n Diag(FilenameTok, diag::note_pp_framework_without_header) << OriginalFilename.substr(SlashPos + 1) << FrameworkName << CacheEntry.Directory->getName();"}}, | ||
[k]={ | [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\')"} | ["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\')"} | ||
Line 1,956: | Line 1,956: | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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 // ...\n Diag(Info.Location, diag::note_pp_macro_annotation) << 0;"},{"clang/lib/Lex/Preprocessor.cpp",1475,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n // ...\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 // ...\n Diag(*A.FinalAnnotationLoc, diag::note_pp_macro_annotation) << 2;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:14:56: note: macro marked \'deprecated\' here", | ["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:14:56: note: macro marked \'deprecated\' here",Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub} | ||
} | } | ||
}, | }, | ||
Line 1,971: | Line 1,971: | ||
[f]=H, | [f]=H, | ||
[i]={"51d09c512b95",1496121779,"Diagnose attempts to build a preprocessed module that defines an unavailable submodule.","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.","Diagnose attempts to build a preprocessed module that defines an unavailable submodule."}, | ||
[j]={{ | [j]={{ec,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 // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\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]={ | [k]={ | ||
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:9:22: note: entering module \'a\' due to this pragma"} | ["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:9:22: note: entering module \'a\' due to this pragma"} | ||
Line 1,985: | Line 1,985: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"0a849f47d2f7",1492508507, | [i]={"0a849f47d2f7",1492508507,pc,pc}, | ||
[j]={{ | [j]={{yb,1137,"void Sema::PrintPragmaAttributeInstantiationPoint() {\n // ...\n Diags.Report(PragmaAttributeCurrentTargetDecl->getBeginLoc(), diag::note_pragma_attribute_applied_decl_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,999: | Line 1,999: | ||
[b]="omit the namespace to add attributes to the most\\-recently pushed attribute group", | [b]="omit the namespace to add attributes to the most\\-recently pushed attribute group", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"}, | [i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","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 // ...\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n if (Info->Namespace) {\n // ...\n PP.Diag(Tok.getLocation(), diag::note_pragma_attribute_namespace_on_attribute);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,015: | Line 2,015: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"0a849f47d2f7",1492508507, | [i]={"0a849f47d2f7",1492508507,pc,pc}, | ||
[j]={{ | [j]={{yb,1092,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n // ...\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 // ...\n if (PragmaAttributeStack[Index].Namespace == Namespace) {\n for (const PragmaAttributeEntry &Entry : PragmaAttributeStack[Index].Entries) {\n if (!Entry.IsUsed) {\n // ...\n Diag(PragmaLoc, diag::note_pragma_attribute_region_ends_here);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:7:15: note: \'#pragma clang attribute push\' regions ends here"} | ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:7:15: note: \'#pragma clang attribute push\' regions ends here"} | ||
Line 2,029: | Line 2,029: | ||
[b]="use the GNU \'__attribute__\' syntax", | [b]="use the GNU \'__attribute__\' syntax", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"0a849f47d2f7",1492508507, | [i]={"0a849f47d2f7",1492508507,pc,pc}, | ||
[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 // ...\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n // ...\n } else if (Tok.is(tok::kw___declspec)) {\n // ...\n } else {\n // ...\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 // ...\n Diag(Tok, diag::note_pragma_attribute_use_attribute_kw) << FixItHint::CreateInsertion(InsertStartLoc, \"__attribute__((\") << FixItHint::CreateInsertion(Tok.getEndLoc(), \"))\");"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,044: | Line 2,044: | ||
[b]="\\#pragma entered here", | [b]="\\#pragma entered here", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their"}, | [i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their"}, | ||
[j]={{ | [j]={{Y,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 // ...\n // Complain about attempts to #include files in an audit pragma.\n if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n // ...\n Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here);"},{Y,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 // ...\n // Complain about attempts to #include files in an assume-nonnull pragma.\n if (PragmaAssumeNonNullLoc.isValid()) {\n // ...\n Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here);"},{Zc,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 // ...\n if (II == Ident__LINE__) {\n // ...\n } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n // ...\n } else if (II == Ident__DATE__) {\n // ...\n } else if (II == Ident__TIME__) {\n // ...\n } else if (II == Ident__INCLUDE_LEVEL__) {\n // ...\n } else if (II == Ident__TIMESTAMP__) {\n // ...\n } else if (II == Ident__FLT_EVAL_METHOD__) {\n // ...\n if (getLastFPEvalPragmaLocation().isValid()) {\n // ...\n Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);"},{ec,1900,"/// PragmaARCCFCodeAuditedHandler -\n/// \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (IsBegin) {\n // Complain about attempts to re-enter an audit.\n if (BeginLoc.isValid()) {\n // ...\n PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{ec,1956,"/// PragmaAssumeNonNullHandler -\n/// \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (IsBegin) {\n // Complain about attempts to re-enter an audit.\n if (BeginLoc.isValid()) {\n // ...\n PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{yb,705,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n // ...\n if (PragmaLocation.isValid())\n Diag(PragmaLocation, diag::note_pragma_entered_here);"},{yb,707,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n // ...\n if (Section.PragmaSectionLocation.isValid())\n Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"},{yb,726,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n // ...\n if (SectionIt != Context.SectionInfos.end()) {\n // ...\n if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n // ...\n if (Section.PragmaSectionLocation.isValid())\n Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,059: | Line 2,059: | ||
[b]="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]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | [i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | ||
[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 // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n // ...\n // Look for vectorize_width(fixed|scalable)\n if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n // ...\n } else {\n // ...\n if (R.isInvalid() && !Tok.is(tok::comma))\n Diag(Toks[0].getLocation(), diag::note_pragma_loop_invalid_vectorize_option);"}}, | ||
[k]={ | [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\')"} | ["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\')"} | ||
Line 2,076: | Line 2,076: | ||
[f]=l, | [f]=l, | ||
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses","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","Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | ||
[j]={{ | [j]={{yb,467,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n // ...\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 // ...\n Diag(PrevAlignPackState.CurrentPragmaLocation, diag::note_pragma_pack_here);"},{yb,472,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n // ...\n // Warn about modified alignment after #includes.\n if (PrevAlignPackState.CurrentValue != AlignPackStack.CurrentValue) {\n // ...\n Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,091: | Line 2,091: | ||
[f]=l, | [f]=l, | ||
[i]={"a1479d798870",1501508270,"-Wpragma-pack: add an additional note and fixit when warning","-Wpragma-pack: add an additional note and fixit when warning"}, | [i]={"a1479d798870",1501508270,"-Wpragma-pack: add an additional note and fixit when warning","-Wpragma-pack: add an additional note and fixit when warning"}, | ||
[j]={{ | [j]={{yb,491,"void Sema::DiagnoseUnterminatedPragmaAlignPack() {\n // ...\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 // ...\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]={ | [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()\'?"} | ["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()\'?"} | ||
Line 2,106: | Line 2,106: | ||
[f]=l, | [f]=l, | ||
[i]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it","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","Improve the fix-its for -Wparentheses to ensure that the fix-it"}, | ||
[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);"}}, | [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 // ...\n SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_bitwise_first) << BinaryOperator::getOpcodeStr(Opc), ParensRange);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,121: | Line 2,121: | ||
[f]=l, | [f]=l, | ||
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator.","Warn about missing parentheses for conditional operator."}, | [i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator.","Warn about missing parentheses for conditional operator."}, | ||
[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()));"}}, | [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 // ...\n SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_conditional_first), SourceRange(CondRHS->getBeginLoc(), RHSExpr->getEndLoc()));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,136: | Line 2,136: | ||
[f]=l, | [f]=l, | ||
[i]={"dac86fd24c56",1349659189,"Use a single note diagnostic for all the precedent/parentheses warnings.","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.","Use a single note diagnostic for all the precedent/parentheses warnings."}, | ||
[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());"}}, | [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 // ...\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 // ...\n if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n // ...\n } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\n SuggestParentheses(S, OCE->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << (Kind == OO_LessLess ? \"<<\" : \">>\"), OCE->getSourceRange());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,151: | Line 2,151: | ||
[f]=jc, | [f]=jc, | ||
[i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration."}, | [i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration."}, | ||
[j]={{ | [j]={{sc,238,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n // ...\n // Only one module-declaration is permitted per source file.\n if (isCurrentModulePurview()) {\n // ...\n Diag(VisibleModules.getImportLoc(ModuleScopes.back().Module), diag::note_prev_module_declaration);"}}, | ||
[k]={ | [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"} | ["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:14:8: note: previous module declaration is here"} | ||
Line 2,166: | Line 2,166: | ||
[f]=jc, | [f]=jc, | ||
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module","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","C++ Modules TS: add frontend support for building pcm files from module"}, | ||
[j]={{ | [j]={{sc,315,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n // ...\n case ModuleDeclKind::Interface:\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 // ...\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"]={ | ||
Line 2,178: | Line 2,178: | ||
[f]=jc, | [f]=jc, | ||
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module","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","C++ Modules TS: add frontend support for building pcm files from module"}, | ||
[j]={{ | [j]={{sc,317,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n // ...\n case ModuleDeclKind::Interface:\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 // ...\n if (M->DefinitionLoc.isValid())\n // ...\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"]={ | ||
Line 2,190: | Line 2,190: | ||
[f]=l, | [f]=l, | ||
[i]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of","Implement support for semantic checking and template instantiation of"}, | [i]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of","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 // ...\n if (PrevDecl) {\n // ...\n SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here) << SemaRef.Context.getTypeDeclType(PrevDecl);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,205: | Line 2,205: | ||
[f]=l, | [f]=l, | ||
[i]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration.","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.","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();"},{F,1355,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n if (!Ivar) {\n } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n Diag(Ivar->getLocation(), diag::note_previous_access_declaration) << Ivar << Ivar->getName();"}}, | [j]={{"clang/lib/Sema/SemaAccess.cpp",55,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n // ...\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 // ...\n Diag(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) << PrevMemberDecl << PrevMemberDecl->getAccess();"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (!Ivar) {\n // ...\n } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n // ...\n Diag(Ivar->getLocation(), diag::note_previous_access_declaration) << Ivar << Ivar->getName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/ivar-sem-check-2.m"]={"clang/test/SemaObjC/ivar-sem-check-2.m:4:6: note: previously declared \'value2\' here"} | ["clang/test/SemaObjC/ivar-sem-check-2.m"]={"clang/test/SemaObjC/ivar-sem-check-2.m:4:6: note: previously declared \'value2\' here"} | ||
Line 2,220: | Line 2,220: | ||
[f]=l, | [f]=l, | ||
[i]={"4c3db23d1c93",1335403563,"Reject cases like","Reject cases like"}, | [i]={"4c3db23d1c93",1335403563,"Reject cases like","Reject cases like"}, | ||
[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);"}}, | [j]={{w,7150,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n // ...\n if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n if (IsMicrosoftABI && IsDefinition) {\n // ...\n } else if (IsMicrosoftABI && IsSpecialization) {\n // ...\n } else {\n // ...\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 // ...\n if (D->hasAttrs()) {\n // ...\n for (unsigned i = 0, e = Attrs.size(); i != e;) {\n // ...\n if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n if (OverrideOrImpl) {\n // ...\n } else {\n // ...\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 // ...\n if (existingAttr) {\n // ...\n S.Diag(CI.getLoc(), diag::note_previous_attribute);"},{v,3299,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n // ...\n if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n // ...\n Diag(CI.getLoc(), diag::note_previous_attribute);"},{v,3383,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n // ...\n if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n // ...\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 // ...\n if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n // ...\n Diag(EA->getLoc(), diag::note_previous_attribute);"},{v,7684,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n // ...\n if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n // ...\n Diag(AL.getLoc(), diag::note_previous_attribute);"},{v,7704,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n // ...\n if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n // ...\n Diag(AL.getLoc(), diag::note_previous_attribute);"},{z,6485,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n // ...\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 // ...\n Diag(ClassAttr->getLocation(), diag::note_previous_attribute);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,234: | Line 2,234: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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;"}}, | [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 // ...\n if (Old->isThisDeclarationADefinition())\n // ...\n else if (Old->isImplicit()) {\n // ...\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 // ...\n // Disallow redeclaration of some builtins.\n if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n // ...\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 // ...\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 // ...\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 // ...\n if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n // ...\n PrevDiag = diag::note_previous_builtin_declaration;"}}, | ||
[k]={ | [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 ()\'"} | ["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 ()\'"} | ||
Line 2,251: | Line 2,251: | ||
[i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a"}, | [i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a"}, | ||
[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 // ...\n if (IsDeviceOrConstantVar || IsSharedVar) {\n // ...\n } else {\n // ...\n if (InitFn) {\n // ...\n if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n // ...\n Diag(InitFn->getLocation(), diag::note_previous_decl) << InitFn;"}, | ||
[2]={"clang/lib/Sema/SemaCUDA.cpp",840,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n | [2]={"clang/lib/Sema/SemaCUDA.cpp",840,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n // ...\n if (!Callee->getBuiltinID())\n SemaDiagnosticBuilder(DiagKind, Callee->getLocation(), diag::note_previous_decl, Caller, *this) << Callee;"}, | ||
[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;"}, | [3]={w,12302,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n // ...\n for (const auto *Param : FD->parameters()) {\n if (!Param->hasAttr<HLSLAnnotationAttr>()) {\n // ...\n Diag(Param->getLocation(), diag::note_previous_decl) << Param;"}, | ||
[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 | [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 // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;"}, | ||
[5]={w,17453,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n | [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 // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n // ...\n Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;"}, | ||
[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;"}, | [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 // ...\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 // ...\n if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())\n Diag(BaseDecl->getLocation(), diag::note_previous_decl) << BaseType;"}, | ||
[7]={C,192,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n | [7]={C,192,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n // ...\n if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n // ...\n Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"}, | ||
[8]={C,201,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"}, | [8]={C,201,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n // ...\n if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n // ...\n Diag(Overridden->getLocation(), diag::note_previous_decl) << \"method\";"}, | ||
[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 | [9]={C,217,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n // ...\n for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n // ...\n if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n // ...\n Diag(oldDecl->getLocation(), diag::note_previous_decl) << \"parameter\";"}, | ||
[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\");"}, | [10]={C,324,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n // ...\n if (isa<ObjCMethodDecl>(ND))\n // ...\n else\n S.Diag(ND->getLocation(), diag::note_previous_decl) << (isa<ObjCCategoryDecl>(ND) ? \"category\" : \"class\");"}, | ||
[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 | [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 // ...\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 // ...\n } else {\n // ...\n Diag(prevTypeParamList->getLAngleLoc(), diag::note_previous_decl) << ClassName;"}, | ||
[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;"}, | [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 // ...\n unsigned NoteID = TC.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"}, | ||
[13]={D,2506,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n if (S && Out) {\n } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n unsigned NoteID = Corrected.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"}, | [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 // ...\n if (S && Out) {\n // ...\n } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n // ...\n if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n unsigned NoteID = Corrected.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"}, | ||
[14]={D,18118,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n for (const Expr *E : Rec.PossibleDerefs) {\n | [14]={D,18118,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n for (const Expr *E : Rec.PossibleDerefs) {\n // ...\n if (DeclRef) {\n // ...\n Diag(Decl->getLocation(), diag::note_previous_decl) << Decl->getName();"}, | ||
[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;"}, | [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 // ...\n // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n if (Diagnose) {\n // ...\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[16]={D,19188,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // Prohibit structs with flexible array members too.\n // We cannot capture what is in the tail end of the struct.\n if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n if (Diagnose) {\n | [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 // ...\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 // ...\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[17]={D,19197,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // Lambdas and captured statements are not allowed to capture __block\n // variables; they don\'t support the expected semantics.\n if (HasBlocksAttr && (IsLambda || isa<CapturedRegionScopeInfo>(CSI))) {\n if (Diagnose) {\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | [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 // ...\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 // ...\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[18]={D,19242,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n // Blocks are not allowed to capture arrays, excepting OpenCL.\n // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n // (decayed to pointers).\n if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n if (BuildAndDiagnose) {\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | [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 // ...\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 // ...\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[19]={D,19260,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n // | [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 // ...\n // Forbid the block-capture of autoreleasing variables.\n if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n if (BuildAndDiagnose) {\n // ...\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[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 | [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 // ...\n // Compute the type of the field that will capture this variable.\n if (ByRef) {\n // ...\n } else {\n // ...\n // Forbid the lambda copy-capture of autoreleasing variables.\n if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n if (BuildAndDiagnose) {\n // ...\n S.Diag(Var->getLocation(), diag::note_previous_decl) << Var->getDeclName();"}, | ||
[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;"}, | [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 // ...\n do {\n // ...\n // If we are instantiating a generic lambda call operator body,\n // we do not want to capture new variables. What was captured\n // during either a lambdas transformation or initial parsing\n // should be used.\n if (isGenericLambdaCallOperatorSpecialization(DC)) {\n if (BuildAndDiagnose) {\n // ...\n if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n // ...\n Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[22]={D,19749,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n | [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 // ...\n do {\n // ...\n if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n // No capture-default, and this is not an explicit capture\n // so cannot capture this variable.\n if (BuildAndDiagnose) {\n // ...\n Diag(Var->getLocation(), diag::note_previous_decl) << Var;"}, | ||
[23]={ | [23]={hc,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 // ...\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 // ...\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 // ...\n if (IsSizedDelete) {\n // ...\n if (!OperatorDelete->isImplicit())\n Diag(OperatorDelete->getLocation(), diag::note_previous_decl) << DeleteName;"}, | ||
[24]={ | [24]={bb,9888,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ListConstructorOverloadFailed:\n case FK_ConstructorOverloadFailed: {\n // ...\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 // ...\n if (Entity.getKind() == InitializedEntity::EK_Base) {\n // ...\n S.Diag(BaseDecl->getLocation(), diag::note_previous_decl) << S.Context.getTagDeclType(BaseDecl);"}, | ||
[25]={ | [25]={bb,9903,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ListConstructorOverloadFailed:\n case FK_ConstructorOverloadFailed: {\n // ...\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 // ...\n if (Entity.getKind() == InitializedEntity::EK_Base) {\n // ...\n } else {\n // ...\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]={bb,9962,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_DefaultInitOfConst:\n if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n // ...\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 // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n // ...\n if (!Underlying->hasLocalStorage()) {\n // ...\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]={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;"}, | [29]={x,1720,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n // ...\n if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n // ...\n if (!ListItemNotVar && D) {\n // ...\n SemaRef.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[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;"}, | [30]={x,3073,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[31]={x,3090,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // | [31]={x,3090,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[32]={x,3105,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // OpenMP [2.9.2, Restrictions, C/C++, p.3]\n // A threadprivate directive for static class member variables must appear\n // in the class definition, in the same scope in which the member\n // variables are declared.\n if (CanonicalVD->isStaticDataMember() && !CanonicalVD->getDeclContext()->Equals(getCurLexicalContext())) {\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | [32]={x,3105,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[33]={x,3121,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // OpenMP [2.9.2, Restrictions, C/C++, p.4]\n // A threadprivate directive for namespace-scope variables must appear\n // outside any definition or declaration other than the namespace\n // definition itself.\n if (CanonicalVD->getDeclContext()->isNamespace() && (!getCurLexicalContext()->isFileContext() || !getCurLexicalContext()->Encloses(CanonicalVD->getDeclContext()))) {\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | [33]={x,3121,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[34]={x,3135,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // OpenMP [2.9.2, Restrictions, C/C++, p.6]\n // A threadprivate directive for static block-scope variables must appear\n // in the scope of the variable and not in a nested scope.\n if (CanonicalVD->isLocalVarDecl() && CurScope && !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | [34]={x,3135,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[35]={x,3231,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n for (Expr *RefExpr : VarList) {\n // OpenMP [2.9.2, Restrictions, C/C++, p.10]\n // A threadprivate variable must not have a reference type.\n if (VD->getType()->isReferenceType()) {\n | [35]={x,3231,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[36]={x,3249,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n for (Expr *RefExpr : VarList) {\n // Check if this is a TLS variable. If TLS is not being supported, produce\n // the corresponding diagnostic.\n if ((VD->getTLSKind() != VarDecl::TLS_None && !(VD->hasAttr<OMPThreadPrivateDeclAttr>() && getLangOpts().OpenMPUseTLS && getASTContext().getTargetInfo().isTLSSupported())) || (VD->getStorageClass() == SC_Register && VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())) {\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | [36]={x,3249,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[37]={x,3434,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n for (Expr *RefExpr : VarList) {\n // | [37]={x,3434,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"}, | ||
[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 | [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 // ...\n for (const Expr *E : Aligneds) {\n // ...\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n // ...\n if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n // ...\n if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n // ...\n Diag(PVD->getLocation(), diag::note_previous_decl) << PVD;"}, | ||
[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 | [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 // ...\n bool checkDecl(const Expr *E, const ValueDecl *VD) {\n // ...\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 // ...\n SemaRef.Diag(VD->getLocation(), diag::note_previous_decl) << VD;"}, | ||
[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;"}, | [40]={x,18117,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\n // Variably modified types are not supported for tasks.\n if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {\n // ...\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[41]={x,18390,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n for (Expr *RefExpr : VarList) {\n // | [41]={x,18390,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\n // Variably modified types are not supported for tasks.\n if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {\n // ...\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[42]={x,18547,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n for (Expr *RefExpr : VarList) {\n // OpenMP 5.0 [2.19.4.5 lastprivate Clause, Restrictions]\n // A list item that appears in a lastprivate clause with the conditional\n // modifier must be a scalar variable.\n if (LPKind == OMPC_LASTPRIVATE_conditional && !Type->isScalarType()) {\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | [42]={x,18547,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[43]={x,19453,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n | [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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n if (!ASE && !OASE) {\n // ...\n S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[44]={x,19466,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n for (Expr *RefExpr : VarList) {\n // | [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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\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 // ...\n if ((BOK == BO_OrAssign || BOK == BO_AndAssign || BOK == BO_XorAssign) && !S.getLangOpts().CPlusPlus && Type->isFloatingType()) {\n // ...\n if (!ASE && !OASE) {\n // ...\n S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[45]={x,19664,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n for (Expr *RefExpr : VarList) {\n if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | [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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\n if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n // ...\n S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[46]={x,20012,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n if (D) {\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | [46]={x,20012,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n // ...\n if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n // ...\n if (D) {\n // ...\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[47]={x,20289,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n | [47]={x,20289,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\n if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n // ...\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[48]={x,20491,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n for (Expr *RefExpr : VarList) {\n // Variably modified types are not supported.\n if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n | [48]={x,20491,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\n // Variably modified types are not supported.\n if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n // ...\n Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"}, | ||
[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();"}, | [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 // ...\n if (ICS.isBad()) {\n // ...\n case BadConversionSequence::bad_qualifiers: {\n // ...\n if (CVR) {\n // ...\n Diag(Method->getLocation(), diag::note_previous_decl) << Method->getDeclName();"}, | ||
[50]={E,5668,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n | [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 // ...\n if (ICS.isBad()) {\n // ...\n case BadConversionSequence::lvalue_ref_to_rvalue:\n case BadConversionSequence::rvalue_ref_to_lvalue: {\n // ...\n Diag(Method->getLocation(), diag::note_previous_decl) << Method->getDeclName();"}, | ||
[51]={E,14924,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n | [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 // ...\n if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n // ...\n if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n // ...\n Diag(MD->getBeginLoc(), diag::note_previous_decl) << MD->getDeclName();"}, | ||
[52]={ | [52]={ib,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 // ...\n for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n // ...\n if (!anyPackExpansions) {\n if (i < numTypeParams) {\n // ...\n } else {\n // ...\n S.Diag(objcClass->getLocation(), diag::note_previous_decl) << objcClass;"}, | ||
[53]={ | [53]={ib,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 // ...\n // Make sure we didn\'t have the wrong number of arguments.\n if (!anyPackExpansions && finalTypeArgs.size() != numTypeParams) {\n // ...\n S.Diag(objcClass->getLocation(), diag::note_previous_decl) << objcClass;"} | ||
}, | }, | ||
[k]={ | [k]={ | ||
Line 2,318: | Line 2,318: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={ | [j]={ | ||
[1]={"clang/lib/Sema/SemaCUDA.cpp",926,"void Sema::checkCUDATargetOverload(FunctionDecl *NewFD, const LookupResult &Previous) {\n // ...\n for (NamedDecl *OldND : Previous) {\n // ...\n // Don\'t allow HD and global functions to overload other functions with the\n / | |||
}, | }, | ||
[k]={ | [k]={ | ||
Line 2,424: | Line 2,424: | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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;"}}, | [j]={{w,3447,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n // ...\n if (OldParamDT && NewParamDT && OldParamDT->getPointeeType() == NewParamDT->getPointeeType()) {\n // ...\n if (!EquivalentArrayTypes(OldParamOT, NewParamOT, S.getASTContext())) {\n // ...\n S.Diag(OldParam->getLocation(), diag::note_previous_declaration_as) << OldParamOT;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/array-parameter.cpp"]={"clang/test/Sema/array-parameter.cpp:4:15: note: previously declared as \'int[10]\' here"} | ["clang/test/Sema/array-parameter.cpp"]={"clang/test/Sema/array-parameter.cpp:4:15: note: previously declared as \'int[10]\' here"} | ||
Line 2,437: | Line 2,437: | ||
[b]="previous default generic association is here", | [b]="previous default generic association is here", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections"}, | [i]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections"}, | ||
[j]={{ | [j]={{Sc,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 // ...\n do {\n // ...\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 // ...\n Diag(DefaultLoc, diag::note_previous_default_assoc);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Parser/c1x-generic-selection.c"]={"clang/test/Parser/c1x-generic-selection.c:8:7: note: previous default generic association is here"} | ["clang/test/Parser/c1x-generic-selection.c"]={"clang/test/Parser/c1x-generic-selection.c:8:7: note: previous default generic association is here"} | ||
Line 2,453: | Line 2,453: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={ | [j]={ | ||
[1]={jd,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 | |||
}, | }, | ||
[k]={ | [k]={ | ||
Line 2,529: | Line 2,529: | ||
[f]=l, | [f]=l, | ||
[i]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen.","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.","Check for identical types in C++ catch expression. Patch by Erik Verbruggen."}, | ||
[j]={{ | [j]={{T,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 // ...\n for (unsigned i = 0; i < NumHandlers; ++i) {\n // ...\n if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n // ...\n if (RD->lookupInBases(CTPB, Paths)) {\n // ...\n if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n // ...\n Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"},{T,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 // ...\n for (unsigned i = 0; i < NumHandlers; ++i) {\n // ...\n if (!R.second) {\n // ...\n Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"}}, | ||
[k]={ | [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 &\'"} | ["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 &\'"} | ||
Line 2,544: | Line 2,544: | ||
[f]=l, | [f]=l, | ||
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of","Improve the semantic checking for explicit instantiations of"}, | [i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of","Improve the semantic checking for explicit instantiations of"}, | ||
[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);"}}, | [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 // ...\n case TSK_ExplicitInstantiationDefinition:\n // ...\n case TSK_ExplicitInstantiationDefinition:\n // ...\n Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation), diag::note_previous_explicit_instantiation);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,559: | Line 2,559: | ||
[f]=l, | [f]=l, | ||
[i]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated"}, | [i]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated"}, | ||
[j]={{ | [j]={{bb,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 // ...\n if (D->isFieldDesignator()) {\n // ...\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 // ...\n if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,573: | Line 2,573: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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);"}}, | [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 // ...\n if (Old->isThisDeclarationADefinition())\n // ...\n else if (Old->isImplicit()) {\n PrevDiag = diag::note_previous_implicit_declaration;"},{z,17814,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n // ...\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 // ...\n Diag(Prev->getLocation().isInvalid() ? DelLoc : Prev->getLocation(), Prev->isImplicit() ? diag::note_previous_implicit_declaration : diag::note_previous_declaration);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,588: | Line 2,588: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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();"},{ | [j]={{w,5485,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n // ...\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 // ...\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 // ...\n Diag(VDecl->getCanonicalDecl()->getInit()->getExprLoc(), diag::note_previous_initializer) << 0;"},{z,5644,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n // ...\n S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer) << 0 << PrevInit->getSourceRange();"},{z,5668,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n // ...\n while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n if (Parent->isUnion()) {\n // ...\n if (En.first && En.first != Child) {\n // ...\n S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer) << 0 << En.second->getSourceRange();"},{bb,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 // ...\n /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n // ...\n if (!VerifyOnly) {\n // ...\n SemaRef.Diag(OldInit->getBeginLoc(), diag::note_previous_initializer) << (OldInit->HasSideEffects(SemaRef.Context) && FullyOverwritten) << OldInit->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,604: | Line 2,604: | ||
[f]=l, | [f]=l, | ||
[i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords"}, | [i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords"}, | ||
[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);"}}, | [j]={{v,8070,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n // ...\n Diag(CI.getLoc(), diag::note_previous_ms_inheritance);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:299:8: note: previous inheritance model specified here"} | ["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:299:8: note: previous inheritance model specified here"} | ||
Line 2,619: | Line 2,619: | ||
[f]=l, | [f]=l, | ||
[i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"}, | [i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"}, | ||
[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();"}}, | [j]={{z,13437,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // We already have an alias with the same name that points to the same\n // namespace; check that it matches.\n if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n // ...\n } else if (isVisible(PrevDecl)) {\n // ...\n Diag(AD->getLocation(), diag::note_previous_namespace_alias) << AD->getNamespace();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:41:13: note: previously defined as an alias for \'A1\'"} | ["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:41:13: note: previously defined as an alias for \'A1\'"} | ||
Line 2,632: | Line 2,632: | ||
[b]="previous statement is here", | [b]="previous statement is here", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | [i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | ||
[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 // ...\n void Check() {\n // ...\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 // ...\n P.Diag(StmtLoc, diag::note_previous_statement);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,649: | Line 2,649: | ||
[f]=l, | [f]=l, | ||
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of","Improve the semantic checking for explicit instantiations of"}, | [i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of","Improve the semantic checking for explicit instantiations of"}, | ||
[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);"}}, | [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 // ...\n case TSK_ExplicitInstantiationDefinition:\n // ...\n case TSK_ExplicitSpecialization:\n // ...\n Diag(PrevDecl->getLocation(), diag::note_previous_template_specialization);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,663: | Line 2,663: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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);"},{F,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 | [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 // ...\n if (Redecl->getTagKind() != NewTag) {\n // ...\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 // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // If this is a use of a previous tag, or if the tag is already declared\n // in the same scope (so that the definition/declaration completes or\n // rementions the tag), reuse the decl.\n if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // 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 // ...\n Diag(PrevTagDecl->getLocation(), diag::note_previous_use);"},{F,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 // ...\n if (IC) {\n if (Synthesize)\n if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplIvarDecl(PropertyIvar)) {\n // ...\n Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{F,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 // ...\n if (IC) {\n // ...\n } else {\n if (Synthesize)\n if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplIvarDecl(PropertyIvar)) {\n // ...\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 // ...\n if (PrevClassTemplate) {\n // ...\n if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n // ...\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 // ...\n // Check the tag kind\n if (const RecordType *RT = Result->getAs<RecordType>()) {\n // ...\n if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition, TagLoc, Id)) {\n // ...\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 // ...\n if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) {\n // ...\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 // ...\n if (!ClassTemplate) {\n // ...\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 // ...\n if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, /*isDefinition*/ false, KWLoc, ClassTemplate->getIdentifier())) {\n // ...\n Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{mb,1687,"QualType TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc, ElaboratedTypeKeyword Keyword, NestedNameSpecifierLoc QualifierLoc, QualType T) {\n if (const TagType *TT = T->getAs<TagType>()) {\n // ...\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 // ...\n if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/ false, TagLocation, Id)) {\n // ...\n SemaRef.Diag(TD->getLocation(), diag::note_previous_use);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:14:13: note: previous use is here"} | ["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:14:13: note: previous use is here"} | ||
Line 2,679: | Line 2,679: | ||
[f]=l, | [f]=l, | ||
[i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids.","[clang-cl] Diagnose duplicate uuids."}, | [i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids.","[clang-cl] Diagnose duplicate uuids."}, | ||
[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);"}}, | [j]={{v,6979,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n if (const auto *UA = D->getAttr<UuidAttr>()) {\n // ...\n if (!UA->getGuid().empty()) {\n // ...\n Diag(CI.getLoc(), diag::note_previous_uuid);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,694: | Line 2,694: | ||
[f]=l, | [f]=l, | ||
[i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function","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","If an object (such as a std::string) with an appropriate c_str() member function"}, | ||
[j]={{G,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]={{G,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 // ...\n for (MethodSet::iterator MI = Results.begin(), ME = Results.end(); MI != ME; ++MI) {\n // ...\n if (Method->getMinRequiredArguments() == 0 && AT.matchesType(S.Context, Method->getReturnType())) {\n // ...\n S.Diag(E->getBeginLoc(), diag::note_printf_c_str) << \"c_str()\" << FixItHint::CreateInsertion(EndLoc, \".c_str()\");"}}, | ||
[k]={ | [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?"} | ["clang/test/SemaCXX/vararg-class.cpp"]={"clang/test/SemaCXX/vararg-class.cpp:39:11: note: did you mean to call the c_str() method?"} | ||
Line 2,709: | Line 2,709: | ||
[f]=l, | [f]=l, | ||
[i]={"e62e6a0191d2",1257966828,"Before checking a template template argument against its corresponding","Before checking a template template argument against its corresponding"}, | [i]={"e62e6a0191d2",1257966828,"Before checking a template template argument against its corresponding","Before checking a template template argument against its corresponding"}, | ||
[j]={{ | [j]={{mb,897,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::PriorTemplateArgumentSubstitution: {\n // ...\n Diags.Report(Active->PointOfInstantiation, diag::note_prior_template_arg_substitution) << isa<TemplateTemplateParmDecl>(Parm) << Name << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 2,724: | Line 2,724: | ||
[f]=l, | [f]=l, | ||
[i]={"f85f33863455",1345239895,"c: privide deprecated warning when __private_extern__ storage","c: privide deprecated warning when __private_extern__ storage"}, | [i]={"f85f33863455",1345239895,"c: privide deprecated warning when __private_extern__ storage","c: privide deprecated warning when __private_extern__ storage"}, | ||
[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);"}}, | [j]={{w,13782,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n case VarDecl::DeclarationOnly:\n // ...\n if (!Type->isDependentType() && !Var->isInvalidDecl() && Var->getStorageClass() == SC_PrivateExtern) {\n // ...\n Diag(Var->getLocation(), diag::note_private_extern);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/tentative-decls.c"]={"clang/test/Sema/tentative-decls.c:36:24: note: use __attribute__((visibility(\"hidden\"))) attribute instead"} | ["clang/test/Sema/tentative-decls.c"]={"clang/test/Sema/tentative-decls.c:36:24: note: use __attribute__((visibility(\"hidden\"))) attribute instead"} | ||
Line 2,739: | Line 2,739: | ||
[f]=jc, | [f]=jc, | ||
[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments."}, | [i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments."}, | ||
[j]={{ | [j]={{gd,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 // ...\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 // ...\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);"},{sc,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 // ...\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 // ...\n } else if (!ModuleScopes.back().ModuleInterface) {\n // ...\n } else if (ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n // ...\n Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"}}, | ||
[k]={ | [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"} | ["clang/test/CXX/module/module.interface/p1.cpp"]={"clang/test/CXX/module/module.interface/p1.cpp:36:1: note: private module fragment begins here"} | ||
Line 2,754: | Line 2,754: | ||
[f]=m, | [f]=m, | ||
[i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private","[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","[Modules] Map missing private submodules from Foo.Private to Foo_Private"}, | ||
[j]={{ | [j]={{Oc,2054,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n // ...\n for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n // ...\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 // ...\n if (Sub) {\n // ...\n if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {\n // ...\n getDiagnostics().Report(Sub->DefinitionLoc, diag::note_private_top_level_defined);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,769: | Line 2,769: | ||
[f]=l, | [f]=l, | ||
[i]={"974c94804986",1348260397,"objective-C: when diagnosing deprecated/unavailable usage of","objective-C: when diagnosing deprecated/unavailable usage of"}, | [i]={"974c94804986",1348260397,"objective-C: when diagnosing deprecated/unavailable usage of","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 // ...\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 // ...\n if (!Message.empty()) {\n // ...\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 // ...\n if (!Message.empty()) {\n // ...\n } else if (!UnknownObjCClass) {\n // ...\n if (ObjCProperty)\n S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,784: | Line 2,784: | ||
[f]=l, | [f]=l, | ||
[i]={"de8db16a7daa",1257201915,"Property declared in continuation class can only be used to","Property declared in continuation class can only be used to"}, | [i]={"de8db16a7daa",1257201915,"Property declared in continuation class can only be used to","Property declared in continuation class can only be used to"}, | ||
[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);"},{F,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);"},{F,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 | [j]={{C,5370,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n // ...\n for (const auto *CurMethod : ImplD->instance_methods()) {\n // ...\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 // ...\n Diag(PDecl->getLocation(), diag::note_property_declare);"},{F,402,"/// Check for a mismatch in the atomicity of the given properties.\nstatic void checkAtomicPropertyMismatch(Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) {\n // ...\n S.Diag(OldProperty->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // If we found a property in an extension, complain.\n if (PIDecl && isa<ObjCCategoryDecl>(PIDecl->getDeclContext())) {\n // ...\n Diag(PIDecl->getLocation(), diag::note_property_declare);"},{F,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 // ...\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 // ...\n Diag(PIDecl->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // ...\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 // ...\n Diag(PIDecl->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // ...\n if (ExistingOwnership && NewOwnership != ExistingOwnership) {\n // If the ownership was written explicitly, complain.\n if (getOwnershipRule(AttributesAsWritten)) {\n // ...\n Diag(PIDecl->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // ...\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 // ...\n Diag(PIDecl->getLocation(), diag::note_property_declare);"},{F,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 // ...\n if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n // ...\n if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n // ...\n Diag(PIDecl->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Class property and instance property can have the same name.\n if (ObjCPropertyDecl *prevDecl = ObjCPropertyDecl::findPropertyDecl(DC, PropertyId, ObjCPropertyDecl::getQueryKind(isClassProperty))) {\n // ...\n Diag(prevDecl->getLocation(), diag::note_property_declare);"},{F,791,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n // ...\n S.Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n // ...\n if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n // ...\n if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n if (!CD->IsClassExtension()) {\n // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n // ...\n if (PropertyIvarType.isObjCGCStrong()) {\n // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n // ...\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (AtLoc.isInvalid()) {\n // ...\n if (originalIvar) {\n // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\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 // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (!Ivar) {\n // ...\n if (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\n if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n // ...\n if (property->hasAttr<NSReturnsNotRetainedAttr>() && !getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n // ...\n Diag(property->getLocation(), diag::note_property_declare);"},{F,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 // ...\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 // ...\n Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{F,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 // ...\n if (Property->getGetterName() != SuperProperty->getGetterName()) {\n // ...\n Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{F,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 // ...\n if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {\n // ...\n if (!isObjCPointerConversion(RHSType, LHSType, ConvertedType, IncompatibleObjC) || IncompatibleObjC) {\n // ...\n Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\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 // ...\n Diag(Prop->getLocation(), diag::note_property_declare);"},{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\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 // ...\n Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\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 // ...\n } else {\n // ...\n Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{F,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 // ...\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 // ...\n S.Diag(Prop->getLocation(), diag::note_property_declare);"},{F,2200,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n // ...\n for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n // ...\n if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n // ...\n if (GetterMethod) {\n // ...\n Diag(Property->getLocation(), diag::note_property_declare);"},{F,2206,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n // ...\n for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n // ...\n if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n // ...\n if (SetterMethod) {\n // ...\n Diag(Property->getLocation(), diag::note_property_declare);"},{F,2251,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n // ...\n for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n // ...\n if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n // ...\n if ((bool)GetterMethod ^ (bool)SetterMethod) {\n // ...\n Diag(Property->getLocation(), diag::note_property_declare);"},{Ob,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 // ...\n // Do a normal method lookup first.\n if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n if (setter->isPropertyAccessor() && warn)\n if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n // ...\n if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n // ...\n S.Diag(prop->getLocation(), diag::note_property_declare);"},{Ob,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 // ...\n // Do a normal method lookup first.\n if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n if (setter->isPropertyAccessor() && warn)\n if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n // ...\n if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n // ...\n S.Diag(prop1->getLocation(), diag::note_property_declare);"},{Ob,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 // ...\n S.Diag(prop->getLocation(), diag::note_property_declare);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:60:15: note: property declared here"} | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:60:15: note: property declared here"} | ||
Line 2,799: | Line 2,799: | ||
[f]=l, | [f]=l, | ||
[i]={"f5b993f7b149",1355352505,"[objc] For the ARC error that is emitted when a synthesized property implementation","[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","[objc] For the ARC error that is emitted when a synthesized property implementation"}, | ||
[j]={{F,793,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n if (propertyImplLoc.isValid())\n S.Diag(propertyImplLoc, diag::note_property_synthesize);"},{F,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);"},{F,1921,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n for (const auto &PropEntry : PropMap) {\n if (ObjCPropertyImplDecl *PID = IMPDecl->FindPropertyImplIvarDecl(Prop->getIdentifier())) {\n if (PID->getLocation().isValid())\n Diag(PID->getLocation(), diag::note_property_synthesize);"}}, | [j]={{F,793,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n // ...\n if (propertyImplLoc.isValid())\n S.Diag(propertyImplLoc, diag::note_property_synthesize);"},{F,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 // ...\n if (AtLoc.isValid())\n S.Diag(AtLoc, diag::note_property_synthesize);"},{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\n if (ObjCPropertyImplDecl *PID = IMPDecl->FindPropertyImplIvarDecl(Prop->getIdentifier())) {\n // ...\n if (PID->getLocation().isValid())\n Diag(PID->getLocation(), diag::note_property_synthesize);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,814: | Line 2,814: | ||
[f]=l, | [f]=l, | ||
[i]={"9662cd322760",1248034631,"enhance the goto checker to reject jumps across __block variable definitions.","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.","enhance the goto checker to reject jumps across __block variable definitions."}, | ||
[j]={{S,152,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n if (VD->hasAttr<BlocksAttr>())\n return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}}, | [j]={{S,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 // ...\n if (VD->hasAttr<BlocksAttr>())\n return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:195:15: note: jump bypasses setup of __block variable"} | ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:195:15: note: jump bypasses setup of __block variable"} | ||
Line 2,828: | Line 2,828: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"960cc525ec72",1240047387, | [i]={"960cc525ec72",1240047387,ac,ac}, | ||
[j]={{S,156,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n if (VD->hasAttr<CleanupAttr>())\n return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}}, | [j]={{S,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 // ...\n if (VD->hasAttr<CleanupAttr>())\n return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:22:5: note: jump bypasses initialization of variable with __attribute__((cleanup))"} | ["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:22:5: note: jump bypasses initialization of variable with __attribute__((cleanup))"} | ||
Line 2,843: | Line 2,843: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[j]={{S,378,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::IfStmtClass: {\n if (IS->isConstexpr())\n else if (IS->isConsteval())\n Diag = diag::note_protected_by_consteval_if;"}}, | [j]={{S,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 // ...\n case Stmt::IfStmtClass: {\n // ...\n if (IS->isConstexpr())\n // ...\n else if (IS->isConsteval())\n Diag = diag::note_protected_by_consteval_if;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,859: | Line 2,859: | ||
[f]=l, | [f]=l, | ||
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature."}, | [i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature."}, | ||
[j]={{S,376,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::IfStmtClass: {\n if (IS->isConstexpr())\n Diag = diag::note_protected_by_constexpr_if;"}}, | [j]={{S,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 // ...\n case Stmt::IfStmtClass: {\n // ...\n if (IS->isConstexpr())\n Diag = diag::note_protected_by_constexpr_if;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,874: | Line 2,874: | ||
[f]=l, | [f]=l, | ||
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | [i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | ||
[j]={{S,419,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::CXXTryStmtClass: {\n // Jump from the catch into the try is not allowed either.\n for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}}, | [j]={{S,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 // ...\n case Stmt::CXXTryStmtClass: {\n // ...\n // Jump from the catch into the try is not allowed either.\n for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,889: | Line 2,889: | ||
[f]=l, | [f]=l, | ||
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | [i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | ||
[j]={{S,407,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::CXXTryStmtClass: {\n {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}}, | [j]={{S,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 // ...\n case Stmt::CXXTryStmtClass: {\n // ...\n {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,904: | Line 2,904: | ||
[f]=l, | [f]=l, | ||
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration","[ObjC] Warn on unguarded use of partial declaration"}, | [i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration","[ObjC] Warn on unguarded use of partial declaration"}, | ||
[j]={{S,374,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::IfStmtClass: {\n unsigned Diag = diag::note_protected_by_if_available;"}}, | [j]={{S,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 // ...\n case Stmt::IfStmtClass: {\n // ...\n unsigned Diag = diag::note_protected_by_if_available;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,919: | Line 2,919: | ||
[f]=l, | [f]=l, | ||
[i]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C","[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","[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"}, | ||
[j]={{S,170,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n if (VD->hasLocalStorage()) {\n case QualType::DK_nontrivial_c_struct:\n return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"}}, | [j]={{S,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 // ...\n if (VD->hasLocalStorage()) {\n // ...\n case QualType::DK_nontrivial_c_struct:\n return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,933: | Line 2,933: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={cd,1308178962,Jb,Jb}, | ||
[j]={{S,550,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::ObjCAutoreleasePoolStmtClass: {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}, | [j]={{S,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 // ...\n case Stmt::ObjCAutoreleasePoolStmtClass: {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/autoreleasepool.m"]={"clang/test/SemaObjC/autoreleasepool.m:12:3: note: jump bypasses auto release push of @autoreleasepool block"} | ["clang/test/SemaObjC/autoreleasepool.m"]={"clang/test/SemaObjC/autoreleasepool.m:12:3: note: jump bypasses auto release push of @autoreleasepool block"} | ||
Line 2,949: | Line 2,949: | ||
[f]=l, | [f]=l, | ||
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks. This seems to work","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","reject invalid jumps among pieces of @try blocks. This seems to work"}, | ||
[j]={{S,504,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::ObjCAtTryStmtClass: {\n // Jump from the catch to the finally or try is not valid.\n for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}}, | [j]={{S,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 // ...\n case Stmt::ObjCAtTryStmtClass: {\n // ...\n // Jump from the catch to the finally or try is not valid.\n for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}}, | ||
[k]={ | [k]={ | ||
[ | [Wc]={"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"} | ||
} | } | ||
}, | }, | ||
Line 2,964: | Line 2,964: | ||
[f]=l, | [f]=l, | ||
[i]={"3901377c2297",1492624448,"[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops.","[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops."}, | [i]={"3901377c2297",1492624448,"[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops.","[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops."}, | ||
[j]={{S,322,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::ObjCForCollectionStmtClass: {\n unsigned Diag = diag::note_protected_by_objc_fast_enumeration;"}}, | [j]={{S,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 // ...\n case Stmt::ObjCForCollectionStmtClass: {\n // ...\n unsigned Diag = diag::note_protected_by_objc_fast_enumeration;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,979: | Line 2,979: | ||
[f]=l, | [f]=l, | ||
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks. This seems to work","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","reject invalid jumps among pieces of @try blocks. This seems to work"}, | ||
[j]={{S,515,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::ObjCAtTryStmtClass: {\n // Jump from the finally to the try or catch is not valid.\n if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}}, | [j]={{S,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 // ...\n case Stmt::ObjCAtTryStmtClass: {\n // ...\n // Jump from the finally to the try or catch is not valid.\n if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}}, | ||
[k]={ | [k]={ | ||
[ | [Wc]={"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"} | ||
} | } | ||
}, | }, | ||
Line 2,994: | Line 2,994: | ||
[f]=l, | [f]=l, | ||
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements.","Some minor ARC diagnostic improvements."}, | [i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements.","Some minor ARC diagnostic improvements."}, | ||
[j]={{S,162,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n if (VD->hasLocalStorage()) {\n case QualType::DK_objc_strong_lifetime:\n return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}}, | [j]={{S,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 // ...\n if (VD->hasLocalStorage()) {\n // ...\n case QualType::DK_objc_strong_lifetime:\n return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:183:8: note: jump bypasses initialization of __strong variable"} | ["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:183:8: note: jump bypasses initialization of __strong variable"} | ||
Line 3,009: | Line 3,009: | ||
[f]=l, | [f]=l, | ||
[i]={"c70dd5647701",1240293660,"add support for goto checking and @synchronized blocks,","add support for goto checking and @synchronized blocks,"}, | [i]={"c70dd5647701",1240293660,"add support for goto checking and @synchronized blocks,","add support for goto checking and @synchronized blocks,"}, | ||
[j]={{S,536,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::ObjCAtSynchronizedStmtClass: {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}}, | [j]={{S,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 // ...\n case Stmt::ObjCAtSynchronizedStmtClass: {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}}, | ||
[k]={ | [k]={ | ||
[ | [Wc]={"clang/test/SemaObjC/scope-check.m:49:3: note: jump bypasses initialization of @synchronized block"} | ||
} | } | ||
}, | }, | ||
Line 3,023: | Line 3,023: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"960cc525ec72",1240047387, | [i]={"960cc525ec72",1240047387,ac,ac}, | ||
[j]={{S,493,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::ObjCAtTryStmtClass: {\n // Recursively walk the AST for the @try part.\n {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}}, | [j]={{S,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 // ...\n case Stmt::ObjCAtTryStmtClass: {\n // ...\n // Recursively walk the AST for the @try part.\n {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}}, | ||
[k]={ | [k]={ | ||
[ | [Wc]={"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"} | ||
} | } | ||
}, | }, | ||
Line 3,039: | Line 3,039: | ||
[f]=l, | [f]=l, | ||
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements.","Some minor ARC diagnostic improvements."}, | [i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements.","Some minor ARC diagnostic improvements."}, | ||
[j]={{S,166,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n if (VD->hasLocalStorage()) {\n case QualType::DK_objc_weak_lifetime:\n return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}, | [j]={{S,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 // ...\n if (VD->hasLocalStorage()) {\n // ...\n case QualType::DK_objc_weak_lifetime:\n return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:46:13: note: jump bypasses initialization of __weak variable"} | ["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:46:13: note: jump bypasses initialization of __weak variable"} | ||
Line 3,053: | Line 3,053: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"b14f87226902",1422983168, | [i]={"b14f87226902",1422983168,Fc,Fc}, | ||
[j]={{S,443,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::SEHTryStmtClass: {\n // Jump from __except or __finally into the __try are not allowed either.\n if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}}, | [j]={{S,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 // ...\n case Stmt::SEHTryStmtClass: {\n // ...\n // Jump from __except or __finally into the __try are not allowed either.\n if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,068: | Line 3,068: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"b14f87226902",1422983168, | [i]={"b14f87226902",1422983168,Fc,Fc}, | ||
[j]={{S,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()));"},{S,940,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n // Warn on gotos out of __finally blocks.\n if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n // less nested scope. Check if it crosses a __finally along the way.\n for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n if (Scopes[I].InDiag == diag::note_protected_by_seh_finally) {"}}, | [j]={{S,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 // ...\n case Stmt::SEHTryStmtClass: {\n // ...\n // Jump from __except or __finally into the __try are not allowed either.\n if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n // ...\n } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"},{S,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 // ...\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]={ | [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"} | ["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"} | ||
Line 3,083: | Line 3,083: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"b14f87226902",1422983168, | [i]={"b14f87226902",1422983168,Fc,Fc}, | ||
[j]={{S,432,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node. Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n case Stmt::SEHTryStmtClass: {\n {\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}}, | [j]={{S,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 // ...\n case Stmt::SEHTryStmtClass: {\n // ...\n {\n // ...\n Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,099: | Line 3,099: | ||
[f]=l, | [f]=l, | ||
[i]={"30d0cfda354e",1267477193,"Implement jump checking for initialized c++ variables, implementing","Implement jump checking for initialized c++ variables, implementing"}, | [i]={"30d0cfda354e",1267477193,"Implement jump checking for initialized c++ variables, implementing","Implement jump checking for initialized c++ variables, implementing"}, | ||
[j]={{S,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;"},{S,846,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}}, | [j]={{S,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 // ...\n if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n // ...\n InDiag = diag::note_protected_by_variable_init;"},{S,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]={ | [k]={ | ||
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:113:13: note: jump bypasses variable initialization"} | ["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:113:13: note: jump bypasses variable initialization"} | ||
Line 3,114: | Line 3,114: | ||
[f]=l, | [f]=l, | ||
[i]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","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","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"}, | ||
[j]={{S,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;"},{S,854,"static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) { return S.getLangOpts().CPlusPlus11 && InDiagNote == diag::note_protected_by_variable_non_pod; }"}}, | [j]={{S,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 // ...\n if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n // ...\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 // ...\n if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n if (OutDiag)\n // ...\n else if (!Ctor->getParent()->isPOD())\n InDiag = diag::note_protected_by_variable_non_pod;"},{S,854,"static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) { return S.getLangOpts().CPlusPlus11 && InDiagNote == diag::note_protected_by_variable_non_pod; }"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,129: | Line 3,129: | ||
[f]=l, | [f]=l, | ||
[i]={"1778b030c0dc",1308108214,"Properly implement C++0x [stmt.dcl]p3, which requires a scope to be","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","Properly implement C++0x [stmt.dcl]p3, which requires a scope to be"}, | ||
[j]={{S,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;"},{S,847,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}}, | [j]={{S,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 // ...\n if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n // ...\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 // ...\n if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n if (OutDiag)\n InDiag = diag::note_protected_by_variable_nontriv_destructor;"},{S,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]={ | [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"} | ["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"} | ||
Line 3,143: | Line 3,143: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"960cc525ec72",1240047387, | [i]={"960cc525ec72",1240047387,ac,ac}, | ||
[j]={{S,149,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n if (VD->getType()->isVariablyModifiedType())\n InDiag = diag::note_protected_by_vla;"}}, | [j]={{S,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 // ...\n if (VD->getType()->isVariablyModifiedType())\n InDiag = diag::note_protected_by_vla;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,159: | Line 3,159: | ||
[f]=l, | [f]=l, | ||
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations.","Support for C++11 (non-template) alias declarations."}, | [i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations.","Support for C++11 (non-template) alias declarations."}, | ||
[j]={{S,224,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n if (TD->getUnderlyingType()->isVariablyModifiedType())\n return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}}, | [j]={{S,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 // ...\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]={ | [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"} | ["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"} | ||
Line 3,173: | Line 3,173: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"960cc525ec72",1240047387, | [i]={"960cc525ec72",1240047387,ac,ac}, | ||
[j]={{S,223,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n if (TD->getUnderlyingType()->isVariablyModifiedType())\n return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}}, | [j]={{S,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 // ...\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]={ | [k]={ | ||
[ | [Wc]={"clang/test/SemaObjC/scope-check.m:88:17: note: jump bypasses initialization of VLA typedef"} | ||
} | } | ||
}, | }, | ||
Line 3,189: | Line 3,189: | ||
[f]=l, | [f]=l, | ||
[i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method","objective-C: introduce __attribute((objc_requires_super)) on method"}, | [i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method","objective-C: introduce __attribute((objc_requires_super)) on method"}, | ||
[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);"}}, | [j]={{v,6133,"static void handleObjCRequiresSuperAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n // ...\n if (const auto *PDecl = dyn_cast_or_null<ObjCProtocolDecl>(DC)) {\n // ...\n S.Diag(PDecl->getLocation(), diag::note_protocol_decl);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/super-dealloc-attribute.m"]={"clang/test/SemaObjC/super-dealloc-attribute.m:11:11: note: protocol is declared here"} | ["clang/test/SemaObjC/super-dealloc-attribute.m"]={"clang/test/SemaObjC/super-dealloc-attribute.m:11:11: note: protocol is declared here"} | ||
Line 3,204: | Line 3,204: | ||
[f]=l, | [f]=l, | ||
[i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols","Objective-C. Diagose use of undefined protocols"}, | [i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols","Objective-C. Diagose use of undefined protocols"}, | ||
[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;"}}, | [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 // ...\n if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n // ...\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 // ...\n auto resolvedAsProtocols = [&] {\n // ...\n for (unsigned i = 0, n = protocols.size(); i != n; ++i) {\n // ...\n if (warnOnIncompleteProtocols && NestedProtocolHasNoDefinition(proto, forwardDecl)) {\n // ...\n Diag(forwardDecl->getLocation(), diag::note_protocol_decl_undefined) << forwardDecl;"}}, | ||
[k]={ | [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"} | ["clang/test/SemaObjC/class-def-test-1.m"]={"clang/test/SemaObjC/class-def-test-1.m:3:11: note: protocol \'SUPER\' has no definition"} | ||
Line 3,219: | Line 3,219: | ||
[f]=l, | [f]=l, | ||
[i]={"d2a713e41bd3",1443648462,"Don\'t inherit availability information when implementing a protocol requirement.","Don\'t inherit availability information when implementing a protocol requirement."}, | [i]={"d2a713e41bd3",1443648462,"Don\'t inherit availability information when implementing a protocol requirement.","Don\'t inherit availability information when implementing a protocol requirement."}, | ||
[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);"}}, | [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 // ...\n if (D->hasAttrs()) {\n // ...\n for (unsigned i = 0, e = Attrs.size(); i != e;) {\n // ...\n if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n if (OverrideOrImpl) {\n // ...\n if (AMK == AMK_Override)\n // ...\n else\n Diag(CI.getLoc(), diag::note_protocol_method);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,234: | Line 3,234: | ||
[f]=l, | [f]=l, | ||
[i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple","Objective-C [qoi]: When an class conforms to multiple"}, | [i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple","Objective-C [qoi]: When an class conforms to multiple"}, | ||
[j]={{F,990,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n for (const auto &Note : Mismatches) {\n auto Diag = S.Diag(Note.Prop->getLocation(), diag::note_protocol_property_declare) << Note.Kind;"}}, | [j]={{F,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 // ...\n for (const auto &Note : Mismatches) {\n auto Diag = S.Diag(Note.Prop->getLocation(), diag::note_protocol_property_declare) << Note.Kind;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,249: | Line 3,249: | ||
[f]=l, | [f]=l, | ||
[i]={"ccb373852758",1436916970,"[Sema] Don\'t emit \"pure virtual\" warning for fully qualified calls.","[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.","[Sema] Don\'t emit \"pure virtual\" warning for fully qualified calls."}, | ||
[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();"}}, | [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 // ...\n if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n // ...\n if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n // ...\n if (getLangOpts().AppleKext)\n Diag(MemExpr->getBeginLoc(), diag::note_pure_qualified_call_kext) << MD->getParent() << MD->getDeclName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,264: | Line 3,264: | ||
[f]=l, | [f]=l, | ||
[i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate.","Disallow abstract types where appropriate."}, | [i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate.","Disallow abstract types where appropriate."}, | ||
[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();"}}, | [j]={{z,5985,"void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {\n // ...\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 // ...\n Diag(SO->second.front().Method->getLocation(), diag::note_pure_virtual_function) << SO->second.front().Method->getDeclName() << RD->getDeclName();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 3,279: | Line 3,279: | ||
[f]=l, | [f]=l, | ||
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a","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","Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"}, | ||
[j]={{ | [j]={{ib,4026,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 3,294: | Line 3,294: | ||
[f]=l, | [f]=l, | ||
[i]={"773df4a11fab",1368573857,"Objective-C [diagnostics] [QOI], when method is not","Objective-C [diagnostics] [QOI], when method is not"}, | [i]={"773df4a11fab",1368573857,"Objective-C [diagnostics] [QOI], when method is not","Objective-C [diagnostics] [QOI], when method is not"}, | ||
[j]={{vb,1771,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n if (!Method) {\n if (!getLangOpts().DebuggerSupport) {\n // Find the class to which we are sending this message.\n if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n Diag(ThisClass->getLocation(), diag::note_receiver_class_declared);"}}, | [j]={{vb,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 // ...\n if (!Method) {\n // ...\n if (!getLangOpts().DebuggerSupport) {\n // ...\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]={ | [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"} | ["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:3:12: note: receiver is instance of class declared here"} | ||
Line 3,309: | Line 3,309: | ||
[f]=l, | [f]=l, | ||
[i]={"19c2e2fab2e9",1408491557,"Objective-C [qoi]. Provide fix-it hint when sending","Objective-C [qoi]. Provide fix-it hint when sending"}, | [i]={"19c2e2fab2e9",1408491557,"Objective-C [qoi]. Provide fix-it hint when sending","Objective-C [qoi]. Provide fix-it hint when sending"}, | ||
[j]={{vb,1774,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n if (!Method) {\n if (!getLangOpts().DebuggerSupport) {\n // Find the class to which we are sending this message.\n if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n if (!RecRange.isInvalid())\n if (ThisClass->lookupClassMethod(Sel))\n Diag(RecRange.getBegin(), diag::note_receiver_expr_here) << FixItHint::CreateReplacement(RecRange, ThisClass->getNameAsString());"}}, | [j]={{vb,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 // ...\n if (!Method) {\n // ...\n if (!getLangOpts().DebuggerSupport) {\n // ...\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 // ...\n if (!RecRange.isInvalid())\n if (ThisClass->lookupClassMethod(Sel))\n Diag(RecRange.getBegin(), diag::note_receiver_expr_here) << FixItHint::CreateReplacement(RecRange, ThisClass->getNameAsString());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,324: | Line 3,324: | ||
[f]=l, | [f]=l, | ||
[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and","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","objc: Issue diagnostic when receiver type is a forward class declaration and"}, | ||
[j]={{vb,3074,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n if (!Method) {\n if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n } else {\n // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n // long as one of the protocols implements the selector (if not, warn).\n // And as long as message is not deprecated/unavailable (warn if it is).\n if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {\n Diag(Receiver ? Receiver->getBeginLoc() : SuperLoc, diag::note_receiver_is_id);"}}, | [j]={{vb,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 // ...\n if (!Method) {\n // ...\n if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n // ...\n } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n // ...\n } else {\n // ...\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 // ...\n } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n // ...\n if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {\n // ...\n Diag(Receiver ? Receiver->getBeginLoc() : SuperLoc, diag::note_receiver_is_id);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,338: | Line 3,338: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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);"}}, | [j]={{D,6032,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n if (Param->hasUnparsedDefaultArg()) {\n // ...\n // If we\'ve already cleared out the location for the default argument,\n // that means we\'re parsing it right now.\n if (!UnparsedDefaultArgLocs.count(Param)) {\n // ...\n Diag(CallLoc, diag::note_recursive_default_argument_used_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,353: | Line 3,353: | ||
[h]=m, | [h]=m, | ||
[f]=jc, | [f]=jc, | ||
[i]={"0ad318217917",1494483607, | [i]={"0ad318217917",1494483607,wc,wc}, | ||
[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();"}}, | [j]={{w,4786,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n // ...\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 // ...\n } else {\n Diag(IncLoc, diag::note_redefinition_include_same_file) << HdrFilename.str();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,368: | Line 3,368: | ||
[h]=m, | [h]=m, | ||
[f]=jc, | [f]=jc, | ||
[i]={"0ad318217917",1494483607, | [i]={"0ad318217917",1494483607,wc,wc}, | ||
[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();"}}, | [j]={{w,4780,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 3,384: | Line 3,384: | ||
[f]=l, | [f]=l, | ||
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and","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","Add a simple new warning to catch blatantly dangling pointer and"}, | ||
[j]={{ | [j]={{bb,8174,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n // ...\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n // ...\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 // ...\n Diag(ExtendingDecl->getLocation(), diag::note_ref_or_ptr_member_declared_here) << true;"},{bb,8229,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n // ...\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n // ...\n case LK_MemInitializer: {\n if (isa<MaterializeTemporaryExpr>(L)) {\n // ...\n } else {\n // ...\n if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n // ...\n Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here) << (unsigned)IsPointer;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:12:12: note: pointer member declared here"} | ["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:12:12: note: pointer member declared here"} | ||
Line 3,399: | Line 3,399: | ||
[f]=l, | [f]=l, | ||
[i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors","Warn about non-aggregate classes with no user-declared constructors"}, | [i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors","Warn about non-aggregate classes with no user-declared constructors"}, | ||
[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();"}}, | [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 // ...\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 // ...\n for (const auto *F : Record->fields()) {\n // ...\n if (F->getType()->isReferenceType() || (F->getType().isConstQualified() && F->getType()->isScalarType())) {\n // ...\n Diag(F->getLocation(), diag::note_refconst_member_not_initialized) << F->getType()->isReferenceType() << F->getDeclName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/instantiation-backtrace.cpp"]={"clang/test/SemaTemplate/instantiation-backtrace.cpp:36:7: note: reference member \'t\' will never be initialized"} | ["clang/test/SemaTemplate/instantiation-backtrace.cpp"]={"clang/test/SemaTemplate/instantiation-backtrace.cpp:36:7: note: reference member \'t\' will never be initialized"} | ||
Line 3,414: | Line 3,414: | ||
[f]=l, | [f]=l, | ||
[i]={"c1888e0c6e62",1403997937,"Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to","Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to"}, | [i]={"c1888e0c6e62",1403997937,"Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to","Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to"}, | ||
[j]={{G,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]={{G,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 // ...\n // If possible, point to location of function.\n if (FD) {\n SemaRef.Diag(FD->getLocation(), diag::note_reference_is_return_value) << FD;"}}, | ||
[k]={ | [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", | ["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} | ||
} | } | ||
}, | }, | ||
Line 3,429: | Line 3,429: | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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;"}}, | [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 // ...\n auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n // ...\n Diag(Temp->getLocation(), diag::note_referenced_type_template) << 0;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:57:25: note: class template declared here"} | ["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:57:25: note: class template declared here"} | ||
Line 3,444: | Line 3,444: | ||
[f]=l, | [f]=l, | ||
[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are","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","Warn about attempts to reinterpret_cast between two types that are"}, | ||
[j]={{sb,1076,"/// Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is not used as upcast\n/// or downcast between respective pointers or references.\nstatic void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr, QualType DestType, SourceRange OpRange) {\n Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static) << int(ReinterpretKind) << FixItHint::CreateReplacement(BeginLoc, \"static_cast\");"}}, | [j]={{sb,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 // ...\n Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static) << int(ReinterpretKind) << FixItHint::CreateReplacement(BeginLoc, \"static_cast\");"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,459: | Line 3,459: | ||
[f]="Related Result Type Issue", | [f]="Related Result Type Issue", | ||
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because","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","Add a clarifying note when a return statement is rejected because"}, | ||
[j]={{vb,1672,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n // Look for a method overridden by this method which explicitly uses\n // \'instancetype\'.\n if (const ObjCMethodDecl *overridden = findExplicitInstancetypeDeclarer(MD, Context.getObjCInstanceType())) {\n Diag(loc, diag::note_related_result_type_explicit) << /*current method*/ 1 << range;"}}, | [j]={{vb,1672,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n // ...\n // Look for a method overridden by this method which explicitly uses\n // \'instancetype\'.\n if (const ObjCMethodDecl *overridden = findExplicitInstancetypeDeclarer(MD, Context.getObjCInstanceType())) {\n // ...\n Diag(loc, diag::note_related_result_type_explicit) << /*current method*/ 1 << range;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,474: | Line 3,474: | ||
[f]="Related Result Type Issue", | [f]="Related Result Type Issue", | ||
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because","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","Add a clarifying note when a return statement is rejected because"}, | ||
[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;"},{vb,1680,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n // Otherwise, if we have an interesting method family, note that.\n // This should always trigger if the above didn\'t.\n if (ObjCMethodFamily family = MD->getMethodFamily())\n Diag(MD->getLocation(), diag::note_related_result_type_family) << /*current method*/ 1 << family;"}}, | [j]={{C,177,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n // ...\n if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n Diag(Overridden->getLocation(), diag::note_related_result_type_family) << /*overridden method*/ 0 << Family;"},{vb,1680,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 3,489: | Line 3,489: | ||
[f]="Related Result Type Issue", | [f]="Related Result Type Issue", | ||
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics.","Implement Objective-C Related Result Type semantics."}, | [i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics.","Implement Objective-C Related Result Type semantics."}, | ||
[j]={{vb,1706,"void Sema::EmitRelatedResultTypeNote(const Expr *E) {\n Diag(Method->getLocation(), diag::note_related_result_type_inferred) << Method->isInstanceMethod() << Method->getSelector() << MsgSend->getType();"}}, | [j]={{vb,1706,"void Sema::EmitRelatedResultTypeNote(const Expr *E) {\n // ...\n Diag(Method->getLocation(), diag::note_related_result_type_inferred) << Method->isInstanceMethod() << Method->getSelector() << MsgSend->getType();"}}, | ||
[k]={ | [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 *\')"} | ["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 *\')"} | ||
Line 3,504: | Line 3,504: | ||
[f]="Related Result Type Issue", | [f]="Related Result Type Issue", | ||
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics.","Implement Objective-C Related Result Type semantics."}, | [i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics.","Implement Objective-C Related Result Type semantics."}, | ||
[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);"}}, | [j]={{C,182,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n // ...\n if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n // ...\n else\n Diag(Overridden->getLocation(), diag::note_related_result_type_overridden);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,518: | Line 3,518: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"7eb0b2c1819c",1393377448, | [i]={"7eb0b2c1819c",1393377448,Gc,Gc}, | ||
[j]={{G,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]={{G,12026,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n // ...\n // Unsigned types cannot be negative. Suggest removing the absolute value\n // function call.\n if (ArgType->isUnsignedIntegerType()) {\n // ...\n Diag(Call->getExprLoc(), diag::note_remove_abs) << FunctionName << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,534: | Line 3,534: | ||
[f]=l, | [f]=l, | ||
[i]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max","Warn on unsigned zero in call to std::max"}, | [i]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max","Warn on unsigned zero in call to std::max"}, | ||
[j]={{G,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]={{G,12144,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n // ...\n Diag(Call->getExprLoc(), diag::note_remove_max_call) << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange()) << FixItHint::CreateRemoval(RemovalRange);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,549: | Line 3,549: | ||
[f]=l, | [f]=l, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings.","Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings.","Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[j]={{ | [j]={{bb,8439,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n // ...\n S.Diag(CE->getBeginLoc(), diag::note_remove_move) << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) << FixItHint::CreateRemoval(SourceRange(RParen, RParen));"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,564: | Line 3,564: | ||
[f]=l, | [f]=l, | ||
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a","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","Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"}, | ||
[j]={{ | [j]={{ib,4034,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n // ...\n S.Diag(Paren.Loc, diag::note_remove_parens_for_variable_declaration) << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,578: | Line 3,578: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"7eb0b2c1819c",1393377448, | [i]={"7eb0b2c1819c",1393377448,Gc,Gc}, | ||
[j]={{G,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]={{G,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 // ...\n S.Diag(Loc, diag::note_replace_abs_function) << FunctionName << FixItHint::CreateReplacement(Range, FunctionName);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:31:9: note: use function \'fabs\' instead"} | ["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:31:9: note: use function \'fabs\' instead"} | ||
Line 3,594: | Line 3,594: | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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\");"}}, | [j]={{z,7778,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n // ...\n if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n if (First) {\n // ...\n if (!inTemplateInstantiation() && !HadError) {\n // ...\n if (ShouldDeleteForTypeMismatch) {\n // ...\n } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr,\n // ...\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 // ...\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 // ...\n if (!inTemplateInstantiation() && !FD->isImplicit()) {\n // ...\n if (FD->getDefaultLoc().isValid())\n Diag(FD->getDefaultLoc(), diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(FD->getDefaultLoc(), \"delete\");"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 3,608: | Line 3,608: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[j]={{ | [j]={{mb,992,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::RewritingOperatorAsSpaceship:\n Diags.Report(Active->Entity->getLocation(), diag::note_rewriting_operator_as_spaceship);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,624: | Line 3,624: | ||
[f]=l, | [f]=l, | ||
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"," [RISCV] Add support for interrupt attribute"}, | [i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"," [RISCV] Add support for interrupt attribute"}, | ||
[j]={{v,7754,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // Warn about repeated attributes.\n if (const auto *A = D->getAttr<RISCVInterruptAttr>()) {\n S.Diag(A->getLocation(), diag::note_riscv_repeated_interrupt_attribute);"}}, | [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 // ...\n S.Diag(A->getLocation(), diag::note_riscv_repeated_interrupt_attribute);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,639: | Line 3,639: | ||
[f]=m, | [f]=m, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{L,2217,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n // ...\n void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n // ...\n if (IsRelatedToDecl) {\n // ...\n } else {\n // ...\n if (SuggestSuggestions) {\n S.Diag(Loc, diag::note_safe_buffer_usage_suggestions_disabled);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,654: | Line 3,654: | ||
[f]=m, | [f]=m, | ||
[i]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted.","[ODRHash] Supply more information when generic error message is emitted."}, | [i]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted.","[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 // ...\n if (DR.SecondDecl) {\n Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference) << DR.SecondDecl->getSourceRange();"}} | ||
}, | }, | ||
["note_sentinel_here"]={ | ["note_sentinel_here"]={ | ||
Line 3,666: | Line 3,666: | ||
[f]=l, | [f]=l, | ||
[i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message","Look for and diagnose missing sentinel argument on message"}, | [i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message","Look for and diagnose missing sentinel argument on message"}, | ||
[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);"}}, | [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 // ...\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 // ...\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 // ...\n Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,681: | Line 3,681: | ||
[f]=m, | [f]=m, | ||
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing","Sema: add warning for c++ member variable shadowing"}, | [i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing","Sema: add warning for c++ member variable shadowing"}, | ||
[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);"}} | [j]={{z,3393,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n // ...\n for (const auto &P : Paths) {\n // ...\n if (AS_none != CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {\n // ...\n Diag(BaseField->getLocation(), diag::note_shadow_field);"}} | ||
}, | }, | ||
["note_silence_aligned_allocation_unavailable"]={ | ["note_silence_aligned_allocation_unavailable"]={ | ||
Line 3,693: | Line 3,693: | ||
[f]=l, | [f]=l, | ||
[i]={"751381db5a39",1534866864,"[clang][NFC] Fix typo in the name of a note","[clang][NFC] Fix typo in the name of a note"}, | [i]={"751381db5a39",1534866864,"[clang][NFC] Fix typo in the name of a note","[clang][NFC] Fix typo in the name of a note"}, | ||
[j]={{ | [j]={{hc,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 // ...\n Diag(Loc, diag::note_silence_aligned_allocation_unavailable);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,707: | Line 3,707: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"bd8791610948",1569403888, | [i]={"bd8791610948",1569403888,cc,cc}, | ||
[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 // ...\n if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 3,723: | Line 3,723: | ||
[f]=l, | [f]=l, | ||
[i]={"5c0405d48454",1254954940,"Type checking for specializations of member functions of class","Type checking for specializations of member functions of class"}, | [i]={"5c0405d48454",1254954940,"Type checking for specializations of member functions of class","Type checking for specializations of member functions of class"}, | ||
[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);"}}, | [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 // ...\n // Make sure that this is a specialization of a member.\n if (!InstantiatedFrom) {\n // ...\n Diag(Instantiation->getLocation(), diag::note_specialized_decl);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,738: | Line 3,738: | ||
[f]=l, | [f]=l, | ||
[i]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization"}, | [i]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization"}, | ||
[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);"}}, | [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 // ...\n if (isa<ClassTemplateDecl>(Specialized))\n // ...\n else if (isa<VarTemplateDecl>(Specialized))\n // ...\n else if (isa<FunctionTemplateDecl>(Specialized))\n // ...\n else if (isa<CXXMethodDecl>(Specialized))\n // ...\n else if (isa<VarDecl>(Specialized))\n // ...\n else if (isa<RecordDecl>(Specialized))\n // ...\n else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n // ...\n else {\n // ...\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 // ...\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 // ...\n S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,753: | Line 3,753: | ||
[f]=l, | [f]=l, | ||
[i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}","Suggestions to fix -Wmissing-{prototypes,variable-declarations}"}, | [i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}","Suggestions to fix -Wmissing-{prototypes,variable-declarations}"}, | ||
[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{});"}}, | [j]={{w,14079,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\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 // ...\n if (!prev) {\n // ...\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 {\n // ...\n if (FD) {\n // ...\n if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n // ...\n if (PossiblePrototype) {\n // ...\n } else {\n // ...\n Diag(FD->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* function */ 1 << (FD->getStorageClass() == SC_None ? FixItHint::CreateInsertion(findBeginLoc(), \"static \") : FixItHint{});"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,768: | Line 3,768: | ||
[f]=l, | [f]=l, | ||
[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings.","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.","Add -Wstring-plus-char, which warns when adding char literals to C strings."}, | ||
[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);"}}, | [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 // ...\n // Only print a fixit for \"str\" + int, not for int + \"str\".\n if (IndexExpr == RHSExpr) {\n // ...\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 // ...\n // Only print a fixit for \"str\" + int, not for int + \"str\".\n if (IndexExpr == RHSExpr) {\n // ...\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 // ...\n // Only print a fixit for str + char, not for char + str.\n if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n // ...\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 // ...\n // Only print a fixit for str + char, not for char + str.\n if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n // ...\n } else {\n Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,783: | Line 3,783: | ||
[f]=l, | [f]=l, | ||
[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i...","Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat is the size of the *source*, and not the size of the *destination*. This warning is off by default (for now)."}, | [i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i...","Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat is the size of the *source*, and not the size of the *destination*. This warning is off by default (for now)."}, | ||
[j]={{G,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]={{G,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 // ...\n Diag(OriginalSizeArg->getBeginLoc(), diag::note_strlcpycat_wrong_size) << FixItHint::CreateReplacement(OriginalSizeArg->getSourceRange(), OS.str());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,798: | Line 3,798: | ||
[f]=l, | [f]=l, | ||
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size","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","Add a new compiler warning, which flags anti-patterns used as the size"}, | ||
[j]={{G,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]={{G,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 // ...\n Diag(SL, diag::note_strncat_wrong_size) << FixItHint::CreateReplacement(SR, OS.str());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,813: | Line 3,813: | ||
[f]=l, | [f]=l, | ||
[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags.","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.","Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."}, | ||
[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()));"}}, | [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 // ...\n if (isDefinition) {\n // ...\n for (const TagDecl *I : Previous->redecls()) {\n if (I->getTagKind() != NewTag) {\n // ...\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 // ...\n if (Redecl->getTagKind() != NewTag) {\n // ...\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]={ | [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?"} | ["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?"} | ||
Line 3,827: | Line 3,827: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"bd8791610948",1569403888, | [i]={"bd8791610948",1569403888,cc,cc}, | ||
[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]={ | [k]={ | ||
Line 3,843: | Line 3,843: | ||
[f]=m, | [f]=m, | ||
[i]={"d5478fdd8f05",1409342498,"Add an option to silence all analyzer warnings.","Add an option to silence all analyzer warnings."}, | [i]={"d5478fdd8f05",1409342498,"Add an option to silence all analyzer warnings.","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 // ...\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 // ...\n if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n // ...\n Diags.Report(diag::note_suggest_disabling_all_checkers);"}} | ||
}, | }, | ||
["note_suggest_parens_for_macro"]={ | ["note_suggest_parens_for_macro"]={ | ||
Line 3,855: | Line 3,855: | ||
[f]=H, | [f]=H, | ||
[i]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a","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","Add new diagnostic messages when too many arguments are presented to a"}, | ||
[j]={{ | [j]={{Zc,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 // ...\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 // ...\n DiagnosticBuilder DB = Diag(MacroName, diag::note_suggest_parens_for_macro);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,870: | Line 3,870: | ||
[f]=l, | [f]=l, | ||
[i]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides.","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.","Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."}, | ||
[j]={{ | [j]={{bb,10919,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n // ...\n // Warn if CTAD was used on a type that does not have any user-defined\n // deduction guides.\n if (!FoundDeductionGuide) {\n // ...\n Diag(Template->getLocation(), diag::note_suppress_ctad_maybe_unsupported);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,885: | Line 3,885: | ||
[f]=l, | [f]=l, | ||
[i]={"783ffde6d3f0",1325718973,"objc: When issuing warning for missing synthesis for","objc: When issuing warning for missing synthesis for"}, | [i]={"783ffde6d3f0",1325718973,"objc: When issuing warning for missing synthesis for","objc: When issuing warning for missing synthesis for"}, | ||
[j]={{F,2026,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n // When reporting on missing property setter/getter implementation in\n // categories, do not report when they are declared in primary class,\n // class\'s protocol, or one of it super classes. This is because,\n // the class is going to implement them.\n if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n if (S.LangOpts.ObjCDefaultSynthProperties && S.LangOpts.ObjCRuntime.isNonFragile())\n if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl))\n if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs())\n S.Diag(RID->getLocation(), diag::note_suppressed_class_declare);"}}, | [j]={{F,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 // ...\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 // ...\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]={ | [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"} | ["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"} | ||
Line 3,900: | Line 3,900: | ||
[f]=l, | [f]=l, | ||
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | [i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | ||
[j]={{ | [j]={{yb,1380,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n // ...\n Diag(EndLoc, diag::note_surrounding_namespace_ends_here);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:10:1: note: surrounding namespace with visibility attribute ends here"} | ["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:10:1: note: surrounding namespace with visibility attribute ends here"} | ||
Line 3,915: | Line 3,915: | ||
[f]=l, | [f]=l, | ||
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | [i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | ||
[j]={{ | [j]={{yb,1,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n // ...\n } else if (!StartsWithPragma && !IsNamespaceEnd) {\n // ...\n Diag(Back->second, diag::note_surrounding_namespace_starts_here);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:3:11: note: surrounding namespace with visibility attribute starts here"} | ["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:3:11: note: surrounding namespace with visibility attribute starts here"} | ||
Line 3,930: | Line 3,930: | ||
[f]=l, | [f]=l, | ||
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args","[Sema] Add a new warning, -Wmemset-transposed-args"}, | [i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args","[Sema] Add a new warning, -Wmemset-transposed-args"}, | ||
[j]={{G,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]={{G,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 // ...\n if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n // ...\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 // ...\n S.Diag(DiagLoc, diag::note_suspicious_bzero_size_silence);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,945: | Line 3,945: | ||
[f]=l, | [f]=l, | ||
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args","[Sema] Add a new warning, -Wmemset-transposed-args"}, | [i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args","[Sema] Add a new warning, -Wmemset-transposed-args"}, | ||
[j]={{G,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;"},{G,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]={{G,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 // ...\n if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n // ...\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 // ...\n } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n // ...\n S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 0;"},{G,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 // ...\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 // ...\n S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 1;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,960: | Line 3,960: | ||
[f]=l, | [f]=l, | ||
[i]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","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","Implement conversion from a switch condition with class type to an"}, | ||
[j]={{ | [j]={{T,1056,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{T,1067,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:5:12: note: conversion to integral type \'int\'"} | ["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:5:12: note: conversion to integral type \'int\'"} | ||
Line 3,975: | Line 3,975: | ||
[f]=l, | [f]=l, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier"}, | ||
[j]={{ | [j]={{T,687,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n // ...\n auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n // ...\n Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{T,745,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n // ...\n // Find callee function signature.\n if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n // ...\n } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n // ...\n } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n // ...\n Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{T,781,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n // ...\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 // ...\n Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{T,801,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n // ...\n // Caller and callee must match in whether they have a \"this\" parameter.\n if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n // ...\n Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{T,859,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n // ...\n if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n // ...\n Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,990: | Line 3,990: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\n // Address / reference template args must have external linkage in C++98.\n if (Entity->getFormalLinkage() == InternalLinkage) {\n // ...\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 // ...\n // Address / reference template args must have external linkage in C++98.\n if (Entity->getFormalLinkage() == InternalLinkage) {\n // ...\n } else if (!Entity->hasLinkage()) {\n // ...\n S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,005: | Line 4,005: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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);"}}, | [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 // ...\n // A non-type template argument must refer to an object or function.\n if (!Func && !Var && !Guid) {\n // ...\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 // ...\n if (Var) {\n // ...\n // A template argument must have static storage duration.\n if (Var->getTLSKind()) {\n // ...\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 // ...\n S.Diag(DRE->getDecl()->getLocation(), diag::note_template_arg_refers_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,020: | Line 4,020: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}} | [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 // ...\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 // ...\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"]={ | ||
Line 4,031: | Line 4,031: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"9bea9cc73bd0",1403720757, | [i]={"9bea9cc73bd0",1403720757,qc,qc}, | ||
[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;"}}, | [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 // ...\n if (BaseTemplateSpec->isExplicitSpecialization()) {\n Diag(BaseTemplateSpec->getLocation(), diag::note_template_class_explicit_specialization_was_here) << BaseTemplateSpec;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:451:20: note: class template \'ExplicitlySpecializedTemplate<int>\' was explicitly specialized here"} | ["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:451:20: note: class template \'ExplicitlySpecializedTemplate<int>\' was explicitly specialized here"} | ||
Line 4,047: | Line 4,047: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{ | [j]={{mb,766,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n if (isa<ClassTemplateSpecializationDecl>(Record))\n DiagID = diag::note_template_class_instantiation_here;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,061: | Line 4,061: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"9bea9cc73bd0",1403720757, | [i]={"9bea9cc73bd0",1403720757,qc,qc}, | ||
[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;"}}, | [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 // ...\n if (BaseTemplateSpec->isExplicitSpecialization()) {\n // ...\n } else {\n Diag(BaseTemplateSpec->getPointOfInstantiation(), diag::note_template_class_instantiation_was_here) << BaseTemplateSpec;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:461:17: note: class template \'ExplicitlyInstantiatedTemplate<int>\' was instantiated here"} | ["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:461:17: note: class template \'ExplicitlyInstantiatedTemplate<int>\' was instantiated here"} | ||
Line 4,077: | Line 4,077: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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 // | [j]={{w,5863,"/// Retrieves the declaration name from a parsed unqualified-id.\nDeclarationNameInfo Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {\n // ...\n case UnqualifiedIdKind::IK_DeductionGuideName: {\n // ...\n if (!Template || !isa<ClassTemplateDecl>(Template)) {\n // ...\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 // ...\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 // ...\n Diag(GuidedTemplateDecl->getLocation(), diag::note_template_decl_here);"},{bb,10578,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n // ...\n if (!Template) {\n // ...\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 // ...\n if (PatternDef) {\n // ...\n } else if (InstantiatedFromMember) {\n // ...\n } else {\n if (isa<FunctionDecl>(Instantiation)) {\n // ...\n } else if (isa<TagDecl>(Instantiation)) {\n // ...\n Note = diag::note_template_decl_here;"},{y,4426,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n // ...\n S.Diag(Template->getLocation(), diag::note_template_decl_here);"},{y,4902,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n // ...\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 // ...\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 // ...\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 // ...\n } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n // ...\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 // ...\n // If we have any leftover arguments, then there were too many arguments.\n // Complain and fail.\n if (ArgIdx < NumArgs) {\n // ...\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 // ...\n case LookupResult::Found:\n // ...\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 // ...\n Diag(TD->getLocation(), diag::note_template_decl_here);"},{ib,3739,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n if (Deduced) {\n // ...\n if (Error != -1) {\n // ...\n if (auto *TD = TN.getAsTemplateDecl())\n SemaRef.Diag(TD->getLocation(), diag::note_template_decl_here);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:5:26: note: template is declared here"} | ["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:5:26: note: template is declared here"} | ||
Line 4,092: | Line 4,092: | ||
[f]=l, | [f]=l, | ||
[i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | [i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | ||
[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();"}}, | [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 // ...\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 // ...\n if (!R->isFunctionType()) {\n // ...\n // Check the new variable specialization against the parsed input.\n if (PrevTemplate && !Context.hasSameType(Prev->getType(), R)) {\n // ...\n Diag(PrevTemplate->getLocation(), diag::note_template_declared_here) << 2 << PrevTemplate->getDeclName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/alias-nested-nontag.cpp"]={"clang/test/SemaTemplate/alias-nested-nontag.cpp:3:22: note: type alias template \'Id\' declared here"} | ["clang/test/SemaTemplate/alias-nested-nontag.cpp"]={"clang/test/SemaTemplate/alias-nested-nontag.cpp:3:22: note: type alias template \'Id\' declared here"} | ||
Line 4,107: | Line 4,107: | ||
[f]=l, | [f]=l, | ||
[i]={"84d49a2085bb",1257976463,"Improve diagnostics when a default template argument does not match","Improve diagnostics when a default template argument does not match"}, | [i]={"84d49a2085bb",1257976463,"Improve diagnostics when a default template argument does not match","Improve diagnostics when a default template argument does not match"}, | ||
[j]={{ | [j]={{mb,917,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::DefaultTemplateArgumentChecking: {\n // ...\n Diags.Report(Active->PointOfInstantiation, diag::note_template_default_arg_checking) << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,122: | Line 4,122: | ||
[f]=l, | [f]=l, | ||
[i]={"4b38ded66a55",1331766790,"Instantiating a class template should not instantiate the definition of any","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","Instantiating a class template should not instantiate the definition of any"}, | ||
[j]={{ | [j]={{mb,787,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n // ...\n } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n Diags.Report(Active->PointOfInstantiation, diag::note_template_enum_def_here) << ED << Active->InstantiationRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,137: | Line 4,137: | ||
[f]=l, | [f]=l, | ||
[i]={"f623c962600b",1334624280,"Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it.","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.","Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it."}, | ||
[j]={{ | [j]={{mb,933,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::ExceptionSpecInstantiation:\n Diags.Report(Active->PointOfInstantiation, diag::note_template_exception_spec_instantiation_here) << cast<FunctionDecl>(Active->Entity) << Active->InstantiationRange;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp"]={ | ["clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp"]={Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,"clang/test/SemaTemplate/instantiation-depth-exception-spec.cpp:12:17: note: in instantiation of exception specification for \'go\' requested here"} | ||
} | } | ||
}, | }, | ||
Line 4,152: | Line 4,152: | ||
[f]=l, | [f]=l, | ||
[i]={"7981004eb7bd",1526006588,"Improve diagnostics and error recovery for template name lookup.","Improve diagnostics and error recovery for template name lookup."}, | [i]={"7981004eb7bd",1526006588,"Improve diagnostics and error recovery for template name lookup.","Improve diagnostics and error recovery for template name lookup."}, | ||
[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();"}}, | [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 // ...\n if (Found.empty()) {\n // ...\n // If a \'template\' keyword was used, a lookup that finds only non-template\n // names is an error.\n if (ExampleLookupResult && RequiredTemplate) {\n // ...\n Diag(ExampleLookupResult->getUnderlyingDecl()->getLocation(), diag::note_template_kw_refers_to_non_template) << Found.getLookupName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:18:10: note: declared as a non-template here"} | ["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:18:10: note: declared as a non-template here"} | ||
Line 4,167: | Line 4,167: | ||
[f]=l, | [f]=l, | ||
[i]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only","Instantiation for member classes of class templates. Note that only"}, | [i]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only","Instantiation for member classes of class templates. Note that only"}, | ||
[j]={{ | [j]={{mb,764,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n unsigned DiagID = diag::note_template_member_class_here;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,182: | Line 4,182: | ||
[f]=l, | [f]=l, | ||
[i]={"8567358cc9e0",1242666117,"When instantiating the definition of a member function of a class","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","When instantiating the definition of a member function of a class"}, | ||
[j]={{ | [j]={{mb,774,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n // ...\n if (Function->getPrimaryTemplate())\n // ...\n else\n DiagID = diag::note_template_member_function_here;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,197: | Line 4,197: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // ...\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 // ...\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n // ...\n if (TemplateArgLoc.isValid()) {\n // ...\n NextDiag = diag::note_template_nontype_parm_different_type;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,212: | Line 4,212: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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();"}}, | [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 // ...\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // ...\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 // ...\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n // ...\n S.Diag(OldNTTP->getLocation(), diag::note_template_nontype_parm_prev_declaration) << OldNTTP->getType();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,227: | Line 4,227: | ||
[f]=l, | [f]=l, | ||
[i]={"d60b82f93eee",1416267405,"Handle use of default member initializers before end of outermost class","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","Handle use of default member initializers before end of outermost class"}, | ||
[j]={{ | [j]={{mb,792,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n // ...\n } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n // ...\n } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n Diags.Report(Active->PointOfInstantiation, diag::note_template_nsdmi_here) << FD << Active->InstantiationRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,242: | Line 4,242: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\n if (TemplateArgLoc.isValid()) {\n // ...\n NextDiag = diag::note_template_param_different_kind;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,257: | Line 4,257: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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 | [j]={{"clang/lib/Sema/SemaLambda.cpp",1382,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n // ...\n if (TemplateParams) {\n for (const auto *TP : TemplateParams->asArray()) {\n // ...\n for (const auto &Capture : Intro.Captures) {\n if (Capture.Id == TP->getIdentifier()) {\n // ...\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 // ...\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 // ...\n case TemplateArgument::Expression: {\n // ...\n if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n // ...\n if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n // ...\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 // ...\n default: {\n // ...\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 // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Template:\n case TemplateArgument::TemplateExpansion:\n // ...\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 // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Type: {\n // ...\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 // ...\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n // ...\n if (ArgIdx < NumArgs) {\n // ...\n if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n // ...\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 // ...\n if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n // ...\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 // ...\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 // ...\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 // ...\n if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n // ...\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 // ...\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 // ...\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 // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n if (!ParamRef->getPointeeType()->isFunctionType()) {\n // ...\n if ((ParamQuals | ArgQuals) != ParamQuals) {\n // ...\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 // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n // ...\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 // ...\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 // ...\n if (!Entity) {\n // ...\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 // ...\n // Cannot refer to non-static data members\n if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n // ...\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 // ...\n // Cannot refer to non-static member functions\n if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n if (!Method->isStatic()) {\n // ...\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 // ...\n if (Var) {\n // A value of reference type is not an object.\n if (Var->getType()->isReferenceType()) {\n // ...\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 // ...\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 // ...\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 // ...\n if (AddressTaken && ParamType->isReferenceType()) {\n // ...\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 // ...\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 // ...\n } else if (Entity->getType()->isArrayType()) {\n // ...\n } else {\n // ...\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n // ...\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 // ...\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 // ...\n } else if (Entity->getType()->isArrayType()) {\n // ...\n } else {\n // ...\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 // ...\n if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n // ...\n } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n // ...\n if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n // ...\n } else {\n // ...\n if (Result == TDK_AlreadyDiagnosed) {\n // ...\n } else if (Result != TDK_Success) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n // ...\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 // ...\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 // ...\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 // ...\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 // ...\n if (!ArgType->isIntegralOrEnumerationType()) {\n // ...\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 // ...\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 // ...\n // Try to convert the argument to the parameter\'s type.\n if (Context.hasSameType(ParamType, ArgType)) {\n // ...\n } else if (ParamType->isBooleanType()) {\n // ...\n } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n // ...\n } else {\n // ...\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 // ...\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 // ...\n if (ParamType->isBooleanType()) {\n // ...\n } else {\n // ...\n // Complain if an unsigned parameter received a negative value.\n if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n // ...\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 // ...\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 // ...\n if (ParamType->isBooleanType()) {\n // ...\n } else {\n // ...\n if (RequiredBits > AllowedBits) {\n // ...\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 // ...\n // Deal with parameters of type std::nullptr_t.\n if (ParamType->isNullPtrType()) {\n // ...\n case NPV_NotNullPointer:\n // ...\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 // ...\n if (ParamUseRange.isValid()) {\n // ...\n S.Diag(Param->getLocation(), diag::note_template_param_here) << (IsDefaultArgument ? ParamUseRange : SourceRange()) << ParamUseRange;"}}, | ||
[k]={ | [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"} | ["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:3:14: note: template parameter is declared here"} | ||
Line 4,272: | Line 4,272: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\n if (TemplateArgLoc.isValid()) {\n // ...\n NextDiag = diag::note_template_param_list_different_arity;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,287: | Line 4,287: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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);"}}, | [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 // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\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 // ...\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 // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\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 // ...\n } else if (InconsistentDefaultArg) {\n // ...\n } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n // ...\n Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,302: | Line 4,302: | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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;"}} | [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 // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\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 // ...\n } else if (InconsistentDefaultArg) {\n // ...\n Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg_in_other_module) << PrevModuleName;"}} | ||
}, | }, | ||
["note_template_parameter_pack_here"]={ | ["note_template_parameter_pack_here"]={ | ||
Line 4,314: | Line 4,314: | ||
[f]=l, | [f]=l, | ||
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"}, | [i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"}, | ||
[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();"}}, | [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 // ...\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 // ...\n S.Diag(Old->getLocation(), diag::note_template_parameter_pack_here) << ParamKind << Old->isParameterPack();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,329: | Line 4,329: | ||
[f]=l, | [f]=l, | ||
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"}, | [i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"}, | ||
[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;"}} | [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 // ...\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 // ...\n if (TemplateArgLoc.isValid()) {\n // ...\n NextDiag = diag::note_template_parameter_pack_non_pack;"}} | ||
}, | }, | ||
["note_template_prev_declaration"]={ | ["note_template_prev_declaration"]={ | ||
Line 4,341: | Line 4,341: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\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 // ...\n if (OldParamHasDfl && NewParamHasDfl) {\n // ...\n } else if (OldParamHasDfl) {\n // ...\n } else if (NewParamHasDfl) {\n if (New->getDescribedFunctionTemplate()) {\n // ...\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 // ...\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 // ...\n if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n // ...\n auto Diagnose = [&] {\n // ...\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 // ...\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 // ...\n if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n // ...\n auto Diagnose = [&] {\n // ...\n Diag(OldRC ? OldRC->getBeginLoc() : Old->getTemplateLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,356: | Line 4,356: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{ | [j]={{mb,726,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n // ...\n SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth) << SemaRef.getLangOpts().InstantiationDepth;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,370: | Line 4,370: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"6d485ff455ea",1576172311, | [i]={"6d485ff455ea",1576172311,Zb,Zb}, | ||
[j]={{ | [j]={{mb,940,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::RequirementInstantiation:\n Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_instantiation_here) << Active->InstantiationRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,386: | Line 4,386: | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{mb,945,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\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"]={ | ||
Line 4,398: | Line 4,398: | ||
[f]=l, | [f]=l, | ||
[i]={"a6ef8f0813d5",1248467683,"Template instantiation for static data members that are defined out-of-line.","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.","Template instantiation for static data members that are defined out-of-line."}, | ||
[j]={{ | [j]={{mb,781,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 4,413: | Line 4,413: | ||
[f]=l, | [f]=l, | ||
[i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates."}, | [i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates."}, | ||
[j]={{ | [j]={{mb,796,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n // ...\n } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n // ...\n } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n // ...\n } else {\n Diags.Report(Active->PointOfInstantiation, diag::note_template_type_alias_instantiation_here) << cast<TypeAliasTemplateDecl>(D) << Active->InstantiationRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,428: | Line 4,428: | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{y,6469,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n if (!Tag->hasNameForLinkage()) {\n S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);"}}, | [j]={{y,6469,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n // ...\n if (!Tag->hasNameForLinkage()) {\n // ...\n S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,443: | Line 4,443: | ||
[f]=l, | [f]=l, | ||
[i]={"dbd65779649e",1376511302,"Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static da...","Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static data member\" when appropriate"}, | [i]={"dbd65779649e",1376511302,"Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static da...","Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static data member\" when appropriate"}, | ||
[j]={{ | [j]={{mb,782,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n // ...\n for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n // ...\n case CodeSynthesisContext::TemplateInstantiation: {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 4,458: | Line 4,458: | ||
[f]=l, | [f]=l, | ||
[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf...","Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpful when compiling statistics on thread safety warnings."}, | [i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf...","Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpful when compiling statistics on thread safety warnings."}, | ||
[j]={{ | [j]={{L,1796,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\n OptionalNotes getNotes() const {\n if (Verbose && CurrentFunction) {\n PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{L,1807,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\n OptionalNotes getNotes(const PartialDiagnosticAt &Note) const {\n // ...\n if (Verbose && CurrentFunction) {\n PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{L,1821,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\n OptionalNotes getNotes(const PartialDiagnosticAt &Note1, const PartialDiagnosticAt &Note2) const {\n // ...\n if (Verbose && CurrentFunction) {\n PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 4,473: | Line 4,473: | ||
[f]=l, | [f]=l, | ||
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a ","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 ","Emit warning when throw exception in destruct or dealloc functions which has a "}, | ||
[j]={{ | [j]={{L,365,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 4,488: | Line 4,488: | ||
[f]=l, | [f]=l, | ||
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a ","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 ","Emit warning when throw exception in destruct or dealloc functions which has a "}, | ||
[j]={{ | [j]={{L,369,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n // ...\n if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n // ...\n } else\n S.Diag(FD->getLocation(), diag::note_throw_in_function) << FD->getExceptionSpecSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,503: | Line 4,503: | ||
[f]=l, | [f]=l, | ||
[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on","Assume `__cxa_allocate_exception` returns an under-aligned memory on"}, | [i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on","Assume `__cxa_allocate_exception` returns an under-aligned memory on"}, | ||
[j]={{ | [j]={{hc,1092,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\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 // ...\n if (ExnObjAlign < TypeAlign) {\n // ...\n Diag(ThrowLoc, diag::note_throw_underaligned_obj) << Ty << (unsigned)TypeAlign.getQuantity() << (unsigned)ExnObjAlign.getQuantity();"}}, | ||
[k]={ | [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)"} | ["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)"} | ||
Line 4,518: | Line 4,518: | ||
[f]=m, | [f]=m, | ||
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information","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","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 // ...\n Diag.Report(SourceLocation(), diag::note_total_sloc_usage) << LocalUsage << LoadedUsage << (LocalUsage + LoadedUsage) << UsagePercent;"}}, | ||
[k]={ | [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)"} | ["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)"} | ||
Line 4,533: | Line 4,533: | ||
[f]=l, | [f]=l, | ||
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely","Implement semantic analysis for transparent unions. This is largely"}, | [i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely","Implement semantic analysis for transparent unions. This is largely"}, | ||
[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;"}}, | [j]={{v,4270,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n for (; Field != FieldEnd; ++Field) {\n // ...\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 // ...\n S.Diag(FirstField->getLocation(), diag::note_transparent_union_first_field_size_align) << isSize << FirstBits;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,547: | Line 4,547: | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{ib,9247,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n // ...\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]={ | [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 \'}\'"} | ["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 \'}\'"} | ||
Line 4,563: | Line 4,563: | ||
[f]=l, | [f]=l, | ||
[i]={"ffa7dc379f2e",1422480686,"PR 17456","PR 17456"}, | [i]={"ffa7dc379f2e",1422480686,"PR 17456","PR 17456"}, | ||
[j]={{sb,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;"},{sb,550,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n if (!DifferentPtrness) {\n if (RecFrom && RecTo) {\n if (!DeclTo->isCompleteDefinition())\n S.Diag(DeclTo->getLocation(), diag::note_type_incomplete) << DeclTo;"}}, | [j]={{sb,547,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n // ...\n if (!DifferentPtrness) {\n // ...\n if (RecFrom && RecTo) {\n // ...\n if (!DeclFrom->isCompleteDefinition())\n S.Diag(DeclFrom->getLocation(), diag::note_type_incomplete) << DeclFrom;"},{sb,550,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n // ...\n if (!DifferentPtrness) {\n // ...\n if (RecFrom && RecTo) {\n // ...\n if (!DeclTo->isCompleteDefinition())\n S.Diag(DeclTo->getLocation(), diag::note_type_incomplete) << DeclTo;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,577: | Line 4,577: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"6d485ff455ea",1576172311, | [i]={"6d485ff455ea",1576172311,Zb,Zb}, | ||
[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 // ...\n case concepts::TypeRequirement::SS_SubstitutionFailure: {\n // ...\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"]={ | ||
Line 4,589: | Line 4,589: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"6d485ff455ea",1576172311, | [i]={"6d485ff455ea",1576172311,Zb,Zb}, | ||
[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 // ...\n case concepts::TypeRequirement::SS_SubstitutionFailure: {\n // ...\n if (!SubstDiag->DiagMessage.empty())\n // ...\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"]={ | ||
[a]= | [a]=xc, | ||
[c]=p, | [c]=p, | ||
[d]=n, | [d]=n, | ||
Line 4,602: | Line 4,602: | ||
[f]=l, | [f]=l, | ||
[i]={"af7d76c7204c",1428717193,"Improve the error message for assigning to read-only variables.","Improve the error message for assigning to read-only variables."}, | [i]={"af7d76c7204c",1428717193,"Improve the error message for assigning to read-only variables.","Improve the error message for assigning to read-only variables."}, | ||
[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();"}}, | [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 // ...\n // Loop to process MemberExpr chains.\n while (true) {\n // ...\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n // ...\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n // ...\n if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n // ...\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 // ...\n // Loop to process MemberExpr chains.\n while (true) {\n // ...\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n // ...\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n // ...\n } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n if (VDecl->getType().isConstQualified()) {\n // ...\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 // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n // ...\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 // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\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 // ...\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 // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n // ...\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 // ...\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 // ...\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 // ...\n for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n // ...\n if (FieldTy.isConstQualified()) {\n // ...\n S.Diag(Field->getLocation(), diag::note_typecheck_assign_const) << NestedConstMember << IsNested << Field << FieldTy << Field->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:3:15: note: variable \'x\' declared const here"} | ["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:3:15: note: variable \'x\' declared const here"} | ||
Line 4,617: | Line 4,617: | ||
[f]=l, | [f]=l, | ||
[i]={"1ef7554efd1a",1530131434,"DR1687: When overload resolution selects a built-in operator, implicit","DR1687: When overload resolution selects a built-in operator, implicit"}, | [i]={"1ef7554efd1a",1530131434,"DR1687: When overload resolution selects a built-in operator, implicit","DR1687: When overload resolution selects a built-in operator, implicit"}, | ||
[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();"}}, | [j]={{D,10637,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\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 // ...\n if (OrigRHS.Conversion) {\n Diag(OrigRHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 1 << RHS.get()->getType();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/CXX/over/over.built/p16.cpp"]={ | ["clang/test/CXX/over/over.built/p16.cpp"]={gc,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'",gc,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'",gc,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: second operand was implicitly converted to type \'const int *\'",gc,"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 *\'",dc,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",dc,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",dc,"clang/test/CXX/over/over.built/p16.cpp:4:12: note: first operand was implicitly converted to type \'const int *\'",dc,gc,gc,gc,gc,dc,dc,dc,dc} | ||
} | } | ||
}, | }, | ||
Line 4,632: | Line 4,632: | ||
[f]=l, | [f]=l, | ||
[i]={"bad7fb09b2d1",1373918094,"Move the \"->\" to \".\" fixit from r186128 into a separate note since","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","Move the \"->\" to \".\" fixit from r186128 into a separate note since"}, | ||
[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, \".\");"}}, | [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 // ...\n case OR_No_Viable_Function: {\n // ...\n if (CandidateSet.empty()) {\n // ...\n if (BaseType->isRecordType() && !BaseType->isPointerType()) {\n Diag(OpLoc, diag::note_typecheck_member_reference_suggestion) << FixItHint::CreateReplacement(OpLoc, \".\");"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:200:6: note: did you mean to use \'.\' instead?"} | ["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:200:6: note: did you mean to use \'.\' instead?"} | ||
Line 4,646: | Line 4,646: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[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);"}}, | [j]={{w,5033,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n // ...\n if (NonCLike || ChangesLinkage) {\n // ...\n Diag(NewTD->getLocation(), diag::note_typedef_for_linkage_here) << NewTD << isa<TypeAliasDecl>(NewTD);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,661: | Line 4,661: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"6d485ff455ea",1576172311, | [i]={"6d485ff455ea",1576172311,Zb,Zb}, | ||
[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;"}}, | [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 // ...\n if (Referenced)\n Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,677: | Line 4,677: | ||
[f]=l, | [f]=l, | ||
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template"}, | [i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template"}, | ||
[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;"}}, | [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 // ...\n if (Referenced)\n Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,692: | Line 4,692: | ||
[f]=H, | [f]=H, | ||
[i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234.","Add a fixit for \\U1234 -> \\u1234."}, | [i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234.","Add a fixit for \\U1234 -> \\u1234."}, | ||
[j]={{qb,3344,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n if (!Delimited && Count != NumHexDigits) {\n if (Diagnose) {\n // If the user wrote \\U1234, suggest a fixit to \\u.\n if (Count == 4 && NumHexDigits == 8) {\n Diag(KindLoc, diag::note_ucn_four_not_eight) << FixItHint::CreateReplacement(URange, \"u\");"}}, | [j]={{qb,3344,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // ...\n if (!Delimited && Count != NumHexDigits) {\n if (Diagnose) {\n // ...\n // If the user wrote \\U1234, suggest a fixit to \\u.\n if (Count == 4 && NumHexDigits == 8) {\n // ...\n Diag(KindLoc, diag::note_ucn_four_not_eight) << FixItHint::CreateReplacement(URange, \"u\");"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:114:20: note: did you mean to use \'\\u\'?"} | ["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:114:20: note: did you mean to use \'\\u\'?"} | ||
Line 4,707: | Line 4,707: | ||
[f]=l, | [f]=l, | ||
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration","[ObjC] Warn on unguarded use of partial declaration"}, | [i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration","[ObjC] Warn on unguarded use of partial declaration"}, | ||
[j]={{ | [j]={{Vb,788,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n // ...\n if (Result != AR_Available) {\n // ...\n auto FixitDiag = SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence) << Range << D << (SemaRef.getLangOpts().ObjC ? /*@available*/ 0 : /*__builtin_available*/ 1);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,722: | Line 4,722: | ||
[f]=m, | [f]=m, | ||
[i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1] Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1] Support parsing of constexpr specifier (and its inference) on lambda expressions"}, | [i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1] Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1] Support parsing of constexpr specifier (and its inference) on lambda expressions"}, | ||
[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 // ...\n // If this is a local variable, dig out its value.\n if (Frame) {\n // ...\n if (!isa<ParmVarDecl>(VD)) {\n // ...\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"]={ | ||
Line 4,734: | Line 4,734: | ||
[f]=l, | [f]=l, | ||
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new","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","In response to some discussions on IRC, tweak the wording of the new"}, | ||
[j]={{ | [j]={{L,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 // ...\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 // ...\n if (RemoveDiagKind != -1)\n S.Diag(Fixit1.RemoveRange.getBegin(), diag::note_uninit_fixit_remove_cond) << RemoveDiagKind << Str << I->Output << Fixit1 << Fixit2;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,749: | Line 4,749: | ||
[f]=l, | [f]=l, | ||
[i]={"406e65c8d175",1379646186,"Modify the uninitialized field visitor to detect uninitialized use across the","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","Modify the uninitialized field visitor to detect uninitialized use across the"}, | ||
[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());"}}, | [j]={{z,3864,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n // ...\n void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n // ...\n if (Constructor)\n S.Diag(Constructor->getLocation(), diag::note_uninit_in_this_constructor) << (Constructor->isDefaultConstructor() && Constructor->isImplicit());"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/uninitialized.cpp"]={"clang/test/SemaCXX/uninitialized.cpp:852:5: note: during field initialization in this constructor", | ["clang/test/SemaCXX/uninitialized.cpp"]={"clang/test/SemaCXX/uninitialized.cpp:852:5: note: during field initialization in this constructor",Lb,Lb,Lb,Lb,Lb,Lb,Lb,Lb,Lb,Nb,Nb,Nb,Nb,Nb,Nb,Nb,Nb,Nb,"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",tb,tb,tb,tb,tb,tb,tb,tb,tb,tb,tb,tb,tb,"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"} | ||
} | } | ||
}, | }, | ||
Line 4,763: | Line 4,763: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{bb,739,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n // ...\n if (Init >= NumInits || !ILE->getInit(Init)) {\n // ...\n if (Field->getType()->isReferenceType()) {\n if (!VerifyOnly) {\n // ...\n SemaRef.Diag(Field->getLocation(), diag::note_uninit_reference_member);"},{bb,5614,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n // ...\n if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n // ...\n } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n // ...\n for (FieldDecl *FD : RD->fields()) {\n // ...\n if (EntityIndexToProcess < Args.size()) {\n // ...\n } else {\n // We\'ve processed all of the args, but there are still members that\n // have to be initialized.\n if (FD->hasInClassInitializer()) {\n // ...\n } else {\n // C++ [dcl.init]p17.6.2.2\n // The remaining elements...otherwise are value initialzed\n if (FD->getType()->isReferenceType()) {\n // ...\n if (!VerifyOnly) {\n // ...\n S.Diag(FD->getLocation(), diag::note_uninit_reference_member);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,779: | Line 4,779: | ||
[f]=l, | [f]=l, | ||
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new","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","In response to some discussions on IRC, tweak the wording of the new"}, | ||
[j]={{ | [j]={{L,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 // ...\n case UninitUse::AfterDecl:\n case UninitUse::AfterCall:\n // ...\n S.Diag(Use.getUser()->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{L,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 // ...\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 // ...\n S.Diag(User->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << User->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,793: | Line 4,793: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[j]={{ | [j]={{L,1839,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\n OptionalNotes makeUnlockedHereNote(SourceLocation LocUnlocked, StringRef Kind) { return LocUnlocked.isValid() ? getNotes(PartialDiagnosticAt(LocUnlocked, S.PDiag(diag::note_unlocked_here) << Kind)) : getNotes(); }"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,835: | Line 4,835: | ||
[f]=H, | [f]=H, | ||
[k]={ | [k]={ | ||
[ | [Tc]={"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\'"} | ||
} | } | ||
}, | }, | ||
Line 4,846: | Line 4,846: | ||
[b]="parentheses are required around this expression in a requires clause", | [b]="parentheses are required around this expression in a requires clause", | ||
[h]=m, | [h]=m, | ||
[f]= | [f]=U, | ||
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | [i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | ||
[j]={{ | [j]={{Sc,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 // ...\n auto ParsePrimary = [&]() {\n // ...\n auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 4,862: | Line 4,862: | ||
[h]=m, | [h]=m, | ||
[f]=jc, | [f]=jc, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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 // ...\n auto NotePrevious = [&] {\n // ...\n Diag(DeclLoc, diag::note_unreachable_entity) << (int)MIK;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Modules/submodule-visibility-cycles.cpp"]={"clang/test/Modules/Inputs/submodule-visibility/cycle2.h:6:8: note: declaration here is not visible"} | ["clang/test/Modules/submodule-visibility-cycles.cpp"]={"clang/test/Modules/Inputs/submodule-visibility/cycle2.h:6:8: note: declaration here is not visible"} | ||
Line 4,878: | Line 4,878: | ||
[f]=l, | [f]=l, | ||
[i]={"ec3bbf4933d7",1396053320,"Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((...","Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((0))."}, | [i]={"ec3bbf4933d7",1396053320,"Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((...","Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((0))."}, | ||
[j]={{ | [j]={{L,116,"class UnreachableCodeHandler : public reachable_code::Callback {\n // ...\n void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n // ...\n if (Open.isValid()) {\n // ...\n if (Close.isValid()) {\n S.Diag(Open, diag::note_unreachable_silence) << FixItHint::CreateInsertion(Open, \"/* DISABLES CODE */ (\") << FixItHint::CreateInsertion(Close, \")\");"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,893: | Line 4,893: | ||
[f]=m, | [f]=m, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{L,2213,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n // ...\n void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n // ...\n if (IsRelatedToDecl) {\n // ...\n S.Diag(Loc, diag::note_unsafe_buffer_operation) << MsgParam << Range;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,908: | Line 4,908: | ||
[f]=m, | [f]=m, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{L,2234,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n // ...\n void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n // ...\n if (!Fixes.empty()) {\n // ...\n const auto &FD = S.Diag(Variable->getLocation(), diag::note_unsafe_buffer_variable_fixit_group);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,923: | Line 4,923: | ||
[f]=m, | [f]=m, | ||
[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)","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)","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 // ...\n for (Arg *A : Args) {\n if (A->getOption().getKind() == Option::InputClass) {\n // ...\n } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n // ...\n } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n // ...\n } else if (A->getOption().hasFlag(options::LinkerInput)) {\n // ...\n } else if (A->getOption().matches(options::OPT_x)) {\n // ...\n } else if (A->getOption().getID() == options::OPT_U) {\n // ...\n if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n // ...\n Diag(diag::note_use_dashdash);"}} | ||
}, | }, | ||
["note_use_ifdef_guards"]={ | ["note_use_ifdef_guards"]={ | ||
Line 4,934: | Line 4,934: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"0ad318217917",1494483607, | [i]={"0ad318217917",1494483607,wc,wc}, | ||
[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);"}}, | [j]={{w,4806,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n // ...\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 // ...\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]={ | [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"} | ["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"} | ||
Line 4,949: | Line 4,949: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"3e1d483e0efb",1428962935, | [i]={"3e1d483e0efb",1428962935,yc,yc}, | ||
[j]={{ | [j]={{T,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 // ...\n if (!ReferenceReturnType.isNull()) {\n // ...\n } else if (!VariableType->isRValueReferenceType()) {\n // ...\n SemaRef.Diag(VD->getBeginLoc(), diag::note_use_non_reference_type) << NonReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}, | ||
[k]={ | [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\')"} | ["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:563:8: note: use non-reference type \'svint8_t\' (aka \'__SVInt8_t\')"} | ||
Line 4,964: | Line 4,964: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"3e1d483e0efb",1428962935, | [i]={"3e1d483e0efb",1428962935,yc,yc}, | ||
[j]={{ | [j]={{T,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 // ...\n SemaRef.Diag(VD->getBeginLoc(), diag::note_use_reference_type) << SemaRef.Context.getLValueReferenceType(VariableType) << VD->getSourceRange() << FixItHint::CreateInsertion(VD->getLocation(), \"&\");"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,980: | Line 4,980: | ||
[f]=l, | [f]=l, | ||
[i]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","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","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"}, | ||
[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);"}}, | [j]={{w,14101,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n // ...\n if (getLangOpts().CPlusPlus11)\n Diag(var->getLocation(), diag::note_use_thread_local);"},{w,14111,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n // ...\n } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n if (!checkConstInit()) {\n // ...\n if (getLangOpts().CPlusPlus11)\n Diag(var->getLocation(), diag::note_use_thread_local);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 4,994: | Line 4,994: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"3e1d483e0efb",1428962935, | [i]={"3e1d483e0efb",1428962935,yc,yc}, | ||
[j]={{ | [j]={{T,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 // ...\n if (!ReferenceReturnType.isNull()) {\n // ...\n SemaRef.Diag(VD->getBeginLoc(), diag::note_use_type_or_non_reference) << NonReferenceType << NewReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,010: | Line 5,010: | ||
[f]=l, | [f]=l, | ||
[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage","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","Warn about code that uses variables and functions with internal linkage"}, | ||
[j]={{ | [j]={{gd,918,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n // ...\n for (const auto &Undef : Undefined) {\n // ...\n if (UseLoc.isValid())\n S.Diag(UseLoc, diag::note_used_here);"},{vb,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 // ...\n // In ARC, forbid the user from sending messages to\n // retain/release/autorelease/dealloc/retainCount explicitly.\n if (getLangOpts().ObjCAutoRefCount) {\n // ...\n case OMF_performSelector:\n if (Method && NumArgs >= 1) {\n if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n // ...\n } else {\n // ...\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 // ...\n if (auto *Clause = dyn_cast<OMPUsesAllocatorsClause>(C)) {\n for (unsigned I = 0, E = Clause->getNumberOfAllocators(); I < E; ++I) {\n // ...\n if (DVar.RefExpr || DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [VD, &MapExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef MapExprComponents, OpenMPClauseKind C) {\n // ...\n if (DVar.RefExpr)\n // ...\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 // ...\n bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n // ...\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 // ...\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 // ...\n bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n // ...\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 // ...\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 // ...\n bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n // ...\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 // ...\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 // ...\n bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n // ...\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 // ...\n if (CI->getAssociatedExpression()->getStmtClass() != SI->getAssociatedExpression()->getStmtClass() || CI->getAssociatedDeclaration()->getCanonicalDecl() == SI->getAssociatedDeclaration()->getCanonicalDecl()) {\n // ...\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 // ...\n bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n // ...\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 // ...\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 // ...\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 // ...\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 // ...\n SemaRef.Diag(SL, diag::note_used_here) << SR;"},{x,23524,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\n if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n // ...\n Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"},{x,23599,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n // ...\n for (Expr *RefExpr : VarList) {\n // ...\n if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n // ...\n Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/arc-peformselector.m"]={"clang/test/SemaObjC/arc-peformselector.m:32:34: note: used here"} | ["clang/test/SemaObjC/arc-peformselector.m"]={"clang/test/SemaObjC/arc-peformselector.m:32:34: note: used here"} | ||
Line 5,025: | Line 5,025: | ||
[f]=l, | [f]=l, | ||
[i]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091.","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.","Enable clang to continue to parse libstdc++4.6 and stlport after r210091."}, | ||
[j]={{ | [j]={{bb,608,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n // ...\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 // ...\n if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n // ...\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 // ...\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 // ...\n if (Entity.getKind() == InitializedEntity::EK_Member)\n SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_used_in_initialization_here);"},{bb,610,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n // ...\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 // ...\n if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n // ...\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 // ...\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 // ...\n if (Entity.getKind() == InitializedEntity::EK_Member)\n // ...\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"]={ | ||
Line 5,037: | Line 5,037: | ||
[f]=l, | [f]=l, | ||
[i]={"92f241f18812",1354935182,"Properly compute triviality for explicitly-defaulted or deleted special members.","Properly compute triviality for explicitly-defaulted or deleted special members."}, | [i]={"92f241f18812",1354935182,"Properly compute triviality for explicitly-defaulted or deleted special members.","Properly compute triviality for explicitly-defaulted or deleted special members."}, | ||
[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);"}}, | [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 // ...\n if (Diagnose) {\n // ...\n if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n // ...\n if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))\n S.Diag(CD->getLocation(), diag::note_user_declared_ctor);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,052: | Line 5,052: | ||
[f]=m, | [f]=m, | ||
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow","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","Improve the diagnostic when a new declaration conflicts with a using shadow"}, | ||
[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();"}}, | [j]={{C,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n // ...\n if (issueDiagnostic) {\n // ...\n Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/selector-overload.m"]={"clang/test/SemaObjC/selector-overload.m:15:1: note: using"} | ["clang/test/SemaObjC/selector-overload.m"]={"clang/test/SemaObjC/selector-overload.m:15:1: note: using"} | ||
Line 5,066: | Line 5,066: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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;"}}, | [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 // ...\n if (!Old) {\n // ...\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 // ...\n if (!Old) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n if (New->getFriendObjectKind()) {\n // ...\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 // ...\n if (!Previous.empty()) {\n // ...\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 // ...\n if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n // ...\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 // ...\n for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n // ...\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 // ...\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 // ...\n Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:7:10: note: using declaration"} | ["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:7:10: note: using declaration"} | ||
Line 5,082: | Line 5,082: | ||
[f]=l, | [f]=l, | ||
[i]={"7ad0b8839652",1396475075,"If a using-declaration names a class member, but appears outside a class, try","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","If a using-declaration names a class member, but appears outside a class, try"}, | ||
[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"}}, | [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 // ...\n if (!CurContext->isRecord()) {\n // ...\n if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n // ...\n if (!R) {\n // ...\n } else if (R->getAsSingle<TypeDecl>()) {\n if (getLangOpts().CPlusPlus11) {\n // ...\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 // ...\n if (!CurContext->isRecord()) {\n // ...\n if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n // ...\n if (!R) {\n // ...\n } else if (R->getAsSingle<TypeDecl>()) {\n if (getLangOpts().CPlusPlus11) {\n // ...\n } else {\n // ...\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 // ...\n if (!CurContext->isRecord()) {\n // ...\n if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n // ...\n if (!R) {\n // ...\n } else if (R->getAsSingle<TypeDecl>()) {\n // ...\n } else if (R->getAsSingle<VarDecl>()) {\n // ...\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 // ...\n if (!CurContext->isRecord()) {\n // ...\n if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n // ...\n if (!R) {\n // ...\n } else if (R->getAsSingle<TypeDecl>()) {\n // ...\n } else if (R->getAsSingle<VarDecl>()) {\n // ...\n } else if (R->getAsSingle<EnumConstantDecl>()) {\n // ...\n Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << (getLangOpts().CPlusPlus11 ? 4 : 3) // const[expr] variable"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,097: | Line 5,097: | ||
[f]=l, | [f]=l, | ||
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There","Implement redeclaration checking and hiding semantics for using declarations. There"}, | [i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There","Implement redeclaration checking and hiding semantics for using declarations. There"}, | ||
[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);"}}, | [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 // ...\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 // ...\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 // ...\n if (FunctionDecl *FD = Target->getAsFunction()) {\n // ...\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 // ...\n if (isa<TagDecl>(Target)) {\n // ...\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 // ...\n Diag(NonTag->getLocation(), diag::note_using_decl_conflict);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,112: | Line 5,112: | ||
[f]=l, | [f]=l, | ||
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations. Split UnresolvedUsingDecl into","Incremental progress on using declarations. Split UnresolvedUsingDecl into"}, | [i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations. Split UnresolvedUsingDecl into","Incremental progress on using declarations. Split UnresolvedUsingDecl into"}, | ||
[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 | [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 // ...\n if (!Old) {\n // ...\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 // ...\n if (!Old) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n if (New->getFriendObjectKind()) {\n // ...\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 // ...\n if (!Previous.empty()) {\n // ...\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 // ...\n if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n // ...\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 // ...\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n if (OrigDC == CurContext) {\n // ...\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 // ...\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n // ...\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 // ...\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 // ...\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 // ...\n if (FunctionDecl *FD = Target->getAsFunction()) {\n // ...\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 // ...\n if (isa<TagDecl>(Target)) {\n // ...\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 // ...\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 // ...\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 // ...\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 // ...\n if (HasTypenameKeyword) {\n // ...\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 // ...\n Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);"},{sc,858,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n // ...\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 // ...\n if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n // ...\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 // ...\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 // ...\n Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:4:9: note: target of using declaration"} | ["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:4:9: note: target of using declaration"} | ||
Line 5,126: | Line 5,126: | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[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;"}}, | [j]={{z,12842,"NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation NameLoc, TypeSourceInfo *EnumType, EnumDecl *ED) {\n // ...\n if (CurContext->getRedeclContext()->isRecord()) {\n // ...\n for (NamedDecl *D : Previous)\n if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D))\n if (UED->getEnumDecl() == ED) {\n // ...\n Diag(D->getLocation(), diag::note_using_enum_decl) << 1;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,142: | Line 5,142: | ||
[f]=l, | [f]=l, | ||
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using","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","A typename specifier can end up referring to a unresolved using"}, | ||
[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 \");"}}, | [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 // ...\n case LookupResult::FoundUnresolvedValue: {\n // ...\n if (UnresolvedUsingValueDecl *Using = dyn_cast<UnresolvedUsingValueDecl>(Result.getRepresentativeDecl())) {\n // ...\n Diag(Loc, diag::note_using_value_decl_missing_typename) << FixItHint::CreateInsertion(Loc, \"typename \");"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,157: | Line 5,157: | ||
[f]=m, | [f]=m, | ||
[i]={"3ec1743d0d77",1518131655,"Make march/target-cpu print a note with the list of valid values for ARM","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","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 // ...\n // Set the target CPU if specified.\n if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n // ...\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 // ...\n // Check the TuneCPU name if specified.\n if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n // ...\n if (!ValidList.empty())\n Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,172: | Line 5,172: | ||
[f]=l, | [f]=l, | ||
[i]={"593f993a6855",1354932077,"Implement C++03 [dcl.init]p5\'s checking for value-initialization of references","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","Implement C++03 [dcl.init]p5\'s checking for value-initialization of references"}, | ||
[j]={{ | [j]={{bb,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 // ...\n for (const auto *FI : RD->fields()) {\n // ...\n if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) {\n S.Diag(Loc, diag::note_value_initialization_here) << RD;"},{bb,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 // ...\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]={ | [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"} | ["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"} | ||
Line 5,187: | Line 5,187: | ||
[f]=l, | [f]=l, | ||
[i]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields"}, | [i]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields"}, | ||
[j]={{ | [j]={{L,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 // ...\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 // ...\n Diag(D->getLocation(), diag::note_var_declared_here) << D;"},{z,11599,"struct InvalidSTLDiagnoser {\n // ...\n QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n // ...\n if (Sel == USS_InvalidMember) {\n S.Diag(VD->getLocation(), diag::note_var_declared_here) << VD << VD->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,202: | Line 5,202: | ||
[f]="Lambda Issue", | [f]="Lambda Issue", | ||
[i]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured","[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","[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"}, | ||
[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;"}}, | [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 // ...\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 // ...\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 // ...\n auto CheckRedefinition = [&](ParmVarDecl *Param) {\n for (const auto &Capture : Intro.Captures) {\n if (Capture.Id == Param->getIdentifier()) {\n // ...\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 // ...\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 // ...\n SemaRef.Diag(SL, diag::note_var_explicitly_captured_here) << VD << 0 << SR;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,217: | Line 5,217: | ||
[f]=l, | [f]=l, | ||
[i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental","Add basic fixits for -Wuninitialized-experimental"}, | [i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental","Add basic fixits for -Wuninitialized-experimental"}, | ||
[j]={{ | [j]={{L,797,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n // ...\n S.Diag(Loc, diag::note_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(Loc, Init);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,232: | Line 5,232: | ||
[f]=l, | [f]=l, | ||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | ||
[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 // ...\n if (PrevDecl) {\n // ...\n SemaRef.Diag(PrevDecl->getLocation(), diag::note_var_prev_partial_spec_here);"}} | ||
}, | }, | ||
["note_vbase_moved_here"]={ | ["note_vbase_moved_here"]={ | ||
[a]= | [a]=xc, | ||
[c]=p, | [c]=p, | ||
[d]=n, | [d]=n, | ||
Line 5,244: | Line 5,244: | ||
[f]=l, | [f]=l, | ||
[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move","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","Issue a diagnostic if an implicitly-defined move assignment operator would move"}, | ||
[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();"}}, | [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 // ...\n for (auto &BI : Class->bases()) {\n // ...\n while (!Worklist.empty()) {\n // ...\n if (BaseSpec->isVirtual()) {\n // ...\n if (Existing && Existing != &BI) {\n // ...\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 // ...\n for (auto &BI : Class->bases()) {\n // ...\n while (!Worklist.empty()) {\n // ...\n if (BaseSpec->isVirtual()) {\n // ...\n if (Existing && Existing != &BI) {\n // ...\n S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << BI.getType() << BaseSpec->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,259: | Line 5,259: | ||
[f]=m, | [f]=m, | ||
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives.","[verify] Add support for location markers in directives."}, | [i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives.","[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 // ...\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 // ...\n if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n // ...\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 // ...\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 // ...\n if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n // ...\n Diags.Report(M.RedefLoc, diag::note_verify_ambiguous_marker) << Name;"}} | ||
}, | }, | ||
["note_vla_unsupported"]={ | ["note_vla_unsupported"]={ | ||
Line 5,271: | Line 5,271: | ||
[f]=l, | [f]=l, | ||
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported","[OpenMP] Show error if VLAs are not supported"}, | [i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported","[OpenMP] Show error if VLAs are not supported"}, | ||
[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);"}}, | [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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\n if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n if (!Context.getTargetInfo().isVLASupported()) {\n if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n // ...\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 // ...\n for (Expr *RefExpr : VarList) {\n // ...\n if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n if (!Context.getTargetInfo().isVLASupported()) {\n if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n // ...\n } else {\n // ...\n S.targetDiag(ELoc, diag::note_vla_unsupported);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,286: | Line 5,286: | ||
[f]=l, | [f]=l, | ||
[i]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection.","Implement a better version of delegating constructor cycle detection."}, | [i]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection.","Implement a better version of delegating constructor cycle detection."}, | ||
[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);"}}, | [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 // ...\n // We know that beyond here, we aren\'t chaining into a cycle.\n if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n // ...\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 // ...\n while (C->getCanonicalDecl() != Canonical) {\n // ...\n S.Diag(C->getLocation(), diag::note_which_delegates_to);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:32:6: note: which delegates to"} | ["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:32:6: note: which delegates to"} | ||
Line 5,301: | Line 5,301: | ||
[f]=l, | [f]=l, | ||
[i]={"d6886e7fad5e",1336500219,"Fixes a typo. note_xxx not not_xxx.","Fixes a typo. note_xxx not not_xxx."}, | [i]={"d6886e7fad5e",1336500219,"Fixes a typo. note_xxx not not_xxx.","Fixes a typo. note_xxx not not_xxx."}, | ||
[j]={{F,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);"},{F,1976,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n for (const auto &PropEntry : PropMap) {\n if (PIDecl && !Prop->isUnavailable()) {\n Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"}}, | [j]={{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\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 // ...\n } else {\n // ...\n Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"},{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\n if (PIDecl && !Prop->isUnavailable()) {\n // ...\n Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,316: | Line 5,316: | ||
[f]=l, | [f]=l, | ||
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values","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","Warn on enum assignment to bitfields that can\'t fit all values"}, | ||
[j]={{G,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]={{G,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 // ...\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 // ...\n // Check the bitwidth.\n if (BitsNeeded > FieldWidth) {\n // ...\n S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield) << BitsNeeded << ED << WidthExpr->getSourceRange();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 5,331: | Line 5,331: | ||
[f]=l, | [f]=l, | ||
[i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL"}, | [i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL"}, | ||
[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();"}}, | [j]={{w,9585,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n // ...\n do {\n // ...\n for (const auto *FD : RD->fields()) {\n // ...\n 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 // ...\n do {\n // ...\n for (const auto *FD : RD->fields()) {\n // ...\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 // ...\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 // ...\n do {\n // ...\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]={ | [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", | ["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",Wb,"clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: note: within field of type \'Templated<0, float>\' declared here",Wb,"clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: note: within field of type \'Templated<0U, float>\' declared here",Wb,"clang/test/SemaSYCL/zero-length-arrays.cpp:58:31: note: within field of type \'Templated<0U, float>\' declared here",Wb,"clang/test/SemaSYCL/zero-length-arrays.cpp:20:11: note: within field of type \'Wrapper\' declared here",Wb,Wb,Wb,Wb,"clang/test/SemaSYCL/zero-length-arrays.cpp:20:11: note: within field of type \'Wrapper\' declared here"} | ||
} | } | ||
}, | }, | ||
Line 5,346: | Line 5,346: | ||
[f]=l, | [f]=l, | ||
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow","[Diagnostics] Diagnose misused xor as pow"}, | [i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow","[Diagnostics] Diagnose misused xor as pow"}, | ||
[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;"}}, | [j]={{D,13691,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n // ...\n if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n // ...\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 // ...\n if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n // ...\n } else if (LeftSideValue == 10) {\n // ...\n S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0xA ^ \" + RHSStr) << SuggestXor;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,353: | Line 5,353: | ||
["null_in_char_or_string"]={ | ["null_in_char_or_string"]={ | ||
[a]="null character(s) preserved in ... literal [-Wnull-character]", | [a]="null character(s) preserved in ... literal [-Wnull-character]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"null-character"}, | ||
[ | [q]="null-character", | ||
[e]="null character(s) preserved in %select{char|string}0 literal", | [e]="null character(s) preserved in %select{char|string}0 literal", | ||
[g]= | [g]=t, | ||
[b]="null character\\(s\\) preserved in (?:char|string) literal", | [b]="null character\\(s\\) preserved in (?:char|string) literal", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC","Use %select to merge similar diagnostics. NFC"}, | [i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC","Use %select to merge similar diagnostics. NFC"}, | ||
[j]={{qb,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;"},{qb,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;"},{qb,2349,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n // If a nul character existed in the character, warn about it.\n if (NulCharacter && !isLexingRawMode())\n Diag(NulCharacter, diag::null_in_char_or_string) << 0;"}}, | [j]={{qb,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 // ...\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;"},{qb,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 // ...\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;"},{qb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,370: | Line 5,370: | ||
["null_in_file"]={ | ["null_in_file"]={ | ||
[a]="null character ignored [-Wnull-character]", | [a]="null character ignored [-Wnull-character]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"null-character"}, | ||
[ | [q]="null-character", | ||
[e]="null character ignored", | [e]="null character ignored", | ||
[g]= | [g]=t, | ||
[b]="null character ignored", | [b]="null character ignored", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnull\\-character[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{qb,3641,"LexStart:\n case 0: // Null.\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::null_in_file);"}}, | [j]={{qb,3641,"LexStart:\n // ...\n case 0: // Null.\n // ...\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::null_in_file);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Lexer/newline-nul.c"]={"clang/test/Lexer/newline-nul.c:6:1: warning: null character ignored [-Wnull-character]"} | ["clang/test/Lexer/newline-nul.c"]={"clang/test/Lexer/newline-nul.c:6:1: warning: null character ignored [-Wnull-character]"} | ||
Line 5,387: | Line 5,387: | ||
["override_keyword_hides_virtual_member_function"]={ | ["override_keyword_hides_virtual_member_function"]={ | ||
[a]="non-virtual member function marked \'A\' hides virtual member ...", | [a]="non-virtual member function marked \'A\' hides virtual member ...", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="non-virtual member function marked \'%0\' hides virtual member %select{function|functions}1", | [e]="non-virtual member function marked \'%0\' hides virtual member %select{function|functions}1", | ||
[g]= | [g]=mc, | ||
[b]="non\\-virtual member function marked \'(.*?)\' hides virtual member (?:function|functions)", | [b]="non\\-virtual member function marked \'(.*?)\' hides virtual member (?:function|functions)", | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func.","Improve error for \"override\" + non-virtual func."}, | [i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func.","Improve error for \"override\" + non-virtual func."}, | ||
[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);"}}, | [j]={{z,3244,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n // ...\n if (MD && !MD->isVirtual()) {\n // ...\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 // ...\n if (MD && !MD->isVirtual()) {\n // ...\n if (!OverloadedMethods.empty()) {\n if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 5,402: | Line 5,402: | ||
["override_keyword_only_allowed_on_virtual_member_functions"]={ | ["override_keyword_only_allowed_on_virtual_member_functions"]={ | ||
[a]="only virtual member functions can be marked \'A\'", | [a]="only virtual member functions can be marked \'A\'", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="only virtual member functions can be marked \'%0\'", | [e]="only virtual member functions can be marked \'%0\'", | ||
[g]= | [g]=mc, | ||
[b]="only virtual member functions can be marked \'(.*?)\'", | [b]="only virtual member functions can be marked \'(.*?)\'", | ||
[h]=m, | [h]=m, | ||
[f]=l, | [f]=l, | ||
[i]={"13a69102d779",1295498062,"Only allow virtual member functions to be marked \'override\' and \'final\'.","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\'.","Only allow virtual member functions to be marked \'override\' and \'final\'."}, | ||
[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());"}}, | [j]={{z,3263,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n // ...\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 // ...\n if (!MD || !MD->isVirtual()) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 5,417: | Line 5,417: | ||
["pp_disabled_macro_expansion"]={ | ["pp_disabled_macro_expansion"]={ | ||
[a]="disabled expansion of recursive macro [-Wdisabled-macro-expansion]", | [a]="disabled expansion of recursive macro [-Wdisabled-macro-expansion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"disabled-macro-expansion"}, | ||
[ | [q]="disabled-macro-expansion", | ||
[e]="disabled expansion of recursive macro", | [e]="disabled expansion of recursive macro", | ||
[g]= | [g]=t, | ||
[b]="disabled expansion of recursive macro", | [b]="disabled expansion of recursive macro", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdisabled\\-macro\\-expansion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdisabled\\-macro\\-expansion[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning.","Added -Wdisabled-macro-expansion warning."}, | [i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning.","Added -Wdisabled-macro-expansion warning."}, | ||
[j]={{ | [j]={{Zc,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 // ...\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 // ...\n } else if (MI->getNumTokens() == 1 && isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(), *this)) {\n // ...\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 // ...\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 // ...\n // If this is a macro to be expanded, do it.\n if (MacroDefinition MD = getMacroDefinition(&II)) {\n // ...\n if (!DisableMacroExpansion) {\n if (!Identifier.isExpandDisabled() && MI->isEnabled()) {\n // ...\n } else {\n // ...\n if (MI->isObjectLike() || isNextPPTokenLParen())\n Diag(Identifier, diag::pp_disabled_macro_expansion);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,435: | Line 5,435: | ||
["pp_err_elif_after_else"]={ | ["pp_err_elif_after_else"]={ | ||
[a]="... after #else", | [a]="... after #else", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="%select{#elif|#elifdef|#elifndef}0 after #else", | [e]="%select{#elif|#elifdef|#elifndef}0 after #else", | ||
[g]= | [g]=mc, | ||
[b]="(?:\\#elif|\\#elifdef|\\#elifndef) after \\#else", | [b]="(?:\\#elif|\\#elifdef|\\#elifndef) after \\#else", | ||
[h]=m, | [h]=m, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,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 // ...\n while (true) {\n // ...\n if (Directive.startswith(\"if\")) {\n // ...\n } else if (Directive[0] == \'e\') {\n // ...\n if (Sub == \"ndif\") { // \"endif\"\n // ...\n } else if (Sub == \"lse\") { // \"else\".\n // ...\n } else if (Sub == \"lif\") { // \"elif\".\n // ...\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;"},{Y,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 // ...\n while (true) {\n // ...\n if (Directive.startswith(\"if\")) {\n // ...\n } else if (Directive[0] == \'e\') {\n // ...\n if (Sub == \"ndif\") { // \"endif\"\n // ...\n } else if (Sub == \"lse\") { // \"else\".\n // ...\n } else if (Sub == \"lif\") { // \"elif\".\n // ...\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n // ...\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);"},{Y,3482,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 5,450: | Line 5,450: | ||
["pp_err_elif_without_if"]={ | ["pp_err_elif_without_if"]={ | ||
[a]="... without #if", | [a]="... without #if", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="%select{#elif|#elifdef|#elifndef}0 without #if", | [e]="%select{#elif|#elifdef|#elifndef}0 without #if", | ||
[g]= | [g]=mc, | ||
[b]="(?:\\#elif|\\#elifdef|\\#elifndef) without \\#if", | [b]="(?:\\#elif|\\#elifdef|\\#elifndef) without \\#if", | ||
[h]=m, | [h]=m, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,3472,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n // ...\n if (CurPPLexer->popConditionalLevel(CI)) {\n Diag(ElifToken, diag::pp_err_elif_without_if) << DirKind;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,465: | Line 5,465: | ||
["pp_err_else_after_else"]={ | ["pp_err_else_after_else"]={ | ||
[a]="#else after #else", | [a]="#else after #else", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="#else after #else", | [e]="#else after #else", | ||
[g]= | [g]=mc, | ||
[b]="\\#else after \\#else", | [b]="\\#else after \\#else", | ||
[h]=m, | [h]=m, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,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 // ...\n while (true) {\n // ...\n if (Directive.startswith(\"if\")) {\n // ...\n } else if (Directive[0] == \'e\') {\n // ...\n if (Sub == \"ndif\") { // \"endif\"\n // ...\n } else if (Sub == \"lse\") { // \"else\".\n // ...\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);"},{Y,3417,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n // ...\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"]={ | ||
[a]="#else without #if", | [a]="#else without #if", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="#else without #if", | [e]="#else without #if", | ||
[g]= | [g]=mc, | ||
[b]="\\#else without \\#if", | [b]="\\#else without \\#if", | ||
[h]=m, | [h]=m, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,3408,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n // ...\n if (CurPPLexer->popConditionalLevel(CI)) {\n Diag(Result, diag::pp_err_else_without_if);"}} | ||
}, | }, | ||
["pp_hash_warning"]={ | ["pp_hash_warning"]={ | ||
[a]="A [-W#warnings]", | [a]="A [-W#warnings]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"#warnings","cpp"}, | ||
[ | [q]="#warnings", | ||
[e]= | [e]=Yc, | ||
[g]= | [g]=t, | ||
[b]= | [b]=Vc, | ||
[h]=" \\[(?:\\-Werror,)?\\-W\\#warnings[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-W\\#warnings[^\\]]*\\]", | ||
[f]="User-Defined Issue", | [f]="User-Defined Issue", | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,1656,"/// HandleUserDiagnosticDirective - Handle a #warning or #error directive.\n///\nvoid Preprocessor::HandleUserDiagnosticDirective(Token &Tok, bool isWarning) {\n // ...\n if (isWarning)\n Diag(Tok, diag::pp_hash_warning) << Msg;"},{"clang/unittests/Basic/DiagnosticTest.cpp",149,"TEST(DiagnosticTest, storedDiagEmptyWarning) {\n // ...\n Diags.Report(diag::pp_hash_warning) << \"\";"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/include-directive3.c"]={"./clang/test/Preprocessor/file_to_include.h:2:2: warning: file successfully included [-W#warnings]"} | ["clang/test/Preprocessor/include-directive3.c"]={"./clang/test/Preprocessor/file_to_include.h:2:2: warning: file successfully included [-W#warnings]"} | ||
Line 5,506: | Line 5,506: | ||
["pp_include_macros_out_of_predefines"]={ | ["pp_include_macros_out_of_predefines"]={ | ||
[a]="the #__include_macros directive is only for internal use by -imacros", | [a]="the #__include_macros directive is only for internal use by -imacros", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=kc, | ||
[e]="the #__include_macros directive is only for internal use by -imacros", | [e]="the #__include_macros directive is only for internal use by -imacros", | ||
[g]= | [g]=mc, | ||
[b]="the \\#__include_macros directive is only for internal use by \\-imacros", | [b]="the \\#__include_macros directive is only for internal use by \\-imacros", | ||
[h]=m, | [h]=m, | ||
[f]=H, | [f]=H, | ||
[i]={"58a1eb0ba0e0",1239216400,"reject the #__include_macros directive unless it comes from the ","reject the #__include_macros directive unless it comes from the "}, | [i]={"58a1eb0ba0e0",1239216400,"reject the #__include_macros directive unless it comes from the ","reject the #__include_macros directive unless it comes from the "}, | ||
[j]={{ | [j]={{Y,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 // ...\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"]={ | ||
[a]="#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]", | [a]="#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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"include-next-absolute-path"}, | ||
[ | [q]="include-next-absolute-path", | ||
[e]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", | [e]="#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", | ||
[g]= | [g]=t, | ||
[b]="\\#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", | [b]="\\#include_next in file found relative to primary source file or found by absolute path; will search from start of include path", | ||
[h]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-absolute\\-path[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-absolute\\-path[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,1948,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n // ...\n if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n // ...\n } else if (isInPrimaryFile()) {\n // ...\n } else if (CurLexerSubmodule) {\n // ...\n } else if (!Lookup) {\n // ...\n Diag(IncludeNextTok, diag::pp_include_next_absolute_path);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,535: | Line 5,535: | ||
["pp_include_next_in_primary"]={ | ["pp_include_next_in_primary"]={ | ||
[a]="#include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]", | [a]="#include_next in primary source file; will search from start of include path [-Winclude-next-outside-header]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"include-next-outside-header"}, | ||
[ | [q]="include-next-outside-header", | ||
[e]="#include_next in primary source file; will search from start of include path", | [e]="#include_next in primary source file; will search from start of include path", | ||
[g]= | [g]=t, | ||
[b]="\\#include_next in primary source file; will search from start of include path", | [b]="\\#include_next in primary source file; will search from start of include path", | ||
[h]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-outside\\-header[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Winclude\\-next\\-outside\\-header[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,1936,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n // ...\n if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n // ...\n } else if (isInPrimaryFile()) {\n // ...\n Diag(IncludeNextTok, diag::pp_include_next_in_primary);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,552: | Line 5,552: | ||
["pp_invalid_string_literal"]={ | ["pp_invalid_string_literal"]={ | ||
[a]="invalid string literal, ignoring final \'\\\'", | [a]="invalid string literal, ignoring final \'\\\'", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="invalid string literal, ignoring final \'\\\'", | [e]="invalid string literal, ignoring final \'\\\'", | ||
[g]= | [g]=t, | ||
[b]="invalid string literal, ignoring final \'\\\\\'", | [b]="invalid string literal, ignoring final \'\\\\\'", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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 // ...\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 // ...\n if ((Result.size() - 1 - FirstNonSlash) & 1) {\n // ...\n PP.Diag(ArgToks[-1], diag::pp_invalid_string_literal);"}} | ||
}, | }, | ||
["pp_macro_not_used"]={ | ["pp_macro_not_used"]={ | ||
[a]="macro is not used [-Wunused-macros]", | [a]="macro is not used [-Wunused-macros]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"unused-macros"}, | ||
[ | [q]="unused-macros", | ||
[e]="macro is not used", | [e]="macro is not used", | ||
[g]= | [g]=t, | ||
[b]="macro is not used", | [b]="macro is not used", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wunused\\-macros[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wunused\\-macros[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Y,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 // ...\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 // ...\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);"},{Y,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 // ...\n if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && !MacroExpansionInDirectivesOverride && getSourceManager().getFileID(MI->getDefinitionLoc()) != getPredefinesFileID()) {"},{Y,3213,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,582: | Line 5,582: | ||
["pp_nonportable_path"]={ | ["pp_nonportable_path"]={ | ||
[a]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-include-path]", | [a]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-include-path]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"nonportable-include-path"}, | ||
[ | [q]="nonportable-include-path", | ||
[e]="non-portable path to file \'%0\'; specified path differs in case from file name on disk", | [e]="non-portable path to file \'%0\'; specified path differs in case from file name on disk", | ||
[g]= | [g]=t, | ||
[b]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk", | [b]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-include\\-path[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-include\\-path[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"fc5d13d9b180",1464979971,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p...","Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import paths."}, | [i]={"fc5d13d9b180",1464979971,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p...","Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import paths."}, | ||
[j]={{ | [j]={{Y,2487,"#endif\n // ...\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"]={ | ||
[a]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-system-include-path]", | [a]="non-portable path to file \'A\'; specified path differs in case from file name on disk [-Wnonportable-system-include-path]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"nonportable-system-include-path"}, | ||
[ | [q]="nonportable-system-include-path", | ||
[e]="non-portable path to file \'%0\'; specified path differs in case from file name on disk", | [e]="non-portable path to file \'%0\'; specified path differs in case from file name on disk", | ||
[g]= | [g]=t, | ||
[b]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk", | [b]="non\\-portable path to file \'(.*?)\'; specified path differs in case from file name on disk", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-system\\-include\\-path[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-system\\-include\\-path[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"e8533670bf22",1465837398,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p...","Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import paths."}, | [i]={"e8533670bf22",1465837398,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p...","Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import paths."}, | ||
[j]={{ | [j]={{Y,2488,"#endif\n // ...\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"]={ | ||
[a]="current file is older than dependency A", | [a]="current file is older than dependency A", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="current file is older than dependency %0", | [e]="current file is older than dependency %0", | ||
[g]= | [g]=t, | ||
[b]="current file is older than dependency (.*?)", | [b]="current file is older than dependency (.*?)", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{ec,567,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n // ...\n // If this file is older than the file it depends on, emit a diagnostic.\n if (CurFile && CurFile->getModificationTime() < File->getModificationTime()) {\n // ...\n Diag(FilenameTok, diag::pp_out_of_date_dependency) << Message;"}} | ||
}, | }, | ||
["pp_poisoning_existing_macro"]={ | ["pp_poisoning_existing_macro"]={ | ||
[a]="poisoning existing macro", | [a]="poisoning existing macro", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="poisoning existing macro", | [e]="poisoning existing macro", | ||
[g]= | [g]=t, | ||
[b]="poisoning existing macro", | [b]="poisoning existing macro", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{ec,474,"/// HandlePragmaPoison - Handle \\#pragma GCC poison. PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n // ...\n while (true) {\n // ...\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"]={ | ||
[a]="#pragma once in main file [-Wpragma-once-outside-header]", | [a]="#pragma once in main file [-Wpragma-once-outside-header]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"pragma-once-outside-header"}, | ||
[ | [q]="pragma-once-outside-header", | ||
[e]="#pragma once in main file", | [e]="#pragma once in main file", | ||
[g]= | [g]=t, | ||
[b]="\\#pragma once in main file", | [b]="\\#pragma once in main file", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wpragma\\-once\\-outside\\-header[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wpragma\\-once\\-outside\\-header[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{ec,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]={ | [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]"} | ["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]"} | ||
Line 5,652: | Line 5,652: | ||
["pp_pragma_sysheader_in_main_file"]={ | ["pp_pragma_sysheader_in_main_file"]={ | ||
[a]="#pragma system_header ignored in main file [-Wpragma-system-header-outside-header]", | [a]="#pragma system_header ignored in main file [-Wpragma-system-header-outside-header]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"pragma-system-header-outside-header"}, | ||
[ | [q]="pragma-system-header-outside-header", | ||
[e]="#pragma system_header ignored in main file", | [e]="#pragma system_header ignored in main file", | ||
[g]= | [g]=t, | ||
[b]="\\#pragma system_header ignored in main file", | [b]="\\#pragma system_header ignored in main file", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wpragma\\-system\\-header\\-outside\\-header[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wpragma\\-system\\-header\\-outside\\-header[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{ec,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]={ | [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]"} | ["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]"} | ||
Line 5,669: | Line 5,669: | ||
["remark_cc1_round_trip_generated"]={ | ["remark_cc1_round_trip_generated"]={ | ||
[a]="generated arguments #A in round-trip: B [-Rround-trip-cc1-args]", | [a]="generated arguments #A in round-trip: B [-Rround-trip-cc1-args]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"round-trip-cc1-args"}, | ||
[ | [q]="round-trip-cc1-args", | ||
[e]="generated arguments #%0 in round-trip: %1", | [e]="generated arguments #%0 in round-trip: %1", | ||
[g]= | [g]=jb, | ||
[b]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)", | [b]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)", | ||
[h]=m, | [h]=m, | ||
[f]=m, | [f]=m, | ||
[i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"}, | [i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[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 // ...\n Diags.Report(diag::remark_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{"clang/lib/Frontend/CompilerInvocation.cpp",793,"#endif\n // ...\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 // ...\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]={ | [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\" "} | ["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\" "} | ||
Line 5,687: | Line 5,687: | ||
["remark_fe_backend_optimization_remark"]={ | ["remark_fe_backend_optimization_remark"]={ | ||
[a]="A [-Rpass]", | [a]="A [-Rpass]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"pass"}, | ||
[ | [q]="pass", | ||
[e]= | [e]=Yc, | ||
[g]= | [g]=jb, | ||
[b]= | [b]=Vc, | ||
[h]=" \\[[^\\]]*\\-Rpass[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rpass[^\\]]*\\]", | ||
[f]= | [f]=Lc, | ||
[i]={"829b1700484d",1397667264,"Add support for optimization reports.","Add support for optimization reports."}, | [i]={"829b1700484d",1397667264,"Add support for optimization reports.","Add support for optimization reports."}, | ||
[j]={{ | [j]={{fd,796,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,705: | Line 5,705: | ||
["remark_fe_backend_optimization_remark_analysis"]={ | ["remark_fe_backend_optimization_remark_analysis"]={ | ||
[a]="A [-Rpass-analysis]", | [a]="A [-Rpass-analysis]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ec}, | ||
[ | [q]=Ec, | ||
[e]= | [e]=Yc, | ||
[g]= | [g]=jb, | ||
[b]= | [b]=Vc, | ||
[h]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | ||
[f]= | [f]=Lc, | ||
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis.","Add flags -Rpass-missed and -Rpass-analysis."}, | [i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis.","Add flags -Rpass-missed and -Rpass-analysis."}, | ||
[j]={{ | [j]={{fd,814,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n // ...\n if (D.isPassed()) {\n // ...\n } else if (D.isMissed()) {\n // ...\n } else {\n // ...\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"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ec}, | ||
[ | [q]=Ec, | ||
[e]="%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]="%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!", | ||
[g]= | [g]=jb, | ||
[b]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop\\. If the arrays will always be independent specify \'\\#pragma clang loop vectorize\\(assume_safety\\)\' before the loop or provide the \'__restrict__\' qualifier with the independent array arguments\\. Erroneous results will occur if these options are incorrectly applied\\!", | [b]="(.*?); 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\\!", | ||
[h]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | ||
[f]= | [f]=Lc, | ||
[i]={"034baf615477",1439247916,"Append options for vectorization when pointer checking threshold is exceeded.","Append options for vectorization when pointer checking threshold is exceeded."}, | [i]={"034baf615477",1439247916,"Append options for vectorization when pointer checking threshold is exceeded.","Append options for vectorization when pointer checking threshold is exceeded."}, | ||
[j]={{ | [j]={{fd,839,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisAliasing &D) {\n // ...\n if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_aliasing);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,738: | Line 5,738: | ||
["remark_fe_backend_optimization_remark_analysis_fpcommute"]={ | ["remark_fe_backend_optimization_remark_analysis_fpcommute"]={ | ||
[a]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'. [-Rpass-analysis]", | [a]="A; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'. [-Rpass-analysis]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ec}, | ||
[ | [q]=Ec, | ||
[e]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'.", | [e]="%0; allow reordering by specifying \'#pragma clang loop vectorize(enable)\' before the loop or by providing the compiler option \'-ffast-math\'.", | ||
[g]= | [g]=jb, | ||
[b]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop or by providing the compiler option \'\\-ffast\\-math\'\\.", | [b]="(.*?); allow reordering by specifying \'\\#pragma clang loop vectorize\\(enable\\)\' before the loop or by providing the compiler option \'\\-ffast\\-math\'\\.", | ||
[h]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rpass\\-analysis[^\\]]*\\]", | ||
[f]= | [f]=Lc, | ||
[i]={"8a0925cb627c",1439236600,"Append options for floating-point commutivity when related diagnostics are produced.","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.","Append options for floating-point commutivity when related diagnostics are produced."}, | ||
[j]={{ | [j]={{fd,827,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisFPCommute &D) {\n // ...\n if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,756: | Line 5,756: | ||
["remark_fe_backend_optimization_remark_missed"]={ | ["remark_fe_backend_optimization_remark_missed"]={ | ||
[a]="A [-Rpass-missed]", | [a]="A [-Rpass-missed]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"pass-missed"}, | ||
[ | [q]="pass-missed", | ||
[e]= | [e]=Yc, | ||
[g]= | [g]=jb, | ||
[b]= | [b]=Vc, | ||
[h]=" \\[[^\\]]*\\-Rpass\\-missed[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rpass\\-missed[^\\]]*\\]", | ||
[f]= | [f]=Lc, | ||
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis.","Add flags -Rpass-missed and -Rpass-analysis."}, | [i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis.","Add flags -Rpass-missed and -Rpass-analysis."}, | ||
[j]={{ | [j]={{fd,803,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n // ...\n if (D.isPassed()) {\n // ...\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"]={ | ||
[a]="A [-Rremark-backend-plugin]", | [a]="A [-Rremark-backend-plugin]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"remark-backend-plugin"}, | ||
[ | [q]="remark-backend-plugin", | ||
[e]= | [e]=Yc, | ||
[g]= | [g]=jb, | ||
[b]= | [b]=Vc, | ||
[h]=" \\[[^\\]]*\\-Rremark\\-backend\\-plugin[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rremark\\-backend\\-plugin[^\\]]*\\]", | ||
[f]= | [f]=Lc, | ||
[i]={"741602461d20",1393578668,"Add \'remark\' diagnostic type in \'clang\'","Add \'remark\' diagnostic type in \'clang\'"} | [i]={"741602461d20",1393578668,"Add \'remark\' diagnostic type in \'clang\'","Add \'remark\' diagnostic type in \'clang\'"} | ||
}, | }, | ||
["remark_module_build"]={ | ["remark_module_build"]={ | ||
[a]="building module \'A\' as \'B\' [-Rmodule-build]", | [a]="building module \'A\' as \'B\' [-Rmodule-build]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={fc}, | ||
[ | [q]=fc, | ||
[e]="building module \'%0\' as \'%1\'", | [e]="building module \'%0\' as \'%1\'", | ||
[g]= | [g]=jb, | ||
[b]="building module \'(.*?)\' as \'(.*?)\'", | [b]="building module \'(.*?)\' as \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark","Switch Wmodule-build to a remark"}, | [i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark","Switch Wmodule-build to a remark"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build) << ModuleName << ModuleFileName;"}} | ||
}, | }, | ||
["remark_module_build_done"]={ | ["remark_module_build_done"]={ | ||
[a]="finished building module \'A\' [-Rmodule-build]", | [a]="finished building module \'A\' [-Rmodule-build]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={fc}, | ||
[ | [q]=fc, | ||
[e]="finished building module \'%0\'", | [e]="finished building module \'%0\'", | ||
[g]= | [g]=jb, | ||
[b]="finished building module \'(.*?)\'", | [b]="finished building module \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"99891da71a88",1413252510,"Extend -Rmodule-build to also remark when module building finishes.","Extend -Rmodule-build to also remark when module building finishes."}, | [i]={"99891da71a88",1413252510,"Extend -Rmodule-build to also remark when module building finishes.","Extend -Rmodule-build to also remark when module building finishes."}, | ||
[j]={{ | [j]={{Oc,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 // ...\n ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build_done) << ModuleName;"}} | ||
}, | }, | ||
["remark_module_import"]={ | ["remark_module_import"]={ | ||
[a]="importing module \'A\'... from \'B\' [-Rmodule-import]", | [a]="importing module \'A\'... from \'B\' [-Rmodule-import]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"module-import"}, | ||
[ | [q]="module-import", | ||
[e]="importing module \'%0\'%select{| into \'%3\'}2 from \'%1\'", | [e]="importing module \'%0\'%select{| into \'%3\'}2 from \'%1\'", | ||
[g]= | [g]=jb, | ||
[b]="importing module \'(.*?)\'(?:| into \'(.*?)\') from \'(.*?)\'", | [b]="importing module \'(.*?)\'(?:| into \'(.*?)\') from \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-import[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-import[^\\]]*\\]", | ||
[f]="AST Deserialization Issue", | [f]="AST Deserialization Issue", | ||
[i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import","Modules: Add -Rmodule-import"}, | [i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import","Modules: Add -Rmodule-import"}, | ||
[j]={{ | [j]={{ic,2975,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n // ...\n while (true) {\n // ...\n case MODULE_NAME:\n // ...\n Diag(diag::remark_module_import) << F.ModuleName << F.FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"},{ic,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 // ...\n case ModuleManager::AlreadyLoaded:\n Diag(diag::remark_module_import) << M->ModuleName << M->FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,833: | Line 5,833: | ||
["remark_module_lock"]={ | ["remark_module_lock"]={ | ||
[a]="locking \'A\' to build module \'B\' [-Rmodule-lock]", | [a]="locking \'A\' to build module \'B\' [-Rmodule-lock]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"module-lock"}, | ||
[ | [q]="module-lock", | ||
[e]="locking \'%0\' to build module \'%1\'", | [e]="locking \'%0\' to build module \'%1\'", | ||
[g]= | [g]=jb, | ||
[b]="locking \'(.*?)\' to build module \'(.*?)\'", | [b]="locking \'(.*?)\' to build module \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-lock[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-lock[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock","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","Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n Diags.Report(ModuleNameLoc, diag::remark_module_lock) << ModuleFileName << Module->Name;"}} | ||
}, | }, | ||
["remark_module_lock_failure"]={ | ["remark_module_lock_failure"]={ | ||
[a]="could not acquire lock file for module \'A\': B [-Rmodule-build]", | [a]="could not acquire lock file for module \'A\': B [-Rmodule-build]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={fc}, | ||
[ | [q]=fc, | ||
[e]="could not acquire lock file for module \'%0\': %1", | [e]="could not acquire lock file for module \'%0\': %1", | ||
[g]= | [g]=jb, | ||
[b]="could not acquire lock file for module \'(.*?)\'\\: (.*?)", | [b]="could not acquire lock file for module \'(.*?)\'\\: (.*?)", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module","[Modules] In case of lock timeout, fallback and build module"}, | [i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module","[Modules] In case of lock timeout, fallback and build module"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n while (true) {\n // ...\n case llvm::LockFileManager::LFS_Error:\n // ...\n Diags.Report(ModuleNameLoc, diag::remark_module_lock_failure) << Module->Name << Locked.getErrorMessage();"}} | ||
}, | }, | ||
["remark_module_lock_timeout"]={ | ["remark_module_lock_timeout"]={ | ||
[a]="timed out waiting to acquire lock file for module \'A\' [-Rmodule-build]", | [a]="timed out waiting to acquire lock file for module \'A\' [-Rmodule-build]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={fc}, | ||
[ | [q]=fc, | ||
[e]="timed out waiting to acquire lock file for module \'%0\'", | [e]="timed out waiting to acquire lock file for module \'%0\'", | ||
[g]= | [g]=jb, | ||
[b]="timed out waiting to acquire lock file for module \'(.*?)\'", | [b]="timed out waiting to acquire lock file for module \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-build[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module","[Modules] In case of lock timeout, fallback and build module"}, | [i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module","[Modules] In case of lock timeout, fallback and build module"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n while (true) {\n // ...\n case llvm::LockFileManager::Res_Timeout:\n // ...\n Diags.Report(ModuleNameLoc, diag::remark_module_lock_timeout) << Module->Name;"}} | ||
}, | }, | ||
["remark_pp_include_directive_modular_translation"]={ | ["remark_pp_include_directive_modular_translation"]={ | ||
[a]="treating #... as an import of module \'A\' [-Rmodule-include-translation]", | [a]="treating #... as an import of module \'A\' [-Rmodule-include-translation]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"module-include-translation"}, | ||
[ | [q]="module-include-translation", | ||
[e]="treating #%select{include|import|include_next|__include_macros}0 as an import of module \'%1\'", | [e]="treating #%select{include|import|include_next|__include_macros}0 as an import of module \'%1\'", | ||
[g]= | [g]=jb, | ||
[b]="treating \\#(?:include|import|include_next|__include_macros) as an import of module \'(.*?)\'", | [b]="treating \\#(?:include|import|include_next|__include_macros) as an import of module \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rmodule\\-include\\-translation[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rmodule\\-include\\-translation[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{Y,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 // ...\n PP.Diag(HashLoc, diag::remark_pp_include_directive_modular_translation) << IncludeKind << PathString;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,896: | Line 5,896: | ||
["remark_pp_search_path_usage"]={ | ["remark_pp_search_path_usage"]={ | ||
[a]="search path used: \'A\' [-Rsearch-path-usage]", | [a]="search path used: \'A\' [-Rsearch-path-usage]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"search-path-usage"}, | ||
[ | [q]="search-path-usage", | ||
[e]="search path used: \'%0\'", | [e]="search path used: \'%0\'", | ||
[g]= | [g]=jb, | ||
[b]="search path used\\: \'(.*?)\'", | [b]="search path used\\: \'(.*?)\'", | ||
[h]=" \\[[^\\]]*\\-Rsearch\\-path\\-usage[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rsearch\\-path\\-usage[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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 // ...\n if (UserEntryIdxIt != SearchDirToHSEntry.end())\n Diags.Report(Loc, diag::remark_pp_search_path_usage) << HSOpts->UserEntries[UserEntryIdxIt->second].Path;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,914: | Line 5,914: | ||
["remark_sanitize_address_insert_extra_padding_accepted"]={ | ["remark_sanitize_address_insert_extra_padding_accepted"]={ | ||
[a]="-fsanitize-address-field-padding applied to A [-Rsanitize-address]", | [a]="-fsanitize-address-field-padding applied to A [-Rsanitize-address]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"sanitize-address"}, | ||
[ | [q]="sanitize-address", | ||
[e]="-fsanitize-address-field-padding applied to %0", | [e]="-fsanitize-address-field-padding applied to %0", | ||
[g]= | [g]=jb, | ||
[b]="\\-fsanitize\\-address\\-field\\-padding applied to (.*?)", | [b]="\\-fsanitize\\-address\\-field\\-padding applied to (.*?)", | ||
[h]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec...","Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-object-overflow bugs"}, | [i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec...","Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-object-overflow bugs"}, | ||
[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 // ...\n if (EmitRemark) {\n if (ReasonToReject >= 0)\n // ...\n else\n Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_accepted) << getQualifiedNameAsString();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,932: | Line 5,932: | ||
["remark_sanitize_address_insert_extra_padding_rejected"]={ | ["remark_sanitize_address_insert_extra_padding_rejected"]={ | ||
[a]="-fsanitize-address-field-padding ignored for A because it ... [-Rsanitize-address]", | [a]="-fsanitize-address-field-padding ignored for A because it ... [-Rsanitize-address]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"sanitize-address"}, | ||
[ | [q]="sanitize-address", | ||
[e]="-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]="-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", | ||
[g]= | [g]=jb, | ||
[b]="\\-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)", | [b]="\\-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)", | ||
[h]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rsanitize\\-address[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec...","Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-object-overflow bugs"}, | [i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec...","Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-object-overflow bugs"}, | ||
[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 // ...\n if (EmitRemark) {\n if (ReasonToReject >= 0)\n Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_rejected) << getQualifiedNameAsString() << ReasonToReject;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,950: | Line 5,950: | ||
["remark_sloc_usage"]={ | ["remark_sloc_usage"]={ | ||
[a]="source manager location address space usage: [-Rsloc-usage]", | [a]="source manager location address space usage: [-Rsloc-usage]", | ||
[c]= | [c]=nb, | ||
[d]= | [d]=ob, | ||
[ | [r]={"sloc-usage"}, | ||
[ | [q]="sloc-usage", | ||
[e]="source manager location address space usage:", | [e]="source manager location address space usage:", | ||
[g]= | [g]=jb, | ||
[b]="source manager location address space usage\\:", | [b]="source manager location address space usage\\:", | ||
[h]=" \\[[^\\]]*\\-Rsloc\\-usage[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Rsloc\\-usage[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information","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","When we run out of source locations, try to produce useful information"}, | ||
[j]={{ | [j]={{ec,1202,"struct PragmaDebugHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n // ...\n if (II->isStr(\"assert\")) {\n // ...\n } else if (II->isStr(\"crash\")) {\n // ...\n } else if (II->isStr(\"parser_crash\")) {\n // ...\n } else if (II->isStr(\"dump\")) {\n // ...\n } else if (II->isStr(\"diag_mapping\")) {\n // ...\n } else if (II->isStr(\"llvm_fatal_error\")) {\n // ...\n } else if (II->isStr(\"llvm_unreachable\")) {\n // ...\n } else if (II->isStr(\"macro\")) {\n // ...\n } else if (II->isStr(\"module_map\")) {\n // ...\n } else if (II->isStr(\"overflow_stack\")) {\n // ...\n } else if (II->isStr(\"captured\")) {\n // ...\n } else if (II->isStr(\"modules\")) {\n // ...\n } else if (II->isStr(\"sloc_usage\")) {\n // ...\n PP.Diag(Tok, diag::remark_sloc_usage);"},{ic,3487,"llvm::Error ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n // ...\n while (true) {\n // ...\n case SOURCE_LOCATION_OFFSETS: {\n // ...\n if (!F.SLocEntryBaseID) {\n if (!Diags.isDiagnosticInFlight()) {\n Diags.Report(SourceLocation(), diag::remark_sloc_usage);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Misc/sloc-usage.cpp"]={"clang/test/Misc/sloc-usage.cpp:10:23: remark: source manager location address space usage: [-Rsloc-usage]"} | ["clang/test/Misc/sloc-usage.cpp"]={"clang/test/Misc/sloc-usage.cpp:10:23: remark: source manager location address space usage: [-Rsloc-usage]"} | ||
Line 5,967: | Line 5,967: | ||
["trigraph_converted"]={ | ["trigraph_converted"]={ | ||
[a]="trigraph converted to \'A\' character [-Wtrigraphs]", | [a]="trigraph converted to \'A\' character [-Wtrigraphs]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,Xb}, | ||
[ | [q]=Xb, | ||
[e]="trigraph converted to \'%0\' character", | [e]="trigraph converted to \'%0\' character", | ||
[g]= | [g]=t, | ||
[b]="trigraph converted to \'(.*?)\' character", | [b]="trigraph converted to \'(.*?)\' character", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{qb,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);"}}, | [j]={{qb,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 // ...\n if (L && !L->isLexingRawMode())\n L->Diag(CP - 2, diag::trigraph_converted) << StringRef(&Res, 1);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:28:4: warning: trigraph converted to \'|\' character [-Wtrigraphs]"} | ["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:28:4: warning: trigraph converted to \'|\' character [-Wtrigraphs]"} | ||
Line 5,984: | Line 5,984: | ||
["trigraph_ends_block_comment"]={ | ["trigraph_ends_block_comment"]={ | ||
[a]="trigraph ends block comment [-Wtrigraphs]", | [a]="trigraph ends block comment [-Wtrigraphs]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,Xb}, | ||
[ | [q]=Xb, | ||
[e]="trigraph ends block comment", | [e]="trigraph ends block comment", | ||
[g]= | [g]=t, | ||
[b]="trigraph ends block comment", | [b]="trigraph ends block comment", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{qb,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);"}}, | [j]={{qb,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 // ...\n if (TrigraphPos) {\n // ...\n if (!L->isLexingRawMode())\n L->Diag(TrigraphPos, diag::trigraph_ends_block_comment);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,001: | Line 6,001: | ||
["trigraph_ignored"]={ | ["trigraph_ignored"]={ | ||
[a]="trigraph ignored [-Wtrigraphs]", | [a]="trigraph ignored [-Wtrigraphs]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,Xb}, | ||
[ | [q]=Xb, | ||
[e]="trigraph ignored", | [e]="trigraph ignored", | ||
[g]= | [g]=t, | ||
[b]="trigraph ignored", | [b]="trigraph ignored", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{qb,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);"}}, | [j]={{qb,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 // ...\n if (!Trigraphs) {\n if (L && !L->isLexingRawMode())\n L->Diag(CP - 2, diag::trigraph_ignored);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/cxx2a-nttp-printing.cpp"]={"clang/test/SemaCXX/cxx2a-nttp-printing.cpp:31:14: warning: trigraph ignored [-Wtrigraphs]"} | ["clang/test/SemaCXX/cxx2a-nttp-printing.cpp"]={"clang/test/SemaCXX/cxx2a-nttp-printing.cpp:31:14: warning: trigraph ignored [-Wtrigraphs]"} | ||
Line 6,018: | Line 6,018: | ||
["trigraph_ignored_block_comment"]={ | ["trigraph_ignored_block_comment"]={ | ||
[a]="ignored trigraph would end block comment [-Wtrigraphs]", | [a]="ignored trigraph would end block comment [-Wtrigraphs]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,Xb}, | ||
[ | [q]=Xb, | ||
[e]="ignored trigraph would end block comment", | [e]="ignored trigraph would end block comment", | ||
[g]= | [g]=t, | ||
[b]="ignored trigraph would end block comment", | [b]="ignored trigraph would end block comment", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtrigraphs[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{qb,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);"}} | [j]={{qb,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 // ...\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"]={ | ||
[a]="-O4 is equivalent to -O3 [-Wdeprecated]", | [a]="-O4 is equivalent to -O3 [-Wdeprecated]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Hb}, | ||
[ | [q]=Hb, | ||
[e]="-O4 is equivalent to -O3", | [e]="-O4 is equivalent to -O3", | ||
[g]= | [g]=t, | ||
[b]="\\-O4 is equivalent to \\-O3", | [b]="\\-O4 is equivalent to \\-O3", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={"ad70d9683ea7",1377622695,"Warn that -O4 is the same as -O3.","Warn that -O4 is the same as -O3."}, | [i]={"ad70d9683ea7",1377622695,"Warn that -O4 is the same as -O3.","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 // ...\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 // ...\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 // ...\n D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Clang.cpp",5932,"#endif\n // ...\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 // ...\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 // ...\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 // ...\n D.Diag(diag::warn_O4_is_O3);"}} | ||
}, | }, | ||
["warn_abs_too_small"]={ | ["warn_abs_too_small"]={ | ||
[a]="absolute value function A given an argument of type B but has parameter of type C which may cause truncation of value [-Wabsolute-value]", | [a]="absolute value function A given an argument of type B but has parameter of type C which may cause truncation of value [-Wabsolute-value]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"absolute-value"}, | ||
[ | [q]="absolute-value", | ||
[e]="absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value", | [e]="absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value", | ||
[g]= | [g]=t, | ||
[b]="absolute value function (.*?) given an argument of type (.*?) but has parameter of type (.*?) which may cause truncation of value", | [b]="absolute value function (.*?) given an argument of type (.*?) but has parameter of type (.*?) which may cause truncation of value", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"7eb0b2c1819c",1393377448, | [i]={"7eb0b2c1819c",1393377448,Gc,Gc}, | ||
[j]={{G,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]={{G,12060,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n // ...\n // The argument and parameter are the same kind. Check if they are the right\n // size.\n if (ArgValueKind == ParamValueKind) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,063: | Line 6,063: | ||
["warn_abstract_final_class"]={ | ["warn_abstract_final_class"]={ | ||
[a]="abstract class is marked \'...\' [-Wabstract-final-class]", | [a]="abstract class is marked \'...\' [-Wabstract-final-class]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"abstract-final-class"}, | ||
[ | [q]="abstract-final-class", | ||
[e]="abstract class is marked \'%select{final|sealed}0\'", | [e]="abstract class is marked \'%select{final|sealed}0\'", | ||
[g]= | [g]=t, | ||
[b]="abstract class is marked \'(?:final|sealed)\'", | [b]="abstract class is marked \'(?:final|sealed)\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wabstract\\-final\\-class[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wabstract\\-final\\-class[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes.","PR13890: Warn on abstract final classes."}, | [i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes.","PR13890: Warn on abstract final classes."}, | ||
[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();"}}, | [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 // ...\n if (Record->isAbstract()) {\n if (FinalAttr *FA = Record->getAttr<FinalAttr>()) {\n Diag(Record->getLocation(), diag::warn_abstract_final_class) << FA->isSpelledAsSealed();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,080: | Line 6,080: | ||
["warn_abstract_vbase_init_ignored"]={ | ["warn_abstract_vbase_init_ignored"]={ | ||
[a]="initializer for virtual base class A of abstract class B will never be used [-Wabstract-vbase-init]", | [a]="initializer for virtual base class A of abstract class B will never be used [-Wabstract-vbase-init]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"abstract-vbase-init"}, | ||
[ | [q]="abstract-vbase-init", | ||
[e]="initializer for virtual base class %0 of abstract class %1 will never be used", | [e]="initializer for virtual base class %0 of abstract class %1 will never be used", | ||
[g]= | [g]=t, | ||
[b]="initializer for virtual base class (.*?) of abstract class (.*?) will never be used", | [b]="initializer for virtual base class (.*?) of abstract class (.*?) will never be used", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wabstract\\-vbase\\-init[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wabstract\\-vbase\\-init[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:","Implement DR257 / fix PR16659:"}, | [i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:","Implement DR257 / fix PR16659:"}, | ||
[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;"}}, | [j]={{z,5351,"bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, ArrayRef<CXXCtorInitializer *> Initializers) {\n // ...\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 // ...\n Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored) << VBase.getType() << ClassDecl;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,098: | Line 6,098: | ||
["warn_access_decl_deprecated"]={ | ["warn_access_decl_deprecated"]={ | ||
[a]="access declarations are deprecated; use using declarations instead [-Wdeprecated]", | [a]="access declarations are deprecated; use using declarations instead [-Wdeprecated]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Hb}, | ||
[ | [q]=Hb, | ||
[e]="access declarations are deprecated; use using declarations instead", | [e]="access declarations are deprecated; use using declarations instead", | ||
[g]= | [g]=t, | ||
[b]="access declarations are deprecated; use using declarations instead", | [b]="access declarations are deprecated; use using declarations instead", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={"a009726ce3a0",1260497403,"Implement access declarations. Most of the work here is parsing them, which","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","Implement access declarations. Most of the work here is parsing them, which"}, | ||
[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 \");"}}, | [j]={{z,12069,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,115: | Line 6,115: | ||
["warn_accessor_property_type_mismatch"]={ | ["warn_accessor_property_type_mismatch"]={ | ||
[a]="type of property A does not match type of accessor B", | [a]="type of property A does not match type of accessor B", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="type of property %0 does not match type of accessor %1", | [e]="type of property %0 does not match type of accessor %1", | ||
[g]= | [g]=t, | ||
[b]="type of property (.*?) does not match type of accessor (.*?)", | [b]="type of property (.*?) does not match type of accessor (.*?)", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=l, | [f]=l, | ||
[i]={"b2ab73d93cf5",1241811394,"More type checking for properties, accessors and","More type checking for properties, accessors and"}, | [i]={"b2ab73d93cf5",1241811394,"More type checking for properties, accessors and","More type checking for properties, accessors and"}, | ||
[j]={{F,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();"},{F,2452,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n if (!property->isReadOnly() && SetterMethod) {\n if (SetterMethod->param_size() != 1 || !Context.hasSameUnqualifiedType((*SetterMethod->param_begin())->getType().getNonReferenceType(), property->getType().getNonReferenceType())) {\n Diag(property->getLocation(), diag::warn_accessor_property_type_mismatch) << property->getDeclName() << SetterMethod->getSelector();"}}, | [j]={{F,1742,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n // ...\n if (!compat) {\n Diag(Loc, diag::warn_accessor_property_type_mismatch) << property->getDeclName() << GetterMethod->getSelector();"},{F,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 // ...\n if (!property->isReadOnly() && SetterMethod) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 6,130: | Line 6,130: | ||
["warn_acquire_requires_negative_cap"]={ | ["warn_acquire_requires_negative_cap"]={ | ||
[a]="acquiring A \'B\' requires negative capability \'C\' [-Wthread-safety-negative]", | [a]="acquiring A \'B\' requires negative capability \'C\' [-Wthread-safety-negative]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"thread-safety-negative"}, | ||
[ | [q]="thread-safety-negative", | ||
[e]="acquiring %0 \'%1\' requires negative capability \'%2\'", | [e]="acquiring %0 \'%1\' requires negative capability \'%2\'", | ||
[g]= | [g]=t, | ||
[b]="acquiring (.*?) \'(.*?)\' requires negative capability \'(.*?)\'", | [b]="acquiring (.*?) \'(.*?)\' requires negative capability \'(.*?)\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-negative[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-negative[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"3efd0495a081",1407190386,"Thread Safety Analysis: add a -Wthread-safety-negative flag that warns whenever","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","Thread Safety Analysis: add a -Wthread-safety-negative flag that warns whenever"}, | ||
[j]={{ | [j]={{L,2021,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,148: | Line 6,148: | ||
["warn_acquired_before"]={ | ["warn_acquired_before"]={ | ||
[a]="A \'B\' must be acquired before \'C\' [-Wthread-safety-analysis]", | [a]="A \'B\' must be acquired before \'C\' [-Wthread-safety-analysis]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"thread-safety",Cc}, | ||
[ | [q]=Cc, | ||
[e]="%0 \'%1\' must be acquired before \'%2\'", | [e]="%0 \'%1\' must be acquired before \'%2\'", | ||
[g]= | [g]=t, | ||
[b]="(.*?) \'(.*?)\' must be acquired before \'(.*?)\'", | [b]="(.*?) \'(.*?)\' must be acquired before \'(.*?)\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes.","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.","Thread Safety Analysis: add support for before/after annotations on mutexes."}, | ||
[j]={{ | [j]={{L,2043,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,166: | Line 6,166: | ||
["warn_acquired_before_after_cycle"]={ | ["warn_acquired_before_after_cycle"]={ | ||
[a]="Cycle in acquired_before/after dependencies, starting with \'A\' [-Wthread-safety-analysis]", | [a]="Cycle in acquired_before/after dependencies, starting with \'A\' [-Wthread-safety-analysis]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"thread-safety",Cc}, | ||
[ | [q]=Cc, | ||
[e]="Cycle in acquired_before/after dependencies, starting with \'%0\'", | [e]="Cycle in acquired_before/after dependencies, starting with \'%0\'", | ||
[g]= | [g]=t, | ||
[b]="Cycle in acquired_before\\/after dependencies, starting with \'(.*?)\'", | [b]="Cycle in acquired_before\\/after dependencies, starting with \'(.*?)\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes.","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.","Thread Safety Analysis: add support for before/after annotations on mutexes."}, | ||
[j]={{ | [j]={{L,2049,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\n void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,184: | Line 6,184: | ||
["warn_addition_in_bitshift"]={ | ["warn_addition_in_bitshift"]={ | ||
[a]="operator \'A\' has lower precedence than \'B\'; \'C\' will be evaluated first [-Wshift-op-parentheses]", | [a]="operator \'A\' has lower precedence than \'B\'; \'C\' will be evaluated first [-Wshift-op-parentheses]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,"parentheses","shift-op-parentheses"}, | ||
[ | [q]="shift-op-parentheses", | ||
[e]="operator \'%0\' has lower precedence than \'%1\'; \'%1\' will be evaluated first", | [e]="operator \'%0\' has lower precedence than \'%1\'; \'%1\' will be evaluated first", | ||
[g]= | [g]=t, | ||
[b]="operator \'(.*?)\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first", | [b]="operator \'(.*?)\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wshift\\-op\\-parentheses[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wshift\\-op\\-parentheses[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"15f17cbbd813",1349397663,"Implement -Wshift-op-parentheses for: a << b + c","Implement -Wshift-op-parentheses for: a << b + c"}, | [i]={"15f17cbbd813",1349397663,"Implement -Wshift-op-parentheses for: a << b + c","Implement -Wshift-op-parentheses for: a << b + c"}, | ||
[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;"}}, | [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 // ...\n S.Diag(Bop->getOperatorLoc(), diag::warn_addition_in_bitshift) << Bop->getSourceRange() << OpLoc << Shift << Op;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,201: | Line 6,201: | ||
["warn_address_of_reference_bool_conversion"]={ | ["warn_address_of_reference_bool_conversion"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"bool-conversion","bool-conversions",Pb,Sb,"undefined-bool-conversion"}, | ||
[ | [q]="undefined-bool-conversion", | ||
[e]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", | [e]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", | ||
[g]= | [g]=t, | ||
[b]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true", | [b]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Ic, | ||
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings","Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | [i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings","Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | ||
[j]={{G,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]={{G,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 // ...\n if (IsAddressOf) {\n unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,218: | Line 6,218: | ||
["warn_address_of_reference_null_compare"]={ | ["warn_address_of_reference_null_compare"]={ | ||
[a]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to ... [-Wtautological-undefined-compare]", | [a]="reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to ... [-Wtautological-undefined-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,oc,"tautological-undefined-compare"}, | ||
[ | [q]="tautological-undefined-compare", | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)", | [b]="reference cannot be bound to dereferenced null pointer in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings","Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | [i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings","Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | ||
[j]={{G,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]={{G,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 // ...\n if (IsAddressOf) {\n unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,235: | Line 6,235: | ||
["warn_alias_to_weak_alias"]={ | ["warn_alias_to_weak_alias"]={ | ||
[a]="... will always resolve to A even if weak definition of B is overridden [-Wignored-attributes]", | [a]="... will always resolve to A even if weak definition of B is overridden [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", | [e]="%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", | ||
[g]= | [g]=t, | ||
[b]="(?:alias|ifunc) will always resolve to (.*?) even if weak definition of (.*?) is overridden", | [b]="(?:alias|ifunc) will always resolve to (.*?) even if weak definition of (.*?) is overridden", | ||
[h]= | [h]=N, | ||
[f]=m, | [f]=m, | ||
[i]={"a39fc6dd2afa",1395934040,"Handle and warn on aliases to weak aliases.","Handle and warn on aliases to weak aliases."}, | [i]={"a39fc6dd2afa",1395934040,"Handle and warn on aliases to weak aliases.","Handle and warn on aliases to weak aliases."}, | ||
[j]={{ | [j]={{jd,667,"void CodeGenModule::checkAliases() {\n // ...\n for (const GlobalDecl &GD : Aliases) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,252: | Line 6,252: | ||
["warn_alias_with_section"]={ | ["warn_alias_with_section"]={ | ||
[a]="... will not be in section \'A\' but in the same section as the ... [-Wignored-attributes]", | [a]="... will not be in section \'A\' but in the same section as the ... [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%select{alias|ifunc}1 will not be in section \'%0\' but in the same section as the %select{aliasee|resolver}2", | [e]="%select{alias|ifunc}1 will not be in section \'%0\' but in the same section as the %select{aliasee|resolver}2", | ||
[g]= | [g]=t, | ||
[b]="(?:alias|ifunc) will not be in section \'(.*?)\' but in the same section as the (?:aliasee|resolver)", | [b]="(?:alias|ifunc) will not be in section \'(.*?)\' but in the same section as the (?:aliasee|resolver)", | ||
[h]= | [h]=N, | ||
[f]=m, | [f]=m, | ||
[i]={"502f65ae54d0",1399321263,"Fix pr19653.","Fix pr19653."}, | [i]={"502f65ae54d0",1399321263,"Fix pr19653.","Fix pr19653."}, | ||
[j]={{ | [j]={{jd,656,"void CodeGenModule::checkAliases() {\n // ...\n for (const GlobalDecl &GD : Aliases) {\n // ...\n if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {\n // ...\n if (AliasSection != AliaseeGV->getSection())\n Diags.Report(SA->getLocation(), diag::warn_alias_with_section) << AliasSection << IsIFunc << IsIFunc;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,269: | Line 6,269: | ||
["warn_aligned_attr_underaligned"]={ | ["warn_aligned_attr_underaligned"]={ | ||
[a]="requested alignment is less than minimum alignment of A for type B [-Wignored-attributes]", | [a]="requested alignment is less than minimum alignment of A for type B [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="requested alignment is less than minimum alignment of %1 for type %0", | [e]="requested alignment is less than minimum alignment of %1 for type %0", | ||
[g]= | [g]=t, | ||
[b]="requested alignment is less than minimum alignment of (.*?) for type (.*?)", | [b]="requested alignment is less than minimum alignment of (.*?) for type (.*?)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[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;"}}, | [j]={{v,4518,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n // ...\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 // ...\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 // ...\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 // ...\n if (Ty->isVectorType() && Context.toCharUnitsFromBits(AlignVal).getQuantity() < 16) {\n Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,286: | Line 6,286: | ||
["warn_alignment_builtin_useless"]={ | ["warn_alignment_builtin_useless"]={ | ||
[a]="... to 1 byte is ... [-Wtautological-compare]", | [a]="... to 1 byte is ... [-Wtautological-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,oc}, | ||
[ | [q]=oc, | ||
[e]="%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]="%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", | ||
[g]= | [g]=t, | ||
[b]="(?:aligning a value|the result of checking whether a value is aligned) to 1 byte is (?:a no\\-op|always true)", | [b]="(?:aligning a value|the result of checking whether a value is aligned) to 1 byte is (?:a no\\-op|always true)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"349636d2bfc3",1575555459, | [i]={"349636d2bfc3",1575555459,Tb,Tb}, | ||
[j]={{G,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]={{G,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 // ...\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 // ...\n if (AlignValue == 1) {\n S.Diag(AlignOp->getExprLoc(), diag::warn_alignment_builtin_useless) << IsBooleanAlignBuiltin;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,303: | Line 6,303: | ||
["warn_alignment_not_power_of_two"]={ | ["warn_alignment_not_power_of_two"]={ | ||
[a]="requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]", | [a]="requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"non-power-of-two-alignment"}, | ||
[ | [q]="non-power-of-two-alignment", | ||
[e]="requested alignment is not a power of 2", | [e]="requested alignment is not a power of 2", | ||
[g]= | [g]=t, | ||
[b]="requested alignment is not a power of 2", | [b]="requested alignment is not a power of 2", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnon\\-power\\-of\\-two\\-alignment[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnon\\-power\\-of\\-two\\-alignment[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[j]={{G,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]={{G,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 // ...\n if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n // ...\n if (!Arg->isValueDependent()) {\n // ...\n if (Arg->EvaluateAsInt(Align, Context)) {\n // ...\n if (!I.isPowerOf2())\n Diag(Arg->getExprLoc(), diag::warn_alignment_not_power_of_two) << Arg->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,320: | Line 6,320: | ||
["warn_alloca"]={ | ["warn_alloca"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"alloca"}, | ||
[ | [q]="alloca", | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="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", | [b]="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", | ||
[h]=" \\[(?:\\-Werror,)?\\-Walloca[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Walloca[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"9d045a5c1e6b",1564093420,"[Sema] add -Walloca to flag uses of `alloca`","[Sema] add -Walloca to flag uses of `alloca`"}, | [i]={"9d045a5c1e6b",1564093420,"[Sema] add -Walloca to flag uses of `alloca`","[Sema] add -Walloca to flag uses of `alloca`"}, | ||
[j]={{G,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]={{G,2205,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case Builtin::BI__builtin_alloca:\n case Builtin::BI__builtin_alloca_uninitialized:\n Diag(TheCall->getBeginLoc(), diag::warn_alloca) << TheCall->getDirectCallee();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,338: | Line 6,338: | ||
["warn_alloca_align_alignof"]={ | ["warn_alloca_align_alignof"]={ | ||
[a]="second argument to __builtin_alloca_with_align is supposed to be in bits [-Walloca-with-align-alignof]", | [a]="second argument to __builtin_alloca_with_align is supposed to be in bits [-Walloca-with-align-alignof]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"alloca-with-align-alignof"}, | ||
[ | [q]="alloca-with-align-alignof", | ||
[e]="second argument to __builtin_alloca_with_align is supposed to be in bits", | [e]="second argument to __builtin_alloca_with_align is supposed to be in bits", | ||
[g]= | [g]=t, | ||
[b]="second argument to __builtin_alloca_with_align is supposed to be in bits", | [b]="second argument to __builtin_alloca_with_align is supposed to be in bits", | ||
[h]=" \\[(?:\\-Werror,)?\\-Walloca\\-with\\-align\\-alignof[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Walloca\\-with\\-align\\-alignof[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"86b1bfad0509",1477937277,"[Sema] Warn when alignof is used with __builtin_alloca_with_align","[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","[Sema] Warn when alignof is used with __builtin_alloca_with_align"}, | ||
[j]={{G,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]={{G,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,355: | Line 6,355: | ||
["warn_always_inline_coroutine"]={ | ["warn_always_inline_coroutine"]={ | ||
[a]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined [-Walways-inline-coroutine]", | [a]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined [-Walways-inline-coroutine]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"always-inline-coroutine","coroutine"}, | ||
[ | [q]="always-inline-coroutine", | ||
[e]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined", | [e]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined", | ||
[g]= | [g]=t, | ||
[b]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined", | [b]="this coroutine may be split into pieces; not every piece is guaranteed to be inlined", | ||
[h]=" \\[(?:\\-Werror,)?\\-Walways\\-inline\\-coroutine[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Walways\\-inline\\-coroutine[^\\]]*\\]", | ||
[f]="Coroutines Issue", | [f]="Coroutines Issue", | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,372: | Line 6,372: | ||
["warn_ambiguous_suitable_delete_function_found"]={ | ["warn_ambiguous_suitable_delete_function_found"]={ | ||
[a]="multiple suitable A functions for B; no \'operator delete\' function will be invoked if initialization throws an exception [-Wambiguous-delete]", | [a]="multiple suitable A functions for B; no \'operator delete\' function will be invoked if initialization throws an exception [-Wambiguous-delete]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"ambiguous-delete"}, | ||
[ | [q]="ambiguous-delete", | ||
[e]="multiple suitable %0 functions for %1; no \'operator delete\' function will be invoked if initialization throws an exception", | [e]="multiple suitable %0 functions for %1; no \'operator delete\' function will be invoked if initialization throws an exception", | ||
[g]= | [g]=t, | ||
[b]="multiple suitable (.*?) functions for (.*?); no \'operator delete\' function will be invoked if initialization throws an exception", | [b]="multiple suitable (.*?) functions for (.*?); no \'operator delete\' function will be invoked if initialization throws an exception", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-delete[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-delete[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"189e52fcdfc3",1476081751,"P0035R4: Semantic analysis and code generation for C++17 overaligned","P0035R4: Semantic analysis and code generation for C++17 overaligned"}, | [i]={"189e52fcdfc3",1476081751,"P0035R4: Semantic analysis and code generation for C++17 overaligned","P0035R4: Semantic analysis and code generation for C++17 overaligned"}, | ||
[j]={{ | [j]={{hc,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 // ...\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 // ...\n } else if (!Matches.empty()) {\n // ...\n Diag(StartLoc, diag::warn_ambiguous_suitable_delete_function_found) << DeleteName << AllocElemType;"}} | ||
}, | }, | ||
["warn_analyzer_deprecated_option"]={ | ["warn_analyzer_deprecated_option"]={ | ||
[a]="analyzer option \'A\' is deprecated. This flag will be removed in B, and passing this option will be an error. [-Wdeprecated-static-analyzer-flag]", | [a]="analyzer option \'A\' is deprecated. This flag will be removed in B, and passing this option will be an error. [-Wdeprecated-static-analyzer-flag]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"deprecated-static-analyzer-flag"}, | ||
[ | [q]="deprecated-static-analyzer-flag", | ||
[e]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error.", | [e]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error.", | ||
[g]= | [g]=t, | ||
[b]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\.", | [b]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\.", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]", | ||
Line 6,399: | Line 6,399: | ||
["warn_analyzer_deprecated_option_with_alternative"]={ | ["warn_analyzer_deprecated_option_with_alternative"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"deprecated-static-analyzer-flag"}, | ||
[ | [q]="deprecated-static-analyzer-flag", | ||
[e]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error. Use \'%2\' instead.", | [e]="analyzer option \'%0\' is deprecated. This flag will be removed in %1, and passing this option will be an error. Use \'%2\' instead.", | ||
[g]= | [g]=t, | ||
[b]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\. Use \'(.*?)\' instead\\.", | [b]="analyzer option \'(.*?)\' is deprecated\\. This flag will be removed in (.*?), and passing this option will be an error\\. Use \'(.*?)\' instead\\.", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-static\\-analyzer\\-flag[^\\]]*\\]", | ||
Line 6,412: | Line 6,412: | ||
["warn_anyx86_interrupt_regsave"]={ | ["warn_anyx86_interrupt_regsave"]={ | ||
[a]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\' [-Winterrupt-service-routine]", | [a]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\' [-Winterrupt-service-routine]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"interrupt-service-routine"}, | ||
[ | [q]="interrupt-service-routine", | ||
[e]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'", | [e]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'", | ||
[g]= | [g]=t, | ||
[b]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'", | [b]="interrupt service routine should only call a function with attribute \'no_caller_saved_registers\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Winterrupt\\-service\\-routine[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Winterrupt\\-service\\-routine[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier"}, | ||
[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);"}}, | [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 // ...\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 // ...\n if (Caller->hasAttr<AnyX86InterruptAttr>() && ((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {\n Diag(Fn->getExprLoc(), diag::warn_anyx86_interrupt_regsave);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,429: | Line 6,429: | ||
["warn_arc_bridge_cast_nonarc"]={ | ["warn_arc_bridge_cast_nonarc"]={ | ||
[a]="\'A\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]", | [a]="\'A\' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"arc-bridge-casts-disallowed-in-nonarc"}, | ||
[ | [q]="arc-bridge-casts-disallowed-in-nonarc", | ||
[e]="\'%0\' casts have no effect when not using ARC", | [e]="\'%0\' casts have no effect when not using ARC", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' casts have no effect when not using ARC", | [b]="\'(.*?)\' casts have no effect when not using ARC", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-bridge\\-casts\\-disallowed\\-in\\-nonarc[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-bridge\\-casts\\-disallowed\\-in\\-nonarc[^\\]]*\\]", | ||
[f]="ARC Parse Issue", | [f]="ARC Parse Issue", | ||
[i]={"084e1b48a176",1329540158,"Change wording of warning about using __bridge casts in non-ARC.","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.","Change wording of warning about using __bridge casts in non-ARC."}, | ||
[j]={{ | [j]={{Sc,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 // ...\n if (BridgeCast && !getLangOpts().ObjCAutoRefCount) {\n if (!TryConsumeToken(tok::kw___bridge)) {\n // ...\n if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n Diag(BridgeKeywordLoc, diag::warn_arc_bridge_cast_nonarc) << BridgeCastName << FixItHint::CreateReplacement(BridgeKeywordLoc, \"\");"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,446: | Line 6,446: | ||
["warn_arc_lifetime_result_type"]={ | ["warn_arc_lifetime_result_type"]={ | ||
[a]="ARC ... lifetime qualifier on return type is ignored [-Wignored-qualifiers]", | [a]="ARC ... lifetime qualifier on return type is ignored [-Wignored-qualifiers]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={m,Z,Xc,"ignored-qualifiers"}, | ||
[ | [q]="ignored-qualifiers", | ||
[e]="ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", | [e]="ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", | ||
[g]= | [g]=t, | ||
[b]="ARC (?:unused|__unsafe_unretained|__strong|__weak|__autoreleasing) lifetime qualifier on return type is ignored", | [b]="ARC (?:unused|__unsafe_unretained|__strong|__weak|__autoreleasing) lifetime qualifier on return type is ignored", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | ||
[f]=zc, | [f]=zc, | ||
[i]={"cd78037ad117",1358465805,"In Objective-C ARC, completely ignore ownership qualifiers on the","In Objective-C ARC, completely ignore ownership qualifiers on the"}, | [i]={"cd78037ad117",1358465805,"In Objective-C ARC, completely ignore ownership qualifiers on the","In Objective-C ARC, completely ignore ownership qualifiers on the"}, | ||
[j]={{ | [j]={{ib,5402,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // 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 // ...\n if (AttrLoc.isValid()) {\n // ...\n S.Diag(AttrLoc, diag::warn_arc_lifetime_result_type) << T.getQualifiers().getObjCLifetime();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,463: | Line 6,463: | ||
["warn_arc_literal_assign"]={ | ["warn_arc_literal_assign"]={ | ||
[a]="assigning ... to a weak ...; object will be released after assignment [-Warc-unsafe-retained-assign]", | [a]="assigning ... to a weak ...; object will be released after assignment [-Warc-unsafe-retained-assign]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={bd,Ac}, | ||
[ | [q]=Ac, | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="assigning (?:array literal|dictionary literal|numeric literal|boxed expression|block literal) to a weak (?:property|variable); object will be released after assignment", | [b]="assigning (?:array literal|dictionary literal|numeric literal|boxed expression|block literal) to a weak (?:property|variable); object will be released after assignment", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | ||
[f]=zc, | [f]=zc, | ||
[i]={"9304da95784c",1356077068,"Extend checkUnsafeAssigns() to also handle assigning an object literal to a weak reference.","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.","Extend checkUnsafeAssigns() to also handle assigning an object literal to a weak reference."}, | ||
[j]={{G,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]={{G,17735,"static bool checkUnsafeAssignLiteral(Sema &S, SourceLocation Loc, Expr *RHS, bool isProperty) {\n // ...\n S.Diag(Loc, diag::warn_arc_literal_assign) << (unsigned)Kind << (isProperty ? 0 : 1) << RHS->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,480: | Line 6,480: | ||
["warn_arc_object_memaccess"]={ | ["warn_arc_object_memaccess"]={ | ||
[a]="... this A call is a pointer to ownership-qualified type B [-Warc-non-pod-memaccess]", | [a]="... this A call is a pointer to ownership-qualified type B [-Warc-non-pod-memaccess]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={bd,"arc-non-pod-memaccess"}, | ||
[ | [q]="arc-non-pod-memaccess", | ||
[e]="%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", | [e]="%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", | ||
[g]= | [g]=t, | ||
[b]="(?:destination for|source of) this (.*?) call is a pointer to ownership\\-qualified type (.*?)", | [b]="(?:destination for|source of) this (.*?) call is a pointer to ownership\\-qualified type (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-non\\-pod\\-memaccess[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-non\\-pod\\-memaccess[^\\]]*\\]", | ||
[f]=zc, | [f]=zc, | ||
[i]={ | [i]={cd,1308178962,Jb,Jb}, | ||
[j]={{G,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]={{G,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 // ...\n for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n // ...\n if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,497: | Line 6,497: | ||
["warn_arc_perform_selector_leaks"]={ | ["warn_arc_perform_selector_leaks"]={ | ||
[a]="performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leaks]", | [a]="performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leaks]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"arc-performSelector-leaks"}, | ||
[ | [q]="arc-performSelector-leaks", | ||
[e]="performSelector may cause a leak because its selector is unknown", | [e]="performSelector may cause a leak because its selector is unknown", | ||
[g]= | [g]=t, | ||
[b]="performSelector may cause a leak because its selector is unknown", | [b]="performSelector may cause a leak because its selector is unknown", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-performSelector\\-leaks[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-performSelector\\-leaks[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors","objc-arc: enforce performSelector rules in rejecting retaining selectors"}, | [i]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors","objc-arc: enforce performSelector rules in rejecting retaining selectors"}, | ||
[j]={{vb,3316,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n // In ARC, forbid the user from sending messages to\n // retain/release/autorelease/dealloc/retainCount explicitly.\n if (getLangOpts().ObjCAutoRefCount) {\n case OMF_performSelector:\n if (Method && NumArgs >= 1) {\n if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n } else {\n Diag(SelLoc, diag::warn_arc_perform_selector_leaks);"}}, | [j]={{vb,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 // ...\n // In ARC, forbid the user from sending messages to\n // retain/release/autorelease/dealloc/retainCount explicitly.\n if (getLangOpts().ObjCAutoRefCount) {\n // ...\n case OMF_performSelector:\n if (Method && NumArgs >= 1) {\n if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n // ...\n } else {\n // ...\n Diag(SelLoc, diag::warn_arc_perform_selector_leaks);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,514: | Line 6,514: | ||
["warn_arc_possible_repeated_use_of_weak"]={ | ["warn_arc_possible_repeated_use_of_weak"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"arc-maybe-repeated-use-of-weak","arc-repeated-use-of-weak"}, | ||
[ | [q]="arc-maybe-repeated-use-of-weak", | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="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", | [b]="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", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-maybe\\-repeated\\-use\\-of\\-weak[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-maybe\\-repeated\\-use\\-of\\-weak[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property.","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.","Add a warning (off by default) for repeated use of the same weak property."}, | ||
[j]={{ | [j]={{L,1472,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n // ...\n // Iterate through the sorted problems and emit warnings for each.\n for (const auto &P : UsesByStmt) {\n // ...\n if (Key.isExactProfile())\n // ...\n else\n DiagKind = diag::warn_arc_possible_repeated_use_of_weak;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,532: | Line 6,532: | ||
["warn_arc_repeated_use_of_weak"]={ | ["warn_arc_repeated_use_of_weak"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"arc-repeated-use-of-weak"}, | ||
[ | [q]="arc-repeated-use-of-weak", | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="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", | [b]="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", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-repeated\\-use\\-of\\-weak[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-repeated\\-use\\-of\\-weak[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property.","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.","Add a warning (off by default) for repeated use of the same weak property."}, | ||
[j]={{ | [j]={{L,1470,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n // ...\n // Iterate through the sorted problems and emit warnings for each.\n for (const auto &P : UsesByStmt) {\n // ...\n if (Key.isExactProfile())\n DiagKind = diag::warn_arc_repeated_use_of_weak;"},{L,2675,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n // ...\n if (S.getLangOpts().ObjCWeak && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, D->getBeginLoc()))"},{G,17797,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n // ...\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 // ...\n if (!VDecl->isInvalidDecl()) {\n // ...\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 // ...\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 // ...\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 // ...\n if (CompoundType.isNull()) {\n // ...\n if (ConvTy == Compatible) {\n // ...\n if (LHSType.getObjCLifetime() == Qualifiers::OCL_Strong || LHSType.isNonWeakInMRRWithObjCWeak(Context)) {\n // ...\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 // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n if (!S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, MemberLoc))"},{vb,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 // ...\n if (getLangOpts().ObjCWeak) {\n if (!isImplicit && Method) {\n if (const ObjCPropertyDecl *Prop = Method->findPropertyDecl()) {\n // ...\n if (IsWeak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc))"},{Ob,856,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n // ...\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 // ...\n if (propType.getObjCLifetime() == Qualifiers::OCL_Weak && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RefExpr->getLocation()))"},{Ob,975,"ExprResult ObjCPropertyOpBuilder::complete(Expr *SyntacticForm) {\n if (isWeakProperty() && !S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, SyntacticForm->getBeginLoc()))"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,550: | Line 6,550: | ||
["warn_arc_retain_cycle"]={ | ["warn_arc_retain_cycle"]={ | ||
[a]="capturing A strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]", | [a]="capturing A strongly in this block is likely to lead to a retain cycle [-Warc-retain-cycles]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={bd,"arc-retain-cycles"}, | ||
[ | [q]="arc-retain-cycles", | ||
[e]="capturing %0 strongly in this block is likely to lead to a retain cycle", | [e]="capturing %0 strongly in this block is likely to lead to a retain cycle", | ||
[g]= | [g]=t, | ||
[b]="capturing (.*?) strongly in this block is likely to lead to a retain cycle", | [b]="capturing (.*?) strongly in this block is likely to lead to a retain cycle", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-retain\\-cycles[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-retain\\-cycles[^\\]]*\\]", | ||
[f]="ARC Retain Cycle", | [f]="ARC Retain Cycle", | ||
[i]={ | [i]={cd,1308178962,Jb,Jb}, | ||
[j]={{G,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]={{G,17473,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n // ...\n S.Diag(capturer->getExprLoc(), diag::warn_arc_retain_cycle) << owner.Variable << capturer->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,567: | Line 6,567: | ||
["warn_arc_retained_assign"]={ | ["warn_arc_retained_assign"]={ | ||
[a]="assigning retained object to ... ...; object will be released after assignment [-Warc-unsafe-retained-assign]", | [a]="assigning retained object to ... ...; object will be released after assignment [-Warc-unsafe-retained-assign]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={bd,Ac}, | ||
[ | [q]=Ac, | ||
[e]="assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment", | [e]="assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment", | ||
[g]= | [g]=t, | ||
[b]="assigning retained object to (?:weak|unsafe_unretained) (?:property|variable); object will be released after assignment", | [b]="assigning retained object to (?:weak|unsafe_unretained) (?:property|variable); object will be released after assignment", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | ||
[f]=zc, | [f]=zc, | ||
[i]={ | [i]={cd,1308178962,Jb,Jb}, | ||
[j]={{G,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();"}}, | [j]={{G,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]={ | [k]={ | ||
Line 6,584: | Line 6,584: | ||
["warn_arc_retained_property_assign"]={ | ["warn_arc_retained_property_assign"]={ | ||
[a]="assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]", | [a]="assigning retained object to unsafe property; object will be released after assignment [-Warc-unsafe-retained-assign]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={bd,Ac}, | ||
[ | [q]=Ac, | ||
[e]="assigning retained object to unsafe property; object will be released after assignment", | [e]="assigning retained object to unsafe property; object will be released after assignment", | ||
[g]= | [g]=t, | ||
[b]="assigning retained object to unsafe property; object will be released after assignment", | [b]="assigning retained object to unsafe property; object will be released after assignment", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warc\\-unsafe\\-retained\\-assign[^\\]]*\\]", | ||
[f]=zc, | [f]=zc, | ||
[i]={"5f98da0ea2bb",1308939934,"objc-arc: Check on a variety of unsafe assignment of retained ","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 ","objc-arc: Check on a variety of unsafe assignment of retained "}, | ||
[j]={{G,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]={{G,17827,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n // ...\n if (PRE) {\n // ...\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,601: | Line 6,601: | ||
["warn_arc_strong_pointer_objc_pointer"]={ | ["warn_arc_strong_pointer_objc_pointer"]={ | ||
[a]="method parameter of type A with no explicit ownership [-Wexplicit-ownership-type]", | [a]="method parameter of type A with no explicit ownership [-Wexplicit-ownership-type]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"explicit-ownership-type"}, | ||
[ | [q]="explicit-ownership-type", | ||
[e]="method parameter of type %0 with no explicit ownership", | [e]="method parameter of type %0 with no explicit ownership", | ||
[g]= | [g]=t, | ||
[b]="method parameter of type (.*?) with no explicit ownership", | [b]="method parameter of type (.*?) with no explicit ownership", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-ownership\\-type[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-ownership\\-type[^\\]]*\\]", | ||
[f]="ARC Restrictions", | [f]="ARC Restrictions", | ||
[i]={"cd278ffa2856",1346370962,"objective-C ARC: under -Wexplicit-ownership-type diagnose those","objective-C ARC: under -Wexplicit-ownership-type diagnose those"}, | [i]={"cd278ffa2856",1346370962,"objective-C ARC: under -Wexplicit-ownership-type diagnose those","objective-C ARC: under -Wexplicit-ownership-type diagnose those"}, | ||
[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();"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,619: | Line 6,619: | ||
["warn_arcmt_nsalloc_realloc"]={ | ["warn_arcmt_nsalloc_realloc"]={ | ||
[a]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", | [a]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", | [e]="[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", | ||
[g]= | [g]=t, | ||
[b]="\\[rewriter\\] call returns pointer to GC managed memory; it will become unmanaged in ARC", | [b]="\\[rewriter\\] call returns pointer to GC managed memory; it will become unmanaged in ARC", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=m, | [f]=m, | ||
[i]={"403a4f9b826d",1400539871,"Get ARCMT/GC-check-warn-nsalloc.m working","Get ARCMT/GC-check-warn-nsalloc.m working"}, | [i]={"403a4f9b826d",1400539871,"Get ARCMT/GC-check-warn-nsalloc.m working","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 // ...\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 // ...\n bool VisitCallExpr(CallExpr *E) {\n // ...\n if (MigrateCtx.isGCOwnedNonObjC(E->getType())) {\n TA.report(E->getBeginLoc(), diag::warn_arcmt_nsalloc_realloc, E->getSourceRange());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 6,634: | Line 6,634: | ||
["warn_argument_invalid_range"]={ | ["warn_argument_invalid_range"]={ | ||
[a]="argument value A is outside the valid range [B, C] [-Wargument-outside-range]", | [a]="argument value A is outside the valid range [B, C] [-Wargument-outside-range]", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=Rc, | ||
[ | [r]={"argument-outside-range"}, | ||
[ | [q]="argument-outside-range", | ||
[e]="argument value %0 is outside the valid range [%1, %2]", | [e]="argument value %0 is outside the valid range [%1, %2]", | ||
[g]= | [g]=ad, | ||
[b]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]", | [b]="argument value (.*?) is outside the valid range \\[(.*?), (.*?)\\]", | ||
[h]=" \\[[^\\]]*\\-Wargument\\-outside\\-range[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Wargument\\-outside\\-range[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"16e6bc23a12e",1529624769,"[x86] Teach the builtin argument range check to allow invalid ranges in","[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","[x86] Teach the builtin argument range check to allow invalid ranges in"}, | ||
[j]={{G,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]={{G,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 // ...\n if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n if (RangeIsError)\n // ...\n else\n // ...\n DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, PDiag(diag::warn_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,651: | Line 6,651: | ||
["warn_argument_undefined_behaviour"]={ | ["warn_argument_undefined_behaviour"]={ | ||
[a]="argument value A will result in undefined behaviour [-Wargument-undefined-behaviour]", | [a]="argument value A will result in undefined behaviour [-Wargument-undefined-behaviour]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"argument-undefined-behaviour"}, | ||
[ | [q]="argument-undefined-behaviour", | ||
[e]="argument value %0 will result in undefined behaviour", | [e]="argument value %0 will result in undefined behaviour", | ||
[g]= | [g]=t, | ||
[b]="argument value (.*?) will result in undefined behaviour", | [b]="argument value (.*?) will result in undefined behaviour", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wargument\\-undefined\\-behaviour[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wargument\\-undefined\\-behaviour[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[j]={{G,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]={{G,4324,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_addex: {\n // ...\n if (ArgValue != 0)\n Diag(TheCall->getBeginLoc(), diag::warn_argument_undefined_behaviour) << ArgValue;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,668: | Line 6,668: | ||
["warn_arith_conv_enum_float"]={ | ["warn_arith_conv_enum_float"]={ | ||
[a]="... ... type A with ... type B [-Wenum-float-conversion]", | [a]="... ... type A with ... type B [-Wenum-float-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Pb,tc,"enum-float-conversion",Sb}, | ||
[ | [q]="enum-float-conversion", | ||
[e]="%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]="%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", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) (?:floating\\-point|enumeration) type (.*?) (?:with|from|and) (?:enumeration|floating\\-point) type (.*?)", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) (?:floating\\-point|enumeration) type (.*?) (?:with|from|and) (?:enumeration|floating\\-point) type (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wenum\\-float\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wenum\\-float\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Ic, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}}, | [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 // ...\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]={ | [k]={ | ||
[ | [ed]={"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"]={ | ||
[a]="... ... type A with ... type B is deprecated [-Wdeprecated-enum-float-conversion]", | [a]="... ... type A with ... type B is deprecated [-Wdeprecated-enum-float-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Pb,Hb,"deprecated-enum-float-conversion",tc,"enum-float-conversion",Sb}, | ||
[ | [q]="deprecated-enum-float-conversion", | ||
[e]="%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]="%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", | ||
[g]= | [g]=t, | ||
[b]="(?: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", | [b]="(?: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", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-float\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-float\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}}, | [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 // ...\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]={ | [k]={ | ||
[ | [ed]={"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"]={ | ||
[a]="... different enumeration types (A and B) [-Wanon-enum-enum-conversion]", | [a]="... different enumeration types (A and B) [-Wanon-enum-enum-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"anon-enum-enum-conversion"}, | ||
[ | [q]="anon-enum-enum-conversion", | ||
[e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | [e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wanon\\-enum\\-enum\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wanon\\-enum\\-enum\\-conversion[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}} | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\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"]={ | ||
[a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-anon-enum-enum-conversion]", | [a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-anon-enum-enum-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"anon-enum-enum-conversion",Hb,"deprecated-anon-enum-enum-conversion"}, | ||
[ | [q]="deprecated-anon-enum-enum-conversion", | ||
[e]="%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]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-anon\\-enum\\-enum\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-anon\\-enum\\-enum\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}} | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\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"]={ | ||
[a]="... different enumeration types (A and B) [-Wenum-enum-conversion]", | [a]="... different enumeration types (A and B) [-Wenum-enum-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Pb,tc,"enum-enum-conversion",Sb}, | ||
[ | [q]="enum-enum-conversion", | ||
[e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | [e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wenum\\-enum\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wenum\\-enum\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Ic, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}}, | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\n } else if (ACK == Sema::ACK_Conditional) {\n // ...\n } else if (ACK == Sema::ACK_Comparison) {\n // ...\n } else {\n DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}}, | ||
[k]={ | [k]={ | ||
[ | [ed]={"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"]={ | ||
[a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-enum-conversion]", | [a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-enum-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Pb,Hb,"deprecated-enum-enum-conversion",tc,"enum-enum-conversion",Sb}, | ||
[ | [q]="deprecated-enum-enum-conversion", | ||
[e]="%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]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-enum\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-enum\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}}, | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\n } else if (ACK == Sema::ACK_Conditional) {\n // ...\n } else if (ACK == Sema::ACK_Comparison) {\n // ...\n } else {\n DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}}, | ||
[k]={ | [k]={ | ||
[ | [ed]={"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"]={ | ||
[a]="call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]", | [a]="call to function without interrupt attribute could clobber interruptee\'s VFP registers [-Wextra]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={m,Z,Xc}, | ||
[ | [q]=Xc, | ||
[e]="call to function without interrupt attribute could clobber interruptee\'s VFP registers", | [e]="call to function without interrupt attribute could clobber interruptee\'s VFP registers", | ||
[g]= | [g]=t, | ||
[b]="call to function without interrupt attribute could clobber interruptee\'s VFP registers", | [b]="call to function without interrupt attribute could clobber interruptee\'s VFP registers", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wextra[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wextra[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"8277c41a899b",1484753471,"Warn when calling a non interrupt function from an interrupt on ARM","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","Warn when calling a non interrupt function from an interrupt on ARM"}, | ||
[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);"}}, | [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 // ...\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 // ...\n if (VFP && (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())) {\n Diag(Fn->getExprLoc(), diag::warn_arm_interrupt_calling_convention);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,784: | Line 6,784: | ||
["warn_array_index_exceeds_bounds"]={ | ["warn_array_index_exceeds_bounds"]={ | ||
[a]="array index A is past the end of the array (that has type B...) [-Warray-bounds]", | [a]="array index A is past the end of the array (that has type B...) [-Warray-bounds]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Nc}, | ||
[ | [q]=Nc, | ||
[e]="array index %0 is past the end of the array (that has type %1%select{|, cast to %3}2)", | [e]="array index %0 is past the end of the array (that has type %1%select{|, cast to %3}2)", | ||
[g]= | [g]=t, | ||
[b]="array index (.*?) is past the end of the array \\(that has type (.*?)(?:|, cast to (.*?))\\)", | [b]="array index (.*?) is past the end of the array \\(that has type (.*?)(?:|, cast to (.*?))\\)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler.","Tweak -Warray-bounds diagnostics based on feedback from Chandler."}, | [i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler.","Tweak -Warray-bounds diagnostics based on feedback from Chandler."}, | ||
[j]={{G,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]={{G,17168,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n // ...\n if (index.isUnsigned() || !index.isNegative()) {\n // ...\n unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,801: | Line 6,801: | ||
["warn_array_index_exceeds_max_addressable_bounds"]={ | ["warn_array_index_exceeds_max_addressable_bounds"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Nc}, | ||
[ | [q]=Nc, | ||
[e]="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]="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)", | ||
[g]= | [g]=t, | ||
[b]="array index (.*?) refers past the last possible element for an array in (.*?)\\-bit address space containing (.*?)\\-bit \\((.*?)\\-byte\\) elements \\(max possible (.*?) element(.*?)\\)", | [b]="array index (.*?) refers past the last possible element for an array in (.*?)\\-bit address space containing (.*?)\\-bit \\((.*?)\\-byte\\) elements \\(max possible (.*?) element(.*?)\\)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays","[Sema] Address-space sensitive index check for unbounded arrays"}, | [i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays","[Sema] Address-space sensitive index check for unbounded arrays"}, | ||
[j]={{G,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]={{G,17078,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n // ...\n if (IsUnboundedArray) {\n // ...\n if (index.isUnsigned() || !index.isNegative()) {\n // ...\n unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,818: | Line 6,818: | ||
["warn_array_index_precedes_bounds"]={ | ["warn_array_index_precedes_bounds"]={ | ||
[a]="array index A is before the beginning of the array [-Warray-bounds]", | [a]="array index A is before the beginning of the array [-Warray-bounds]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Nc}, | ||
[ | [q]=Nc, | ||
[e]="array index %0 is before the beginning of the array", | [e]="array index %0 is before the beginning of the array", | ||
[g]= | [g]=t, | ||
[b]="array index (.*?) is before the beginning of the array", | [b]="array index (.*?) is before the beginning of the array", | ||
[h]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler.","Tweak -Warray-bounds diagnostics based on feedback from Chandler."}, | [i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler.","Tweak -Warray-bounds diagnostics based on feedback from Chandler."}, | ||
[j]={{G,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]={{G,17178,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n // ...\n if (index.isUnsigned() || !index.isNegative()) {\n // ...\n } else {\n unsigned DiagID = diag::warn_array_index_precedes_bounds;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,835: | Line 6,835: | ||
["warn_asm_label_on_auto_decl"]={ | ["warn_asm_label_on_auto_decl"]={ | ||
[a]="ignored asm label \'A\' on automatic variable", | [a]="ignored asm label \'A\' on automatic variable", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="ignored asm label \'%0\' on automatic variable", | [e]="ignored asm label \'%0\' on automatic variable", | ||
[g]= | [g]=t, | ||
[b]="ignored asm label \'(.*?)\' on automatic variable", | [b]="ignored asm label \'(.*?)\' on automatic variable", | ||
[h]=Ab, | [h]=Ab, | ||
[f]="Inline Assembly Issue", | [f]="Inline Assembly Issue", | ||
[i]={"133922318641",1294759012,"Added warning about invalid register specification for local variables.","Added warning about invalid register specification for local variables."}, | [i]={"133922318641",1294759012,"Added warning about invalid register specification for local variables.","Added warning about invalid register specification for local variables."}, | ||
[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;"}}, | [j]={{w,7939,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n // Handle GNU asm-label extension (encoded as an attribute).\n if (Expr *E = (Expr *)D.getAsmLabel()) {\n // ...\n if (S->getFnParent() != nullptr) {\n // ...\n case SC_None:\n case SC_Auto:\n Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 6,850: | Line 6,850: | ||
["warn_asm_mismatched_size_modifier"]={ | ["warn_asm_mismatched_size_modifier"]={ | ||
[a]="value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]", | [a]="value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"asm","asm-operand-widths"}, | ||
[ | [q]="asm-operand-widths", | ||
[e]="value size does not match register size specified by the constraint and modifier", | [e]="value size does not match register size specified by the constraint and modifier", | ||
[g]= | [g]=t, | ||
[b]="value size does not match register size specified by the constraint and modifier", | [b]="value size does not match register size specified by the constraint and modifier", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wasm\\-operand\\-widths[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wasm\\-operand\\-widths[^\\]]*\\]", | ||
[f]="Inline Assembly Issue", | [f]="Inline Assembly Issue", | ||
[i]={"9d1ee1175de3",1351207728,"Recommit Eric\'s code to validate ASM string\'s constraints and modifiers.","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.","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 // ...\n // Validate constraints and modifiers.\n for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n // ...\n if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n targetDiag(Exprs[ConstraintIdx]->getBeginLoc(), diag::warn_asm_mismatched_size_modifier);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,867: | Line 6,867: | ||
["warn_assume_aligned_too_great"]={ | ["warn_assume_aligned_too_great"]={ | ||
[a]="requested alignment must be A bytes or smaller; maximum alignment assumed [-Wbuiltin-assume-aligned-alignment]", | [a]="requested alignment must be A bytes or smaller; maximum alignment assumed [-Wbuiltin-assume-aligned-alignment]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"builtin-assume-aligned-alignment"}, | ||
[ | [q]="builtin-assume-aligned-alignment", | ||
[e]="requested alignment must be %0 bytes or smaller; maximum alignment assumed", | [e]="requested alignment must be %0 bytes or smaller; maximum alignment assumed", | ||
[g]= | [g]=t, | ||
[b]="requested alignment must be (.*?) bytes or smaller; maximum alignment assumed", | [b]="requested alignment must be (.*?) bytes or smaller; maximum alignment assumed", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-assume\\-aligned\\-alignment[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-assume\\-aligned\\-alignment[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[j]={{G,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;"},{G,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;"}}, | [j]={{G,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 // ...\n if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n // ...\n if (!Arg->isValueDependent()) {\n // ...\n if (Arg->EvaluateAsInt(Align, Context)) {\n // ...\n if (I > Sema::MaximumAlignment)\n Diag(Arg->getExprLoc(), diag::warn_assume_aligned_too_great) << Arg->getSourceRange() << Sema::MaximumAlignment;"},{G,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 // ...\n // We can\'t check the value of a dependent argument.\n if (!SecondArg->isValueDependent()) {\n // ...\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 // ...\n if (!E->isValueDependent()) {\n // ...\n if (*I > Sema::MaximumAlignment)\n Diag(CI.getLoc(), diag::warn_assume_aligned_too_great) << CI.getRange() << Sema::MaximumAlignment;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,884: | Line 6,884: | ||
["warn_assume_attribute_string_unknown"]={ | ["warn_assume_attribute_string_unknown"]={ | ||
[a]="unknown assumption string \'A\'; attribute is potentially ignored [-Wunknown-assumption]", | [a]="unknown assumption string \'A\'; attribute is potentially ignored [-Wunknown-assumption]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"unknown-assumption"}, | ||
[ | [q]="unknown-assumption", | ||
[e]="unknown assumption string \'%0\'; attribute is potentially ignored", | [e]="unknown assumption string \'%0\'; attribute is potentially ignored", | ||
[g]= | [g]=t, | ||
[b]="unknown assumption string \'(.*?)\'; attribute is potentially ignored", | [b]="unknown assumption string \'(.*?)\'; attribute is potentially ignored", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wunknown\\-assumption[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wunknown\\-assumption[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[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;"}}, | [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 // ...\n if (!Suggestion.empty())\n // ...\n else\n S.Diag(Loc, diag::warn_assume_attribute_string_unknown) << AssumptionStr;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,901: | Line 6,901: | ||
["warn_assume_attribute_string_unknown_suggested"]={ | ["warn_assume_attribute_string_unknown_suggested"]={ | ||
[a]="unknown assumption string \'A\' may be misspelled; attribute is potentially ignored, did you mean \'B\'? [-Wmisspelled-assumption]", | [a]="unknown assumption string \'A\' may be misspelled; attribute is potentially ignored, did you mean \'B\'? [-Wmisspelled-assumption]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"misspelled-assumption"}, | ||
[ | [q]="misspelled-assumption", | ||
[e]="unknown assumption string \'%0\' may be misspelled; attribute is potentially ignored, did you mean \'%1\'?", | [e]="unknown assumption string \'%0\' may be misspelled; attribute is potentially ignored, did you mean \'%1\'?", | ||
[g]= | [g]=t, | ||
[b]="unknown assumption string \'(.*?)\' may be misspelled; attribute is potentially ignored, did you mean \'(.*?)\'\\?", | [b]="unknown assumption string \'(.*?)\' may be misspelled; attribute is potentially ignored, did you mean \'(.*?)\'\\?", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wmisspelled\\-assumption[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wmisspelled\\-assumption[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[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;"}}, | [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 // ...\n if (!Suggestion.empty())\n S.Diag(Loc, diag::warn_assume_attribute_string_unknown_suggested) << AssumptionStr << Suggestion;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,918: | Line 6,918: | ||
["warn_assume_side_effects"]={ | ["warn_assume_side_effects"]={ | ||
[a]="the argument to A has side effects that will be discarded [-Wassume]", | [a]="the argument to A has side effects that will be discarded [-Wassume]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"assume"}, | ||
[ | [q]="assume", | ||
[e]="the argument to %0 has side effects that will be discarded", | [e]="the argument to %0 has side effects that will be discarded", | ||
[g]= | [g]=t, | ||
[b]="the argument to (.*?) has side effects that will be discarded", | [b]="the argument to (.*?) has side effects that will be discarded", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wassume[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wassume[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"f04173358502",1405607155,"Add an __assume side-effects warning","Add an __assume side-effects warning"}, | [i]={"f04173358502",1405607155,"Add an __assume side-effects warning","Add an __assume side-effects warning"}, | ||
[j]={{G,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]={{G,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 // ...\n if (Arg->HasSideEffects(Context))\n Diag(Arg->getBeginLoc(), diag::warn_assume_side_effects) << Arg->getSourceRange() << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,935: | Line 6,935: | ||
["warn_at_available_unchecked_use"]={ | ["warn_at_available_unchecked_use"]={ | ||
[a]="... does not guard availability here; use if (...) instead [-Wunsupported-availability-guard]", | [a]="... does not guard availability here; use if (...) instead [-Wunsupported-availability-guard]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"unsupported-availability-guard"}, | ||
[ | [q]="unsupported-availability-guard", | ||
[e]="%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", | [e]="%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", | ||
[g]= | [g]=t, | ||
[b]="(?:@available|__builtin_available) does not guard availability here; use if \\((?:@available|__builtin_available)\\) instead", | [b]="(?:@available|__builtin_available) does not guard availability here; use if \\((?:@available|__builtin_available)\\) instead", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-availability\\-guard[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-availability\\-guard[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"0a484baa8516",1495638929,"Warn about uses of `@available` that can\'t suppress the","Warn about uses of `@available` that can\'t suppress the"}, | [i]={"0a484baa8516",1495638929,"Warn about uses of `@available` that can\'t suppress the","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 // ...\n bool VisitObjCAvailabilityCheckExpr(ObjCAvailabilityCheckExpr *E) {\n SemaRef.Diag(E->getBeginLoc(), diag::warn_at_available_unchecked_use) << (!SemaRef.getLangOpts().ObjC);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,952: | Line 6,952: | ||
["warn_atimport_in_framework_header"]={ | ["warn_atimport_in_framework_header"]={ | ||
[a]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules [-Watimport-in-framework-header]", | [a]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules [-Watimport-in-framework-header]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"atimport-in-framework-header"}, | ||
[ | [q]="atimport-in-framework-header", | ||
[e]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules", | [e]="use of \'@import\' in framework header is discouraged, including this header requires -fmodules", | ||
[g]= | [g]=t, | ||
[b]="use of \'@import\' in framework header is discouraged, including this header requires \\-fmodules", | [b]="use of \'@import\' in framework header is discouraged, including this header requires \\-fmodules", | ||
[h]=" \\[(?:\\-Werror,)?\\-Watimport\\-in\\-framework\\-header[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Watimport\\-in\\-framework\\-header[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"03e0d2d82be7",1530131376,"[Modules][ObjC] Warn on the use of \'@import\' in framework headers","[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","[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 // ...\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 // ...\n if (FE && llvm::sys::path::parent_path(FE->getDir().getName()).endswith(\".framework\"))\n Diags.Report(AtLoc, diag::warn_atimport_in_framework_header);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,969: | Line 6,969: | ||
["warn_atl_uuid_deprecated"]={ | ["warn_atl_uuid_deprecated"]={ | ||
[a]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead [-Wdeprecated-declarations]", | [a]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead [-Wdeprecated-declarations]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Hb,"deprecated-declarations"}, | ||
[ | [q]="deprecated-declarations", | ||
[e]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead", | [e]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead", | ||
[g]= | [g]=t, | ||
[b]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead", | [b]="specifying \'uuid\' as an ATL attribute is deprecated; use __declspec instead", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={"469891e7a293",1494003956,"Warn that the [] spelling of uuid(...) is deprecated.","Warn that the [] spelling of uuid(...) is deprecated."}, | [i]={"469891e7a293",1494003956,"Warn that the [] spelling of uuid(...) is deprecated.","Warn that the [] spelling of uuid(...) is deprecated."}, | ||
[j]={{v,7040,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // FIXME: It\'d be nice to also emit a fixit removing uuid(...) (and, if it\'s\n // the only thing in the [] list, the [] too), and add an insertion of\n // __declspec(uuid(...)). But sadly, neither the SourceLocs of the commas\n // separating attributes nor of the [ and the ] are in the AST.\n // Cf \"SourceLocations of attribute list delimiters - [[ ... , ... ]] etc\"\n // on cfe-dev.\n if (AL.isMicrosoftAttribute()) // Check for [uuid(...)] spelling.\n S.Diag(AL.getLoc(), diag::warn_atl_uuid_deprecated);"}}, | [j]={{v,7040,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,986: | Line 6,986: | ||
["warn_atomic_implicit_seq_cst"]={ | ["warn_atomic_implicit_seq_cst"]={ | ||
[a]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]", | [a]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary [-Watomic-implicit-seq-cst]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"atomic-implicit-seq-cst"}, | ||
[ | [q]="atomic-implicit-seq-cst", | ||
[e]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary", | [e]="implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary", | ||
[g]= | [g]=t, | ||
[b]="implicit use of sequentially\\-consistent atomic may incur stronger memory barriers than necessary", | [b]="implicit use of sequentially\\-consistent atomic may incur stronger memory barriers than necessary", | ||
[h]=" \\[(?:\\-Werror,)?\\-Watomic\\-implicit\\-seq\\-cst[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Watomic\\-implicit\\-seq\\-cst[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"e77b48b07840",1536612176,"Implement -Watomic-implicit-seq-cst","Implement -Watomic-implicit-seq-cst"}, | [i]={"e77b48b07840",1536612176,"Implement -Watomic-implicit-seq-cst","Implement -Watomic-implicit-seq-cst"}, | ||
[j]={{G,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();"},{G,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();"},{G,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);"},{G,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);"},{G,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);"},{G,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);"},{G,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]={{G,2356,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case Builtin::BI__sync_synchronize:\n Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) << TheCall->getCallee()->getSourceRange();"},{G,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 // ...\n Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) << Callee->getSourceRange();"},{G,14185,"/// Analyze the given simple or compound assignment for warning-worthy\n/// operations.\nstatic void AnalyzeAssignment(Sema &S, BinaryOperator *E) {\n // ...\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);"},{G,14356,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n // ...\n if (E->getLHS()->getType()->isAtomicType())\n S.Diag(E->getOperatorLoc(), diag::warn_atomic_implicit_seq_cst);"},{G,14673,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n // ...\n if (Source->isAtomicType())\n S.Diag(E->getExprLoc(), diag::warn_atomic_implicit_seq_cst);"},{G,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 // ...\n // Skip past explicit casts.\n if (auto *CE = dyn_cast<ExplicitCastExpr>(E)) {\n // ...\n if (!CE->getType()->isVoidType() && E->getType()->isAtomicType())\n S.Diag(E->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{G,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 // ...\n if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E)) {\n if (U->getOpcode() == UO_LNot) {\n // ...\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]={ | [k]={ | ||
["clang/test/Sema/atomic-implicit-seq_cst.c"]={ | ["clang/test/Sema/atomic-implicit-seq_cst.c"]={ | ||
Line 7,081: | Line 7,081: | ||
["warn_atomic_member_access"]={ | ["warn_atomic_member_access"]={ | ||
[a]="accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]", | [a]="accessing a member of an atomic structure or union is undefined behavior [-Watomic-access]", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=Rc, | ||
[ | [r]={"atomic-access"}, | ||
[ | [q]="atomic-access", | ||
[e]="accessing a member of an atomic structure or union is undefined behavior", | [e]="accessing a member of an atomic structure or union is undefined behavior", | ||
[g]= | [g]=ad, | ||
[b]="accessing a member of an atomic structure or union is undefined behavior", | [b]="accessing a member of an atomic structure or union is undefined behavior", | ||
[h]=" \\[[^\\]]*\\-Watomic\\-access[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Watomic\\-access[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | [i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | ||
[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,098: | Line 7,098: | ||
["warn_atomic_op_has_invalid_memory_order"]={ | ["warn_atomic_op_has_invalid_memory_order"]={ | ||
[a]="memory order argument to atomic operation is invalid [-Watomic-memory-ordering]", | [a]="memory order argument to atomic operation is invalid [-Watomic-memory-ordering]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"atomic-memory-ordering"}, | ||
[ | [q]="atomic-memory-ordering", | ||
[e]="memory order argument to atomic operation is invalid", | [e]="memory order argument to atomic operation is invalid", | ||
[g]= | [g]=t, | ||
[b]="memory order argument to atomic operation is invalid", | [b]="memory order argument to atomic operation is invalid", | ||
[h]=" \\[(?:\\-Werror,)?\\-Watomic\\-memory\\-ordering[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Watomic\\-memory\\-ordering[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"c83472e0ff4c",1394537710,"Sema: demote invalid atomic ordering message to warning.","Sema: demote invalid atomic ordering message to warning."}, | [i]={"c83472e0ff4c",1394537710,"Sema: demote invalid atomic ordering message to warning.","Sema: demote invalid atomic ordering message to warning."}, | ||
[j]={{G,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();"},{G,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();"},{G,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]={{G,4449,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\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();"},{G,4456,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case llvm::AtomicOrderingCABI::relaxed:\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();"},{G,7427,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,115: | Line 7,115: | ||
["warn_atomic_op_misaligned"]={ | ["warn_atomic_op_misaligned"]={ | ||
[a]="misaligned atomic operation may incur significant performance penalty; the expected alignment (A bytes) exceeds the actual alignment (B bytes) [-Watomic-alignment]", | [a]="misaligned atomic operation may incur significant performance penalty; the expected alignment (A bytes) exceeds the actual alignment (B bytes) [-Watomic-alignment]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"atomic-alignment"}, | ||
[ | [q]="atomic-alignment", | ||
[e]="misaligned atomic operation may incur significant performance penalty; the expected alignment (%0 bytes) exceeds the actual alignment (%1 bytes)", | [e]="misaligned atomic operation may incur significant performance penalty; the expected alignment (%0 bytes) exceeds the actual alignment (%1 bytes)", | ||
[g]= | [g]=t, | ||
[b]="misaligned atomic operation may incur significant performance penalty; the expected alignment \\((.*?) bytes\\) exceeds the actual alignment \\((.*?) bytes\\)", | [b]="misaligned atomic operation may incur significant performance penalty; the expected alignment \\((.*?) bytes\\) exceeds the actual alignment \\((.*?) bytes\\)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"9dc1d0c74eb1",1524471384,"[Atomics] warn about atomic accesses using libcalls","[Atomics] warn about atomic accesses using libcalls"}, | [i]={"9dc1d0c74eb1",1524471384,"[Atomics] warn about atomic accesses using libcalls","[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 // ...\n if (Misaligned) {\n Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned) << (int)TInfo.Width.getQuantity() << (int)Ptr.getAlignment().getQuantity();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,132: | Line 7,132: | ||
["warn_atomic_op_oversized"]={ | ["warn_atomic_op_oversized"]={ | ||
[a]="large atomic operation may incur significant performance penalty; the access size (A bytes) exceeds the max lock-free size (B bytes) [-Watomic-alignment]", | [a]="large atomic operation may incur significant performance penalty; the access size (A bytes) exceeds the max lock-free size (B bytes) [-Watomic-alignment]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"atomic-alignment"}, | ||
[ | [q]="atomic-alignment", | ||
[e]="large atomic operation may incur significant performance penalty; the access size (%0 bytes) exceeds the max lock-free size (%1 bytes)", | [e]="large atomic operation may incur significant performance penalty; the access size (%0 bytes) exceeds the max lock-free size (%1 bytes)", | ||
[g]= | [g]=t, | ||
[b]="large atomic operation may incur significant performance penalty; the access size \\((.*?) bytes\\) exceeds the max lock\\-free size \\((.*?) bytes\\)", | [b]="large atomic operation may incur significant performance penalty; the access size \\((.*?) bytes\\) exceeds the max lock\\-free size \\((.*?) bytes\\)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Watomic\\-alignment[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"e18c6ef6b41a",1596564601,"[clang] improve diagnostics for misaligned and large atomics","[clang] improve diagnostics for misaligned and large atomics"}, | [i]={"e18c6ef6b41a",1596564601,"[clang] improve diagnostics for misaligned and large atomics","[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 // ...\n if (Oversized) {\n Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_oversized) << (int)TInfo.Width.getQuantity() << (int)MaxInlineWidth.getQuantity();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,149: | Line 7,149: | ||
["warn_atomic_property_rule"]={ | ["warn_atomic_property_rule"]={ | ||
[a]="writable atomic property A cannot pair a synthesized ... with a user defined ... [-Watomic-property-with-user-defined-accessor]", | [a]="writable atomic property A cannot pair a synthesized ... with a user defined ... [-Watomic-property-with-user-defined-accessor]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"atomic-property-with-user-defined-accessor"}, | ||
[ | [q]="atomic-property-with-user-defined-accessor", | ||
[e]="writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", | [e]="writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", | ||
[g]= | [g]=t, | ||
[b]="writable atomic property (.*?) cannot pair a synthesized (?:getter|setter) with a user defined (?:getter|setter)", | [b]="writable atomic property (.*?) cannot pair a synthesized (?:getter|setter) with a user defined (?:getter|setter)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Watomic\\-property\\-with\\-user\\-defined\\-accessor[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Watomic\\-property\\-with\\-user\\-defined\\-accessor[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"13e0c90fc1a9",1257979211,"writable atomic property\'s setter/getter must be in \'lock\' step of","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","writable atomic property\'s setter/getter must be in \'lock\' step of"}, | ||
[j]={{F,2228,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n if ((bool)GetterMethod ^ (bool)SetterMethod) {\n Diag(MethodLoc, diag::warn_atomic_property_rule) << Property->getIdentifier() << (GetterMethod != nullptr) << (SetterMethod != nullptr);"}}, | [j]={{F,2228,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n // ...\n for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n // ...\n if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n // ...\n if ((bool)GetterMethod ^ (bool)SetterMethod) {\n // ...\n Diag(MethodLoc, diag::warn_atomic_property_rule) << Property->getIdentifier() << (GetterMethod != nullptr) << (SetterMethod != nullptr);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,166: | Line 7,166: | ||
["warn_attr_abi_tag_namespace"]={ | ["warn_attr_abi_tag_namespace"]={ | ||
[a]="\'abi_tag\' attribute on ... namespace ignored [-Wignored-attributes]", | [a]="\'abi_tag\' attribute on ... namespace ignored [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'abi_tag\' attribute on %select{non-inline|anonymous}0 namespace ignored", | [e]="\'abi_tag\' attribute on %select{non-inline|anonymous}0 namespace ignored", | ||
[g]= | [g]=t, | ||
[b]="\'abi_tag\' attribute on (?:non\\-inline|anonymous) namespace ignored", | [b]="\'abi_tag\' attribute on (?:non\\-inline|anonymous) namespace ignored", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support"}, | [i]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support"}, | ||
[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;"}}, | [j]={{v,7331,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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 // ...\n if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n // ...\n if (NS->isAnonymousNamespace()) {\n S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 1;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,183: | Line 7,183: | ||
["warn_attr_on_unconsumable_class"]={ | ["warn_attr_on_unconsumable_class"]={ | ||
[a]="consumed analysis attribute is attached to member of class A which isn\'t marked as consumable [-Wconsumed]", | [a]="consumed analysis attribute is attached to member of class A which isn\'t marked as consumable [-Wconsumed]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"consumed"}, | ||
[ | [q]="consumed", | ||
[e]="consumed analysis attribute is attached to member of class %0 which isn\'t marked as consumable", | [e]="consumed analysis attribute is attached to member of class %0 which isn\'t marked as consumable", | ||
[g]= | [g]=t, | ||
[b]="consumed analysis attribute is attached to member of class (.*?) which isn\'t marked as consumable", | [b]="consumed analysis attribute is attached to member of class (.*?) which isn\'t marked as consumable", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute.","Consumed analysis: add \'consumable\' class attribute."}, | [i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute.","Consumed analysis: add \'consumable\' class attribute."}, | ||
[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;"}}, | [j]={{v,1231,"static bool checkForConsumableClass(Sema &S, const CXXMethodDecl *MD, const ParsedAttr &AL) {\n // ...\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]={ | [k]={ | ||
[ | [Tc]={"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"]={ | ||
[a]="A attribute cannot be applied to this declaration [-Wswift-name-attribute]", | [a]="A attribute cannot be applied to this declaration [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute cannot be applied to this declaration", | [e]="%0 attribute cannot be applied to this declaration", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute cannot be applied to this declaration", | [b]="(.*?) attribute cannot be applied to this declaration", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}} | [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 // ...\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 // ...\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"]={ | ||
[a]="A attribute cannot be applied to a ... with no parameters [-Wswift-name-attribute]", | [a]="A attribute cannot be applied to a ... with no parameters [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute cannot be applied to a %select{function|method}1 with no parameters", | [e]="%0 attribute cannot be applied to a %select{function|method}1 with no parameters", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute cannot be applied to a (?:function|method) with no parameters", | [b]="(.*?) attribute cannot be applied to a (?:function|method) with no parameters", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[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);"}}, | [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 // ...\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]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]", | [a]="A attribute argument must be a string literal specifying a Swift function name [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute argument must be a string literal specifying a Swift function name", | [e]="%0 attribute argument must be a string literal specifying a Swift function name", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute argument must be a string literal specifying a Swift function name", | [b]="(.*?) attribute argument must be a string literal specifying a Swift function name", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\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 // ...\n if (Parameters.back() != \':\') {\n S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"}}, | ||
[k]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]", | [a]="A attribute for getter must not have any parameters besides \'self:\' [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute for getter must not have any parameters besides \'self:\'", | [e]="%0 attribute for getter must not have any parameters besides \'self:\'", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute for getter must not have any parameters besides \'self\\:\'", | [b]="(.*?) attribute for getter must not have any parameters besides \'self\\:\'", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n // Check the number of parameters for a getter/setter.\n if (IsGetter || IsSetter) {\n // ...\n unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}}, | ||
[k]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute has invalid identifier for the ... name [-Wswift-name-attribute]", | [a]="A attribute has invalid identifier for the ... name [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute has invalid identifier for the %select{base|context|parameter}1 name", | [e]="%0 attribute has invalid identifier for the %select{base|context|parameter}1 name", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute has invalid identifier for the (?:base|context|parameter) name", | [b]="(.*?) attribute has invalid identifier for the (?:base|context|parameter) name", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n if (BaseName.empty()) {\n // ...\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 // ...\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 // ...\n do {\n // ...\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 // ...\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 // ...\n if (BaseName.empty()) {\n // ...\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 // ...\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 // ...\n if (!isValidAsciiIdentifier(BaseName)) {\n Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"}}, | ||
[k]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute is missing parameter label clause [-Wswift-name-attribute]", | [a]="A attribute is missing parameter label clause [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute is missing parameter label clause", | [e]="%0 attribute is missing parameter label clause", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute is missing parameter label clause", | [b]="(.*?) attribute is missing parameter label clause", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}} | [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 // ...\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"]={ | ||
[a]="A attribute cannot specify more than one \'self:\' parameter [-Wswift-name-attribute]", | [a]="A attribute cannot specify more than one \'self:\' parameter [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute cannot specify more than one \'self:\' parameter", | [e]="%0 attribute cannot specify more than one \'self:\' parameter", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute cannot specify more than one \'self\\:\' parameter", | [b]="(.*?) attribute cannot specify more than one \'self\\:\' parameter", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}} | [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 // ...\n do {\n // ...\n if (IsMember && CurrentParam == \"self\") {\n // ...\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"]={ | ||
[a]="too ... parameters in the signature specified by the A attribute (expected B; got C) [-Wswift-name-attribute]", | [a]="too ... parameters in the signature specified by the A attribute (expected B; got C) [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="too %select{few|many}0 parameters in the signature specified by the %1 attribute (expected %2; got %3)", | [e]="too %select{few|many}0 parameters in the signature specified by the %1 attribute (expected %2; got %3)", | ||
[g]= | [g]=t, | ||
[b]="too (?:few|many) parameters in the signature specified by the (.*?) attribute \\(expected (.*?); got (.*?)\\)", | [b]="too (?:few|many) parameters in the signature specified by the (.*?) attribute \\(expected (.*?); got (.*?)\\)", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n if (!ParamCountValid) {\n Diag(Loc, diag::warn_attr_swift_name_num_params) << (SwiftParamCount > ParamCount) << AL << ParamCount << SwiftParamCount;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,328: | Line 7,328: | ||
["warn_attr_swift_name_setter_parameters"]={ | ["warn_attr_swift_name_setter_parameters"]={ | ||
[a]="A attribute for setter must have one parameter for new value [-Wswift-name-attribute]", | [a]="A attribute for setter must have one parameter for new value [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute for setter must have one parameter for new value", | [e]="%0 attribute for setter must have one parameter for new value", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute for setter must have one parameter for new value", | [b]="(.*?) attribute for setter must have one parameter for new value", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n if (Parameters.empty()) {\n // ...\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 // ...\n // Check the number of parameters for a getter/setter.\n if (IsGetter || IsSetter) {\n // ...\n unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}}, | ||
[k]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute for \'subscript\' getter cannot have a \'newValue:\' parameter [-Wswift-name-attribute]", | [a]="A attribute for \'subscript\' getter cannot have a \'newValue:\' parameter [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute for \'subscript\' getter cannot have a \'newValue:\' parameter", | [e]="%0 attribute for \'subscript\' getter cannot have a \'newValue:\' parameter", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute for \'subscript\' getter cannot have a \'newValue\\:\' parameter", | [b]="(.*?) attribute for \'subscript\' getter cannot have a \'newValue\\:\' parameter", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n // Check the number of parameters for a getter/setter.\n if (IsGetter || IsSetter) {\n // ...\n // Subscripts may have additional parameters beyond the expected params for\n // the index.\n if (IsSubscript) {\n // ...\n // A subscript setter must explicitly label its newValue parameter to\n // distinguish it from index parameters.\n if (IsSetter) {\n // ...\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]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute for \'subscript\' must ... [-Wswift-name-attribute]", | [a]="A attribute for \'subscript\' must ... [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute for \'subscript\' must %select{be a getter or setter|have at least one parameter|have a \'self:\' parameter}1", | [e]="%0 attribute for \'subscript\' must %select{be a getter or setter|have at least one parameter|have a \'self:\' parameter}1", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute for \'subscript\' must (?:be a getter or setter|have at least one parameter|have a \'self\\:\' parameter)", | [b]="(.*?) attribute for \'subscript\' must (?:be a getter or setter|have at least one parameter|have a \'self\\:\' parameter)", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\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 // ...\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 // ...\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]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters [-Wswift-name-attribute]", | [a]="A attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters", | [e]="%0 attribute for \'subscript\' setter cannot have multiple \'newValue:\' parameters", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute for \'subscript\' setter cannot have multiple \'newValue\\:\' parameters", | [b]="(.*?) attribute for \'subscript\' setter cannot have multiple \'newValue\\:\' parameters", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n // Check the number of parameters for a getter/setter.\n if (IsGetter || IsSetter) {\n // ...\n // Subscripts may have additional parameters beyond the expected params for\n // the index.\n if (IsSubscript) {\n // ...\n // A subscript setter must explicitly label its newValue parameter to\n // distinguish it from index parameters.\n if (IsSetter) {\n // ...\n if (NewValueCount > 1) {\n S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_multiple_newValues) << AL;"}}, | ||
[k]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="A attribute for \'subscript\' setter must have a \'newValue:\' parameter [-Wswift-name-attribute]", | [a]="A attribute for \'subscript\' setter must have a \'newValue:\' parameter [-Wswift-name-attribute]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={W}, | ||
[ | [q]=W, | ||
[e]="%0 attribute for \'subscript\' setter must have a \'newValue:\' parameter", | [e]="%0 attribute for \'subscript\' setter must have a \'newValue:\' parameter", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute for \'subscript\' setter must have a \'newValue\\:\' parameter", | [b]="(.*?) attribute for \'subscript\' setter must have a \'newValue\\:\' parameter", | ||
[h]=ub, | [h]=ub, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [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 // ...\n // Check the number of parameters for a getter/setter.\n if (IsGetter || IsSetter) {\n // ...\n // Subscripts may have additional parameters beyond the expected params for\n // the index.\n if (IsSubscript) {\n // ...\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]={ | [k]={ | ||
[ | [Kb]={"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"]={ | ||
[a]="multiple identical address spaces specified for type [-Wduplicate-decl-specifier]", | [a]="multiple identical address spaces specified for type [-Wduplicate-decl-specifier]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"duplicate-decl-specifier"}, | ||
[ | [q]="duplicate-decl-specifier", | ||
[e]="multiple identical address spaces specified for type", | [e]="multiple identical address spaces specified for type", | ||
[g]= | [g]=t, | ||
[b]="multiple identical address spaces specified for type", | [b]="multiple identical address spaces specified for type", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"f29d777f847b",1529483484,"[Sema] Allow creating types with multiple of the same addrspace.","[Sema] Allow creating types with multiple of the same addrspace."}, | [i]={"f29d777f847b",1529483484,"[Sema] Allow creating types with multiple of the same addrspace.","[Sema] Allow creating types with multiple of the same addrspace."}, | ||
[j]={{ | [j]={{ib,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 // ...\n S.Diag(AttrLoc, diag::warn_attribute_address_multiple_identical_qualifiers);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,430: | Line 7,430: | ||
["warn_attribute_after_definition_ignored"]={ | ["warn_attribute_after_definition_ignored"]={ | ||
[a]="attribute A after definition is ignored [-Wignored-attributes]", | [a]="attribute A after definition is ignored [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute %0 after definition is ignored", | [e]="attribute %0 after definition is ignored", | ||
[g]= | [g]=t, | ||
[b]="attribute (.*?) after definition is ignored", | [b]="attribute (.*?) after definition is ignored", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"06e1b13209a8",1342067550,"Ignore visibility attributes after definitions. This matches newer (4.7) gcc\'s","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","Ignore visibility attributes after definitions. This matches newer (4.7) gcc\'s"}, | ||
[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;"}}, | [j]={{z,10383,"void Sema::ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc, Decl *TagDecl, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &AttrList) {\n // ...\n for (const ParsedAttr &AL : AttrList) {\n // ...\n Diag(AL.getLoc(), diag::warn_attribute_after_definition_ignored) << AL;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/attr-visibility.cpp"]={"clang/test/SemaCXX/attr-visibility.cpp:20:16: warning: attribute \'visibility\' after definition is ignored [-Wignored-attributes]"} | ["clang/test/SemaCXX/attr-visibility.cpp"]={"clang/test/SemaCXX/attr-visibility.cpp:20:16: warning: attribute \'visibility\' after definition is ignored [-Wignored-attributes]"} | ||
Line 7,447: | Line 7,447: | ||
["warn_attribute_argument_n_negative"]={ | ["warn_attribute_argument_n_negative"]={ | ||
[a]="A attribute parameter B is negative and will be ignored [-Wcuda-compat]", | [a]="A attribute parameter B is negative and will be ignored [-Wcuda-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"cuda-compat"}, | ||
[ | [q]="cuda-compat", | ||
[e]="%0 attribute parameter %1 is negative and will be ignored", | [e]="%0 attribute parameter %1 is negative and will be ignored", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute parameter (.*?) is negative and will be ignored", | [b]="(.*?) attribute parameter (.*?) is negative and will be ignored", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"7093e4064116",1429656954,"[cuda] Allow using integral non-type template parameters as launch_bounds attribute arguments.","[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.","[cuda] Allow using integral non-type template parameters as launch_bounds attribute arguments."}, | ||
[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();"}}, | [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 // ...\n if (*I < 0)\n S.Diag(E->getExprLoc(), diag::warn_attribute_argument_n_negative) << &AL << Idx << E->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,464: | Line 7,464: | ||
["warn_attribute_cmse_entry_static"]={ | ["warn_attribute_cmse_entry_static"]={ | ||
[a]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage [-Wignored-attributes]", | [a]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage", | [e]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage", | ||
[g]= | [g]=t, | ||
[b]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage", | [b]="\'cmse_nonsecure_entry\' cannot be applied to functions with internal linkage", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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);"}}, | [j]={{v,2152,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!FD->isExternallyVisible()) {\n S.Diag(AL.getLoc(), diag::warn_attribute_cmse_entry_static);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,481: | Line 7,481: | ||
["warn_attribute_dll_instantiated_base_class"]={ | ["warn_attribute_dll_instantiated_base_class"]={ | ||
[a]="propagating dll attribute to ... base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]", | [a]="propagating dll attribute to ... base class template without dll attribute is not supported [-Wunsupported-dll-base-class-template]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"unsupported-dll-base-class-template"}, | ||
[ | [q]="unsupported-dll-base-class-template", | ||
[e]="propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", | [e]="propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", | ||
[g]= | [g]=t, | ||
[b]="propagating dll attribute to (?:already instantiated|explicitly specialized) base class template without dll attribute is not supported", | [b]="propagating dll attribute to (?:already instantiated|explicitly specialized) base class template without dll attribute is not supported", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-dll\\-base\\-class\\-template[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-dll\\-base\\-class\\-template[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"9bea9cc73bd0",1403720757, | [i]={"9bea9cc73bd0",1403720757,qc,qc}, | ||
[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();"}}, | [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 // ...\n Diag(BaseLoc, diag::warn_attribute_dll_instantiated_base_class) << BaseTemplateSpec->isExplicitSpecialization();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,499: | Line 7,499: | ||
["warn_attribute_dll_redeclaration"]={ | ["warn_attribute_dll_redeclaration"]={ | ||
[a]="redeclaration of A should not add B attribute [-Wdll-attribute-on-redeclaration]", | [a]="redeclaration of A should not add B attribute [-Wdll-attribute-on-redeclaration]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"dll-attribute-on-redeclaration"}, | ||
[ | [q]="dll-attribute-on-redeclaration", | ||
[e]="redeclaration of %q0 should not add %q1 attribute", | [e]="redeclaration of %q0 should not add %q1 attribute", | ||
[g]= | [g]=t, | ||
[b]="redeclaration of (.*?) should not add (.*?) attribute", | [b]="redeclaration of (.*?) should not add (.*?) attribute", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdll\\-attribute\\-on\\-redeclaration[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdll\\-attribute\\-on\\-redeclaration[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"dd96db2c034c",1409174860,"Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20...","Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20746)"}, | [i]={"dd96db2c034c",1409174860,"Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20...","Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20746)"}, | ||
[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;"}}, | [j]={{w,7092,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n // ...\n if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {\n // ...\n unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration : diag::err_attribute_dll_redeclaration;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,516: | Line 7,516: | ||
["warn_attribute_dllexport_explicit_instantiation_decl"]={ | ["warn_attribute_dllexport_explicit_instantiation_decl"]={ | ||
[a]="explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]", | [a]="explicit instantiation declaration should not be \'dllexport\' [-Wdllexport-explicit-instantiation-decl]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"dllexport-explicit-instantiation-decl"}, | ||
[ | [q]="dllexport-explicit-instantiation-decl", | ||
[e]="explicit instantiation declaration should not be \'dllexport\'", | [e]="explicit instantiation declaration should not be \'dllexport\'", | ||
[g]= | [g]=t, | ||
[b]="explicit instantiation declaration should not be \'dllexport\'", | [b]="explicit instantiation declaration should not be \'dllexport\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdllexport\\-explicit\\-instantiation\\-decl[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdllexport\\-explicit\\-instantiation\\-decl[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"fd76d9136601",1421356710,"Warn about dllexported explicit class template instantiation declarations (PR22035)","Warn about dllexported explicit class template instantiation declarations (PR22035)"}, | [i]={"fd76d9136601",1421356710,"Warn about dllexported explicit class template instantiation declarations (PR22035)","Warn about dllexported explicit class template instantiation declarations (PR22035)"}, | ||
[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);"}}, | [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 // ...\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 // ...\n if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n // ...\n if (auto *A = ClassTemplate->getTemplatedDecl()->getAttr<DLLExportAttr>()) {\n Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,533: | Line 7,533: | ||
["warn_attribute_dllexport_explicit_instantiation_def"]={ | ["warn_attribute_dllexport_explicit_instantiation_def"]={ | ||
[a]="\'dllexport\' attribute ignored on explicit instantiation definition [-Wignored-attributes]", | [a]="\'dllexport\' attribute ignored on explicit instantiation definition [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'dllexport\' attribute ignored on explicit instantiation definition", | [e]="\'dllexport\' attribute ignored on explicit instantiation definition", | ||
[g]= | [g]=t, | ||
[b]="\'dllexport\' attribute ignored on explicit instantiation definition", | [b]="\'dllexport\' attribute ignored on explicit instantiation definition", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"5be69bc68a65",1556266191,"[MinGW] Fix dllexport of explicit template instantiation","[MinGW] Fix dllexport of explicit template instantiation"}, | [i]={"5be69bc68a65",1556266191,"[MinGW] Fix dllexport of explicit template instantiation","[MinGW] Fix dllexport of explicit template instantiation"}, | ||
[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);"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,550: | Line 7,550: | ||
["warn_attribute_dllimport_static_field_definition"]={ | ["warn_attribute_dllimport_static_field_definition"]={ | ||
[a]="definition of dllimport static field [-Wdllimport-static-field-def]", | [a]="definition of dllimport static field [-Wdllimport-static-field-def]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"dllimport-static-field-def"}, | ||
[ | [q]="dllimport-static-field-def", | ||
[e]="definition of dllimport static field", | [e]="definition of dllimport static field", | ||
[g]= | [g]=t, | ||
[b]="definition of dllimport static field", | [b]="definition of dllimport static field", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdllimport\\-static\\-field\\-def[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdllimport\\-static\\-field\\-def[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"e9af3164237f",1401841121,"Downgrade \"definition of dllimport static field\" error to warning for class templates (PR19902)","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)","Downgrade \"definition of dllimport static field\" error to warning for class templates (PR19902)"}, | ||
[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);"}}, | [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 // ...\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 // ...\n Diag(VD->getLocation(), IsClassTemplateMember ? diag::warn_attribute_dllimport_static_field_definition : diag::err_attribute_dllimport_static_field_definition);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,567: | Line 7,567: | ||
["warn_attribute_has_no_effect_on_compile_time_if"]={ | ["warn_attribute_has_no_effect_on_compile_time_if"]={ | ||
[a]="attribute A has no effect when annotating an \'if ...\' statement [-Wignored-attributes]", | [a]="attribute A has no effect when annotating an \'if ...\' statement [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute %0 has no effect when annotating an \'if %select{constexpr|consteval}1\' statement", | [e]="attribute %0 has no effect when annotating an \'if %select{constexpr|consteval}1\' statement", | ||
[g]= | [g]=t, | ||
[b]="attribute (.*?) has no effect when annotating an \'if (?:constexpr|consteval)\' statement", | [b]="attribute (.*?) has no effect when annotating an \'if (?:constexpr|consteval)\' statement", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[j]={{ | [j]={{T,909,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,584: | Line 7,584: | ||
["warn_attribute_has_no_effect_on_infinite_loop"]={ | ["warn_attribute_has_no_effect_on_infinite_loop"]={ | ||
[a]="attribute A has no effect when annotating an infinite loop [-Wignored-attributes]", | [a]="attribute A has no effect when annotating an infinite loop [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute %0 has no effect when annotating an infinite loop", | [e]="attribute %0 has no effect when annotating an infinite loop", | ||
[g]= | [g]=t, | ||
[b]="attribute (.*?) has no effect when annotating an infinite loop", | [b]="attribute (.*?) has no effect when annotating an infinite loop", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[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();"}}, | [j]={{"clang/lib/CodeGen/CGStmt.cpp",933,"void CodeGenFunction::EmitWhileStmt(const WhileStmt &S, ArrayRef<const Attr *> WhileAttrs) {\n // ...\n if (EmitBoolCondBranch) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,601: | Line 7,601: | ||
["warn_attribute_iboutlet"]={ | ["warn_attribute_iboutlet"]={ | ||
[a]="A attribute can only be applied to instance variables or properties [-Wignored-attributes]", | [a]="A attribute can only be applied to instance variables or properties [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute can only be applied to instance variables or properties", | [e]="%0 attribute can only be applied to instance variables or properties", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute can only be applied to instance variables or properties", | [b]="(.*?) attribute can only be applied to instance variables or properties", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"d68ec818c351",1296802456,"Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance m...","Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance method to a warning."}, | [i]={"d68ec818c351",1296802456,"Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance m...","Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance method to a warning."}, | ||
[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;"}} | [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 // ...\n } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n // ...\n } else {\n S.Diag(AL.getLoc(), diag::warn_attribute_iboutlet) << AL;"}} | ||
}, | }, | ||
["warn_attribute_ignored"]={ | ["warn_attribute_ignored"]={ | ||
[a]="A attribute ignored [-Wignored-attributes]", | [a]="A attribute ignored [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute ignored", | [e]="%0 attribute ignored", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute ignored", | [b]="(.*?) attribute ignored", | ||
[h]= | [h]=N, | ||
[f]=m, | [f]=m, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{lc,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 // ...\n while (true) {\n // ...\n DoneWithDeclSpec:\n if (!AttrsLastTime)\n // ...\n else {\n // Reject C++11 / C2x attributes that aren\'t type attributes.\n for (const ParsedAttr &PA : attrs) {\n // ...\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 // ...\n case tok::kw_asm: {\n for (const ParsedAttr &AL : CXX11Attrs)\n // ...\n (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"},{"clang/lib/Sema/ParsedAttr.cpp",184,"bool ParsedAttr::diagnoseLangOpts(Sema &S) const {\n // ...\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 // ...\n else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n // ...\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 // ...\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;"},{ib,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 // ...\n if (attr.getKind() == ParsedAttr::AT_CmseNSCall) {\n // ...\n // Ignore if we don\'t have CMSE enabled.\n if (!S.getLangOpts().Cmse) {\n S.Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"},{ib,8664,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n // ...\n for (ParsedAttr &attr : AttrsCopy) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,632: | Line 7,632: | ||
["warn_attribute_ignored_for_field_of_type"]={ | ["warn_attribute_ignored_for_field_of_type"]={ | ||
[a]="A attribute ignored for field of type B [-Wignored-attributes]", | [a]="A attribute ignored for field of type B [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute ignored for field of type %1", | [e]="%0 attribute ignored for field of type %1", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute ignored for field of type (.*?)", | [b]="(.*?) attribute ignored for field of type (.*?)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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();"}}, | [j]={{v,1415,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (auto *TD = dyn_cast<TagDecl>(D))\n // ...\n else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n // ...\n if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n if (BitfieldByteAligned)\n // ...\n S.Diag(AL.getLoc(), diag::warn_attribute_ignored_for_field_of_type) << AL << FD->getType();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,649: | Line 7,649: | ||
["warn_attribute_ignored_no_calls_in_stmt"]={ | ["warn_attribute_ignored_no_calls_in_stmt"]={ | ||
[a]="A attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]", | [a]="A attribute is ignored because there exists no call expression inside the statement [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute is ignored because there exists no call expression inside the statement", | [e]="%0 attribute is ignored because there exists no call expression inside the statement", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute is ignored because there exists no call expression inside the statement", | [b]="(.*?) attribute is ignored because there exists no call expression inside the statement", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | [i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | ||
[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 // ...\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 // ...\n if (!CEF.foundCallExpr()) {\n return SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,666: | Line 7,666: | ||
["warn_attribute_ignored_non_function_pointer"]={ | ["warn_attribute_ignored_non_function_pointer"]={ | ||
[a]="A attribute is ignored because B is not a function pointer [-Wignored-attributes]", | [a]="A attribute is ignored because B is not a function pointer [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute is ignored because %1 is not a function pointer", | [e]="%0 attribute is ignored because %1 is not a function pointer", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute is ignored because (.*?) is not a function pointer", | [b]="(.*?) attribute is ignored because (.*?) is not a function pointer", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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;"}}, | [j]={{v,8382,"static void handleNoMergeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (VDecl && !VDecl->isFunctionPointerType()) {\n S.Diag(AL.getLoc(), diag::warn_attribute_ignored_non_function_pointer) << AL << VDecl;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,683: | Line 7,683: | ||
["warn_attribute_ignored_on_inline"]={ | ["warn_attribute_ignored_on_inline"]={ | ||
[a]="A attribute ignored on inline function [-Wignored-attributes]", | [a]="A attribute ignored on inline function [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute ignored on inline function", | [e]="%0 attribute ignored on inline function", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute ignored on inline function", | [b]="(.*?) attribute ignored on inline function", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)","Don\'t dllimport inline functions when targeting MinGW (PR21366)"}, | [i]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)","Don\'t dllimport inline functions when targeting MinGW (PR21366)"}, | ||
[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;"}}, | [j]={{v,8040,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n if (FD->isInlined() && A.getKind() == ParsedAttr::AT_DLLImport && !(S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n // ...\n S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored_on_inline) << A;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,700: | Line 7,700: | ||
["warn_attribute_ignored_on_non_definition"]={ | ["warn_attribute_ignored_on_non_definition"]={ | ||
[a]="A attribute ignored on a non-definition declaration [-Wignored-attributes]", | [a]="A attribute ignored on a non-definition declaration [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute ignored on a non-definition declaration", | [e]="%0 attribute ignored on a non-definition declaration", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute ignored on a non\\-definition declaration", | [b]="(.*?) attribute ignored on a non\\-definition declaration", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[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;"}}, | [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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,717: | Line 7,717: | ||
["warn_attribute_invalid_on_definition"]={ | ["warn_attribute_invalid_on_definition"]={ | ||
[a]="\'A\' attribute cannot be specified on a definition [-Wignored-attributes]", | [a]="\'A\' attribute cannot be specified on a definition [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'%0\' attribute cannot be specified on a definition", | [e]="\'%0\' attribute cannot be specified on a definition", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' attribute cannot be specified on a definition", | [b]="\'(.*?)\' attribute cannot be specified on a definition", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"52d598e24269",1369086809,"Warn on and drop dllimport attrs from variable definitions","Warn on and drop dllimport attrs from variable definitions"}, | [i]={"52d598e24269",1369086809,"Warn on and drop dllimport attrs from variable definitions","Warn on and drop dllimport attrs from variable definitions"}, | ||
[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\";"}}, | [j]={{v,3195,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!D->canBeWeakImported(isDef)) {\n if (isDef)\n S.Diag(AL.getLoc(), diag::warn_attribute_invalid_on_definition) << \"weak_import\";"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,734: | Line 7,734: | ||
["warn_attribute_no_builtin_invalid_builtin_name"]={ | ["warn_attribute_no_builtin_invalid_builtin_name"]={ | ||
[a]="\'A\' is not a valid builtin name for B [-Winvalid-no-builtin-names]", | [a]="\'A\' is not a valid builtin name for B [-Winvalid-no-builtin-names]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"invalid-no-builtin-names"}, | ||
[ | [q]="invalid-no-builtin-names", | ||
[e]="\'%0\' is not a valid builtin name for %1", | [e]="\'%0\' is not a valid builtin name for %1", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' is not a valid builtin name for (.*?)", | [b]="\'(.*?)\' is not a valid builtin name for (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Winvalid\\-no\\-builtin\\-names[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Winvalid\\-no\\-builtin\\-names[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"bd8791610948",1569403888, | [i]={"bd8791610948",1569403888,cc,cc}, | ||
[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;"}}, | [j]={{v,1153,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n // Add current attributes.\n if (AL.getNumArgs() == 0)\n // ...\n else\n for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n // ...\n if (Builtin::Context::isBuiltinFunc(BuiltinName))\n // ...\n else\n S.Diag(LiteralLoc, diag::warn_attribute_no_builtin_invalid_builtin_name) << BuiltinName << AL;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,751: | Line 7,751: | ||
["warn_attribute_no_decl"]={ | ["warn_attribute_no_decl"]={ | ||
[a]="attribute A ignored, because it is not attached to a declaration [-Wignored-attributes]", | [a]="attribute A ignored, because it is not attached to a declaration [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute %0 ignored, because it is not attached to a declaration", | [e]="attribute %0 ignored, because it is not attached to a declaration", | ||
[g]= | [g]=t, | ||
[b]="attribute (.*?) ignored, because it is not attached to a declaration", | [b]="attribute (.*?) ignored, because it is not attached to a declaration", | ||
[h]= | [h]=N, | ||
[f]= | [f]=U, | ||
[i]={"71d610329554",1330727390,"Issue warning when late-parsed attributes have no declaration.","Issue warning when late-parsed attributes have no declaration."}, | [i]={"71d610329554",1330727390,"Issue warning when late-parsed attributes have no declaration.","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 // ...\n if (LA.Decls.size() > 0) {\n // ...\n } else {\n Diag(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,768: | Line 7,768: | ||
["warn_attribute_nonnull_no_pointers"]={ | ["warn_attribute_nonnull_no_pointers"]={ | ||
[a]="\'nonnull\' attribute applied to function with no pointer arguments [-Wignored-attributes]", | [a]="\'nonnull\' attribute applied to function with no pointer arguments [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'nonnull\' attribute applied to function with no pointer arguments", | [e]="\'nonnull\' attribute applied to function with no pointer arguments", | ||
[g]= | [g]=t, | ||
[b]="\'nonnull\' attribute applied to function with no pointer arguments", | [b]="\'nonnull\' attribute applied to function with no pointer arguments", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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);"}}, | [j]={{v,1618,"static void handleNonNullAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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 // ...\n if (!AnyPointers)\n S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_no_pointers);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,785: | Line 7,785: | ||
["warn_attribute_nonnull_parm_no_args"]={ | ["warn_attribute_nonnull_parm_no_args"]={ | ||
[a]="\'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]", | [a]="\'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'nonnull\' attribute when used on parameters takes no arguments", | [e]="\'nonnull\' attribute when used on parameters takes no arguments", | ||
[g]= | [g]=t, | ||
[b]="\'nonnull\' attribute when used on parameters takes no arguments", | [b]="\'nonnull\' attribute when used on parameters takes no arguments", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"9aedc159ef4c",1389939896,"Enhance attribute \'nonnull\' to be applicable to parameters directly (infix).","Enhance attribute \'nonnull\' to be applicable to parameters directly (infix)."}, | [i]={"9aedc159ef4c",1389939896,"Enhance attribute \'nonnull\' to be applicable to parameters directly (infix).","Enhance attribute \'nonnull\' to be applicable to parameters directly (infix)."}, | ||
[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();"}}, | [j]={{v,1633,"static void handleNonNullAttrParameter(Sema &S, ParmVarDecl *D, const ParsedAttr &AL) {\n if (AL.getNumArgs() > 0) {\n if (D->getFunctionType()) {\n // ...\n } else {\n S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_parm_no_args) << D->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["clang/test/SemaObjC/nonnull.m"]={"clang/test/SemaObjC/nonnull.m:106:60: warning: \'nonnull\' attribute when used on parameters takes no arguments [-Wignored-attributes]"} | ||
Line 7,802: | Line 7,802: | ||
["warn_attribute_not_on_decl"]={ | ["warn_attribute_not_on_decl"]={ | ||
[a]="A attribute ignored when parsing type [-Wignored-attributes]", | [a]="A attribute ignored when parsing type [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute ignored when parsing type", | [e]="%0 attribute ignored when parsing type", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute ignored when parsing type", | [b]="(.*?) attribute ignored when parsing type", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"42856de54283",1317446223,"Hey, maybe we shouldn\'t silently ignore decl attributes","Hey, maybe we shouldn\'t silently ignore decl attributes"}, | [i]={"42856de54283",1317446223,"Hey, maybe we shouldn\'t silently ignore decl attributes","Hey, maybe we shouldn\'t silently ignore decl attributes"}, | ||
[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();"}}, | [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 // ...\n if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n // ...\n } else {\n S.Diag(AL.getLoc(), diag::warn_attribute_not_on_decl) << AL << AL.getRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,819: | Line 7,819: | ||
["warn_attribute_on_function_definition"]={ | ["warn_attribute_on_function_definition"]={ | ||
[a]="GCC does not allow A attribute in this position on a function definition [-Wgcc-compat]", | [a]="GCC does not allow A attribute in this position on a function definition [-Wgcc-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Pc}, | ||
[ | [q]=Pc, | ||
[e]="GCC does not allow %0 attribute in this position on a function definition", | [e]="GCC does not allow %0 attribute in this position on a function definition", | ||
[g]= | [g]=t, | ||
[b]="GCC does not allow (.*?) attribute in this position on a function definition", | [b]="GCC does not allow (.*?) attribute in this position on a function definition", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"3fc6e4a7cda9",1329411043,"Allow thread safety attributes on function definitions.","Allow thread safety attributes on function definitions."}, | [i]={"3fc6e4a7cda9",1329411043,"Allow thread safety attributes on function definitions.","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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,836: | Line 7,836: | ||
["warn_attribute_packed_for_bitfield"]={ | ["warn_attribute_packed_for_bitfield"]={ | ||
[a]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang [-Wattribute-packed-for-bitfield]", | [a]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang [-Wattribute-packed-for-bitfield]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"attribute-packed-for-bitfield"}, | ||
[ | [q]="attribute-packed-for-bitfield", | ||
[e]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", | [e]="\'packed\' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", | ||
[g]= | [g]=t, | ||
[b]="\'packed\' attribute was ignored on bit\\-fields with single\\-byte alignment in older versions of GCC and Clang", | [b]="\'packed\' attribute was ignored on bit\\-fields with single\\-byte alignment in older versions of GCC and Clang", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wattribute\\-packed\\-for\\-bitfield[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wattribute\\-packed\\-for\\-bitfield[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"830dfccfb2c0",1449135289,"PR25575: Make GCC 4.4+ comatible layout for packed bit-fileds of char type, patch by D. Polukhin","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","PR25575: Make GCC 4.4+ comatible layout for packed bit-fileds of char type, patch by D. Polukhin"}, | ||
[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);"}}, | [j]={{v,1422,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (auto *TD = dyn_cast<TagDecl>(D))\n // ...\n else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n // ...\n if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,853: | Line 7,853: | ||
["warn_attribute_pointer_or_reference_only"]={ | ["warn_attribute_pointer_or_reference_only"]={ | ||
[a]="A attribute only applies to a pointer or reference (B is invalid) [-Wignored-attributes]", | [a]="A attribute only applies to a pointer or reference (B is invalid) [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute only applies to a pointer or reference (%1 is invalid)", | [e]="%0 attribute only applies to a pointer or reference (%1 is invalid)", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute only applies to a pointer or reference \\((.*?) is invalid\\)", | [b]="(.*?) attribute only applies to a pointer or reference \\((.*?) is invalid\\)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute","Initial support for the align_value attribute"}, | [i]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute","Initial support for the align_value attribute"}, | ||
[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();"}}, | [j]={{v,4323,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,870: | Line 7,870: | ||
["warn_attribute_pointers_only"]={ | ["warn_attribute_pointers_only"]={ | ||
[a]="A attribute only applies to... pointer arguments [-Wignored-attributes]", | [a]="A attribute only applies to... pointer arguments [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute only applies to%select{| constant}1 pointer arguments", | [e]="%0 attribute only applies to%select{| constant}1 pointer arguments", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute only applies to(?:| constant) pointer arguments", | [b]="(.*?) attribute only applies to(?:| constant) pointer arguments", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"cedaaea69127",1388077669,"This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diag...","This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diagnostic, and made it more consistent with other attribute diagnostic wordings. Added test coverage."}, | [i]={"cedaaea69127",1388077669,"This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diag...","This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diagnostic, and made it more consistent with other attribute diagnostic wordings. Added test coverage."}, | ||
[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;"}}, | [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 // ...\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 // ...\n if (!S.isValidPointerAttrType(T, /* RefOkay */ true)) {\n S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AL.getRange() << 0;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/nonnull.m"]={"clang/test/SemaObjC/nonnull.m:104:66: warning: \'nonnull\' attribute only applies to pointer arguments [-Wignored-attributes]"} | ["clang/test/SemaObjC/nonnull.m"]={"clang/test/SemaObjC/nonnull.m:104:66: warning: \'nonnull\' attribute only applies to pointer arguments [-Wignored-attributes]"} | ||
Line 7,887: | Line 7,887: | ||
["warn_attribute_precede_definition"]={ | ["warn_attribute_precede_definition"]={ | ||
[a]="attribute declaration must precede definition [-Wignored-attributes]", | [a]="attribute declaration must precede definition [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute declaration must precede definition", | [e]="attribute declaration must precede definition", | ||
[g]= | [g]=t, | ||
[b]="attribute declaration must precede definition", | [b]="attribute declaration must precede definition", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"e5dc8594ea99",1248560984,"PR3575 - warn on declared variable or function attributes after a definition, which are currently ig...","PR3575 - warn on declared variable or function attributes after a definition, which are currently ignored."}, | [i]={"e5dc8594ea99",1248560984,"PR3575 - warn on declared variable or function attributes after a definition, which are currently ig...","PR3575 - warn on declared variable or function attributes after a definition, which are currently ignored."}, | ||
[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);"}}, | [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 // ...\n for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n // ...\n S.Diag(NewAttribute->getLocation(), diag::warn_attribute_precede_definition);"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/attr-target-mv.c"]={"clang/test/Sema/attr-target-mv.c:60:20: warning: attribute declaration must precede definition [-Wignored-attributes]"} | ||
Line 7,904: | Line 7,904: | ||
["warn_attribute_protected_visibility"]={ | ["warn_attribute_protected_visibility"]={ | ||
[a]="target does not support \'protected\' visibility; using \'default\' [-Wunsupported-visibility]", | [a]="target does not support \'protected\' visibility; using \'default\' [-Wunsupported-visibility]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"unsupported-visibility"}, | ||
[ | [q]="unsupported-visibility", | ||
[e]="target does not support \'protected\' visibility; using \'default\'", | [e]="target does not support \'protected\' visibility; using \'default\'", | ||
[g]= | [g]=t, | ||
[b]="target does not support \'protected\' visibility; using \'default\'", | [b]="target does not support \'protected\' visibility; using \'default\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-visibility[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-visibility[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"eed64c77d27f",1327800030,"Complain about attempts to use \'protected\' visibility on targets","Complain about attempts to use \'protected\' visibility on targets"}, | [i]={"eed64c77d27f",1327800030,"Complain about attempts to use \'protected\' visibility on targets","Complain about attempts to use \'protected\' visibility on targets"}, | ||
[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);"}}, | [j]={{v,2926,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,921: | Line 7,921: | ||
["warn_attribute_return_pointers_only"]={ | ["warn_attribute_return_pointers_only"]={ | ||
[a]="A attribute only applies to return values that are pointers [-Wignored-attributes]", | [a]="A attribute only applies to return values that are pointers [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute only applies to return values that are pointers", | [e]="%0 attribute only applies to return values that are pointers", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute only applies to return values that are pointers", | [b]="(.*?) attribute only applies to return values that are pointers", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"dbf62e3eee51",1390197047,"Wire up basic parser/sema support for attribute \'returns_nonnull\'.","Wire up basic parser/sema support for attribute \'returns_nonnull\'."}, | [i]={"dbf62e3eee51",1390197047,"Wire up basic parser/sema support for attribute \'returns_nonnull\'.","Wire up basic parser/sema support for attribute \'returns_nonnull\'."}, | ||
[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);"}}, | [j]={{v,835,"static void handleAllocSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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 // ...\n S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << getFunctionOrMethodResultSourceRange(D);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,938: | Line 7,938: | ||
["warn_attribute_return_pointers_refs_only"]={ | ["warn_attribute_return_pointers_refs_only"]={ | ||
[a]="A attribute only applies to return values that are pointers or references [-Wignored-attributes]", | [a]="A attribute only applies to return values that are pointers or references [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute only applies to return values that are pointers or references", | [e]="%0 attribute only applies to return values that are pointers or references", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute only applies to return values that are pointers or references", | [b]="(.*?) attribute only applies to return values that are pointers or references", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"ee90a223ead9",1411707870,"Support the assume_aligned function attribute","Support the assume_aligned function attribute"}, | [i]={"ee90a223ead9",1411707870,"Support the assume_aligned function attribute","Support the assume_aligned function attribute"}, | ||
[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);"}}, | [j]={{v,1691,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n // ...\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 // ...\n if (!ResultType->isDependentType() && !isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << CI.getRange() << getFunctionOrMethodResultSourceRange(D);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,955: | Line 7,955: | ||
["warn_attribute_section_drectve"]={ | ["warn_attribute_section_drectve"]={ | ||
[a]="#pragma A(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]", | [a]="#pragma A(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead [-Wmicrosoft-drectve-section]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"microsoft","microsoft-drectve-section"}, | ||
[ | [q]="microsoft-drectve-section", | ||
[e]="#pragma %0(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead", | [e]="#pragma %0(\".drectve\") has undefined behavior, use #pragma comment(linker, ...) instead", | ||
[g]= | [g]=t, | ||
[b]="\\#pragma (.*?)\\(\"\\.drectve\"\\) has undefined behavior, use \\#pragma comment\\(linker, \\.\\.\\.\\) instead", | [b]="\\#pragma (.*?)\\(\"\\.drectve\"\\) has undefined behavior, use \\#pragma comment\\(linker, \\.\\.\\.\\) instead", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-drectve\\-section[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-drectve\\-section[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"9801621616b2",1562630543,"clang-cl: Port cl.exe\'s C4659 to clang-cl","clang-cl: Port cl.exe\'s C4659 to clang-cl"}, | [i]={"9801621616b2",1562630543,"clang-cl: Port cl.exe\'s C4659 to clang-cl","clang-cl: Port cl.exe\'s C4659 to clang-cl"}, | ||
[j]={{ | [j]={{yb,756,"/// Called on well formed \\#pragma bss_seg().\nvoid Sema::ActOnPragmaMSSeg(SourceLocation PragmaLocation, PragmaMsStackAction Action, llvm::StringRef StackSlotLabel, StringLiteral *SegmentName, llvm::StringRef PragmaName) {\n // ...\n if (SegmentName) {\n // ...\n if (SegmentName->getString() == \".drectve\" && Context.getTargetInfo().getCXXABI().isMicrosoft())\n Diag(PragmaLocation, diag::warn_attribute_section_drectve) << PragmaName;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,972: | Line 7,972: | ||
["warn_attribute_section_on_redeclaration"]={ | ["warn_attribute_section_on_redeclaration"]={ | ||
[a]="section attribute is specified on redeclared variable [-Wsection]", | [a]="section attribute is specified on redeclared variable [-Wsection]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"section"}, | ||
[ | [q]="section", | ||
[e]="section attribute is specified on redeclared variable", | [e]="section attribute is specified on redeclared variable", | ||
[g]= | [g]=t, | ||
[b]="section attribute is specified on redeclared variable", | [b]="section attribute is specified on redeclared variable", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. ","Emit section information for extern variables. "}, | [i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. ","Emit section information for extern variables. "}, | ||
[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);"}}, | [j]={{w,3272,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n // ...\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]={ | [k]={ | ||
["clang/test/SemaCXX/attr-section.cpp"]={"clang/test/SemaCXX/attr-section.cpp:21:12: warning: section attribute is specified on redeclared variable [-Wsection]"} | ["clang/test/SemaCXX/attr-section.cpp"]={"clang/test/SemaCXX/attr-section.cpp:21:12: warning: section attribute is specified on redeclared variable [-Wsection]"} | ||
Line 7,989: | Line 7,989: | ||
["warn_attribute_sentinel_named_arguments"]={ | ["warn_attribute_sentinel_named_arguments"]={ | ||
[a]="\'sentinel\' attribute requires named arguments [-Wignored-attributes]", | [a]="\'sentinel\' attribute requires named arguments [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'sentinel\' attribute requires named arguments", | [e]="\'sentinel\' attribute requires named arguments", | ||
[g]= | [g]=t, | ||
[b]="\'sentinel\' attribute requires named arguments", | [b]="\'sentinel\' attribute requires named arguments", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"9363e3106edc",1237331027,"don\'t crash when sentinel attribute is used on function without a prototype,","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,","don\'t crash when sentinel attribute is used on function without a prototype,"}, | ||
[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);"}}, | [j]={{v,3091,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n if (isa<FunctionNoProtoType>(FT)) {\n S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_named_arguments);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/sentinel-attribute.c"]={"clang/test/Sema/sentinel-attribute.c:19:26: warning: \'sentinel\' attribute requires named arguments [-Wignored-attributes]"} | ["clang/test/Sema/sentinel-attribute.c"]={"clang/test/Sema/sentinel-attribute.c:19:26: warning: \'sentinel\' attribute requires named arguments [-Wignored-attributes]"} | ||
Line 8,006: | Line 8,006: | ||
["warn_attribute_sentinel_not_variadic"]={ | ["warn_attribute_sentinel_not_variadic"]={ | ||
[a]="\'sentinel\' attribute only supported for variadic ... [-Wignored-attributes]", | [a]="\'sentinel\' attribute only supported for variadic ... [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="\'sentinel\' attribute only supported for variadic %select{functions|blocks}0", | [e]="\'sentinel\' attribute only supported for variadic %select{functions|blocks}0", | ||
[g]= | [g]=t, | ||
[b]="\'sentinel\' attribute only supported for variadic (?:functions|blocks)", | [b]="\'sentinel\' attribute only supported for variadic (?:functions|blocks)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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;"}}, | [j]={{v,3096,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\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 // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\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 // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n // ...\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 // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n // ...\n } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n // ...\n } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n // ...\n if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n // ...\n if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n // ...\n S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << m;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,023: | Line 8,023: | ||
["warn_attribute_type_not_supported"]={ | ["warn_attribute_type_not_supported"]={ | ||
[a]="A attribute argument not supported: B [-Wignored-attributes]", | [a]="A attribute argument not supported: B [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute argument not supported: %1", | [e]="%0 attribute argument not supported: %1", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute argument not supported\\: (.*?)", | [b]="(.*?) attribute argument not supported\\: (.*?)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{lc,1574,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n // ...\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 // ...\n if (AL.isArgIdent(0)) {\n // ...\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 // ...\n for (unsigned ArgIndex = 0; ArgIndex < AL.getNumArgs(); ++ArgIndex) {\n // ...\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 // ...\n if (AL.isArgIdent(0)) {\n // ...\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 // ...\n if (AL.isArgIdent(0)) {\n // ...\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 // ...\n if (AL.isArgIdent(0)) {\n // ...\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 // ...\n if (AL.isArgIdent(0)) {\n // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\n if (!HLSLShaderAttr::ConvertStrToShaderType(Str, ShaderType) ||\n // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\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 // ...\n if (!CFGuardAttr::ConvertStrToGuardArg(II->getName(), Arg)) {\n S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{ib,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 // ...\n if (II->isStr(\"none\"))\n // ...\n else if (II->isStr(\"strong\"))\n // ...\n else if (II->isStr(\"weak\"))\n // ...\n else if (II->isStr(\"autoreleasing\"))\n // ...\n else {\n S.Diag(AttrLoc, diag::warn_attribute_type_not_supported) << attr << II;"},{ib,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 // ...\n if (II->isStr(\"weak\"))\n // ...\n else if (II->isStr(\"strong\"))\n // ...\n else {\n S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported) << attr << II;"}}, | ||
[k]={ | [k]={ | ||
[ | [Tc]={"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"]={ | ||
[a]="A attribute argument \'B\' not supported on a global variable [-Wignored-attributes]", | [a]="A attribute argument \'B\' not supported on a global variable [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 attribute argument \'%1\' not supported on a global variable", | [e]="%0 attribute argument \'%1\' not supported on a global variable", | ||
[g]= | [g]=t, | ||
[b]="(.*?) attribute argument \'(.*?)\' not supported on a global variable", | [b]="(.*?) attribute argument \'(.*?)\' not supported on a global variable", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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;"}}, | [j]={{v,8234,"static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n // ...\n if (parseSanitizerValue(SanitizerName, /*AllowGroups=*/true) == SanitizerMask() && SanitizerName != \"coverage\")\n // ...\n else if (isGlobalVar(D) && !isSanitizerAttributeAllowedOnGlobals(SanitizerName))\n S.Diag(D->getLocation(), diag::warn_attribute_type_not_supported_global) << AL << SanitizerName;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,057: | Line 8,057: | ||
["warn_attribute_unknown_visibility"]={ | ["warn_attribute_unknown_visibility"]={ | ||
[a]="unknown visibility A [-Wignored-attributes]", | [a]="unknown visibility A [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="unknown visibility %0", | [e]="unknown visibility %0", | ||
[g]= | [g]=t, | ||
[b]="unknown visibility (.*?)", | [b]="unknown visibility (.*?)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{yb,1304,"void Sema::ActOnPragmaVisibility(const IdentifierInfo *VisType, SourceLocation PragmaLoc) {\n if (VisType) {\n // ...\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"]={ | ||
[a]="attribute A cannot be applied to ... without return value [-Wignored-attributes]", | [a]="attribute A cannot be applied to ... without return value [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", | [e]="attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", | ||
[g]= | [g]=t, | ||
[b]="attribute (.*?) cannot be applied to (?:functions|Objective\\-C method) without return value", | [b]="attribute (.*?) cannot be applied to (?:functions|Objective\\-C method) without return value", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"5cab26d058d3",1269973335,"Add Support for \'warn_unused_result\" attribute on","Add Support for \'warn_unused_result\" attribute on"}, | [i]={"5cab26d058d3",1269973335,"Add Support for \'warn_unused_result\" attribute on","Add Support for \'warn_unused_result\" attribute on"}, | ||
[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;"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,088: | Line 8,088: | ||
["warn_attribute_weak_on_field"]={ | ["warn_attribute_weak_on_field"]={ | ||
[a]="__weak attribute cannot be specified on a field declaration [-Wignored-attributes]", | [a]="__weak attribute cannot be specified on a field declaration [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="__weak attribute cannot be specified on a field declaration", | [e]="__weak attribute cannot be specified on a field declaration", | ||
[g]= | [g]=t, | ||
[b]="__weak attribute cannot be specified on a field declaration", | [b]="__weak attribute cannot be specified on a field declaration", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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);"}}, | [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 // ...\n if (T.isObjCGCWeak())\n Diag(Loc, diag::warn_attribute_weak_on_field);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,105: | Line 8,105: | ||
["warn_attribute_weak_on_local"]={ | ["warn_attribute_weak_on_local"]={ | ||
[a]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled [-Wignored-attributes]", | [a]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled", | [e]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled", | ||
[g]= | [g]=t, | ||
[b]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled", | [b]="__weak attribute cannot be specified on an automatic variable when ARC is not enabled", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[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);"}} | [j]={{w,8651,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n if (getLangOpts().getGC() != LangOptions::NonGC)\n // ...\n else {\n // ...\n Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);"}} | ||
}, | }, | ||
["warn_attribute_wrong_decl_type"]={ | ["warn_attribute_wrong_decl_type"]={ | ||
[a]="A... only applies to ... [-Wignored-attributes]", | [a]="A... only applies to ... [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%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]="%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", | ||
[g]= | [g]=t, | ||
[b]="(.*?)(?: attribute|) only applies to (?:functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non\\-K&R\\-style functions)", | [b]="(.*?)(?: 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)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{gd,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 // ...\n for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n // ...\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 // ...\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 // ...\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 // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n // ...\n } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n // ...\n } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n // ...\n if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n // ...\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 // ...\n if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n // ...\n } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n // ...\n } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n // ...\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 // ...\n if (!D->canBeWeakImported(isDef)) {\n if (isDef)\n // ...\n else if (isa<ObjCPropertyDecl>(D) || isa<ObjCMethodDecl>(D) || (S.Context.getTargetInfo().getTriple().isOSDarwin() && (isa<ObjCInterfaceDecl>(D) || isa<EnumDecl>(D)))) {\n // ...\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 // ...\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 // ...\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 // ...\n if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n // ...\n } else if (S.getLangOpts().ObjCAutoRefCount && hasDeclarator(D) && (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) {\n // ...\n } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n // ...\n } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n } else if (const auto *Param = dyn_cast<ParmVarDecl>(D)) {\n // ...\n } else if (AL.isUsedAsTypeAttr()) {\n // ...\n } else {\n // ...\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 // ...\n if (const auto *Method = dyn_cast<ObjCMethodDecl>(D)) {\n // ...\n } else {\n // ...\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 // ...\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 // ...\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 // ...\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]={ | [k]={ | ||
[ | [Tc]={"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"]={ | ||
[a]="A... only applies to B [-Wignored-attributes]", | [a]="A... only applies to B [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0%select{ attribute|}1 only applies to %2", | [e]="%0%select{ attribute|}1 only applies to %2", | ||
[g]= | [g]=t, | ||
[b]="(.*?)(?: attribute|) only applies to (.*?)", | [b]="(.*?)(?: attribute|) only applies to (.*?)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th...","Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. This greatly reduces the number of enumerated values used for more complex diagnostics; these are now only required when the \"attribute only applies to\" diagnostic needs to be generated manually as part of semantic processing."}, | [i]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th...","Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. This greatly reduces the number of enumerated values used for more complex diagnostics; these are now only required when the \"attribute only applies to\" diagnostic needs to be generated manually as part of semantic processing."}, | ||
[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\";"}}, | [j]={{"clang/examples/Attribute/Attribute.cpp",46,"struct ExampleAttrInfo : public ParsedAttrInfo {\n // ...\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 // ...\n bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n // ...\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 // ...\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 // ...\n if (!isa<TypedefNameDecl>(D)) {\n S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"typedefs\";"}}, | ||
[k]={ | [k]={ | ||
[ | [Tc]={"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"]={ | ||
[a]="conflicting attributes A are ignored [-Wignored-attributes]", | [a]="conflicting attributes A are ignored [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="conflicting attributes %0 are ignored", | [e]="conflicting attributes %0 are ignored", | ||
[g]= | [g]=t, | ||
[b]="conflicting attributes (.*?) are ignored", | [b]="conflicting attributes (.*?) are ignored", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[j]={{ | [j]={{T,929,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n // ...\n if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n // ...\n } else {\n // ...\n if (std::get<0>(LHC)) {\n // ...\n Diags.Report(ThenAttr->getLocation(), diag::warn_attributes_likelihood_ifstmt_conflict) << ThenAttr << ThenAttr->getRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,170: | Line 8,170: | ||
["warn_auto_implicit_atomic_property"]={ | ["warn_auto_implicit_atomic_property"]={ | ||
[a]="property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]", | [a]="property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"atomic-properties","implicit-atomic-properties"}, | ||
[ | [q]="implicit-atomic-properties", | ||
[e]="property is assumed atomic when auto-synthesizing the property", | [e]="property is assumed atomic when auto-synthesizing the property", | ||
[g]= | [g]=t, | ||
[b]="property is assumed atomic when auto\\-synthesizing the property", | [b]="property is assumed atomic when auto\\-synthesizing the property", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is","Warn when synthesizing a property which is"}, | [i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is","Warn when synthesizing a property which is"}, | ||
[j]={{F,1127,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n if (AtLoc.isValid())\n else\n Diag(IC->getLocation(), diag::warn_auto_implicit_atomic_property);"}}, | [j]={{F,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 // ...\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n // ...\n if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n if (AtLoc.isValid())\n // ...\n else\n Diag(IC->getLocation(), diag::warn_auto_implicit_atomic_property);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,188: | Line 8,188: | ||
["warn_auto_readonly_iboutlet_property"]={ | ["warn_auto_readonly_iboutlet_property"]={ | ||
[a]="readonly IBOutlet property A when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]", | [a]="readonly IBOutlet property A when auto-synthesized may not work correctly with \'nib\' loader [-Wreadonly-iboutlet-property]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"readonly-iboutlet-property"}, | ||
[ | [q]="readonly-iboutlet-property", | ||
[e]="readonly IBOutlet property %0 when auto-synthesized may not work correctly with \'nib\' loader", | [e]="readonly IBOutlet property %0 when auto-synthesized may not work correctly with \'nib\' loader", | ||
[g]= | [g]=t, | ||
[b]="readonly IBOutlet property (.*?) when auto\\-synthesized may not work correctly with \'nib\' loader", | [b]="readonly IBOutlet property (.*?) when auto\\-synthesized may not work correctly with \'nib\' loader", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wreadonly\\-iboutlet\\-property[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wreadonly\\-iboutlet\\-property[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties","objective-c: Warn if default synthesizing readonly IBOutlet properties"}, | [i]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties","objective-c: Warn if default synthesizing readonly IBOutlet properties"}, | ||
[j]={{F,1156,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n if (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n if (!ReadWriteProperty) {\n Diag(property->getLocation(), diag::warn_auto_readonly_iboutlet_property) << property;"}}, | [j]={{F,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 // ...\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n // ...\n if (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n // ...\n if (!ReadWriteProperty) {\n Diag(property->getLocation(), diag::warn_auto_readonly_iboutlet_property) << property;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,205: | Line 8,205: | ||
["warn_auto_storage_class"]={ | ["warn_auto_storage_class"]={ | ||
[a]="\'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]", | [a]="\'auto\' storage class specifier is redundant and incompatible with C++11 [-Wc++11-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"c++0x-compat","c++11-compat","c++11-compat-pedantic"}, | ||
[ | [q]="c++11-compat", | ||
[e]="\'auto\' storage class specifier is redundant and incompatible with C++11", | [e]="\'auto\' storage class specifier is redundant and incompatible with C++11", | ||
[g]= | [g]=t, | ||
[b]="\'auto\' storage class specifier is redundant and incompatible with C\\+\\+11", | [b]="\'auto\' storage class specifier is redundant and incompatible with C\\+\\+11", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | ||
[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 // ...\n if (S.getLangOpts().CPlusPlus && !S.getLangOpts().CPlusPlus11 && StorageClassSpec == SCS_auto)\n S.Diag(StorageClassSpecLoc, diag::warn_auto_storage_class) << FixItHint::CreateRemoval(StorageClassSpecLoc);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,223: | Line 8,223: | ||
["warn_auto_synthesizing_protocol_property"]={ | ["warn_auto_synthesizing_protocol_property"]={ | ||
[a]="auto property synthesis will not synthesize property A declared in protocol B [-Wobjc-protocol-property-synthesis]", | [a]="auto property synthesis will not synthesize property A declared in protocol B [-Wobjc-protocol-property-synthesis]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-protocol-property-synthesis"}, | ||
[ | [q]="objc-protocol-property-synthesis", | ||
[e]="auto property synthesis will not synthesize property %0 declared in protocol %1", | [e]="auto property synthesis will not synthesize property %0 declared in protocol %1", | ||
[g]= | [g]=t, | ||
[b]="auto property synthesis will not synthesize property (.*?) declared in protocol (.*?)", | [b]="auto property synthesis will not synthesize property (.*?) declared in protocol (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-property\\-synthesis[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-property\\-synthesis[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"9e49b6a6ffae",1323910998,"objc: do not auto synthesize properties declared in","objc: do not auto synthesize properties declared in"}, | [i]={"9e49b6a6ffae",1323910998,"objc: do not auto synthesize properties declared in","objc: do not auto synthesize properties declared in"}, | ||
[j]={{F,1935,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n for (const auto &PropEntry : PropMap) {\n if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n // We won\'t auto-synthesize properties declared in protocols.\n // Suppress the warning if class\'s superclass implements property\'s\n // getter and implements property\'s setter (if readwrite property).\n // Or, if property is going to be implemented in its super class.\n if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n Diag(IMPDecl->getLocation(), diag::warn_auto_synthesizing_protocol_property) << Prop << Proto;"}}, | [j]={{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,240: | Line 8,240: | ||
["warn_auto_var_is_id"]={ | ["warn_auto_var_is_id"]={ | ||
[a]="\'auto\' deduced as \'id\' in declaration of A [-Wauto-var-id]", | [a]="\'auto\' deduced as \'id\' in declaration of A [-Wauto-var-id]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"auto-var-id"}, | ||
[ | [q]="auto-var-id", | ||
[e]="\'auto\' deduced as \'id\' in declaration of %0", | [e]="\'auto\' deduced as \'id\' in declaration of %0", | ||
[g]= | [g]=t, | ||
[b]="\'auto\' deduced as \'id\' in declaration of (.*?)", | [b]="\'auto\' deduced as \'id\' in declaration of (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wauto\\-var\\-id[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wauto\\-var\\-id[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d8d56694352c",1339195567,"Warn in ObjC++ when an \'auto\' variable deduces type \'id\'.","Warn in ObjC++ when an \'auto\' variable deduces type \'id\'."}, | [i]={"d8d56694352c",1339195567,"Warn in ObjC++ when an \'auto\' variable deduces type \'id\'.","Warn in ObjC++ when an \'auto\' variable deduces type \'id\'."}, | ||
[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;"},{ | [j]={{w,12805,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n // ...\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 // ...\n Diag(Loc, diag::warn_auto_var_is_id) << VN << Range;"},{T,2331,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n // ...\n if (First) {\n // ...\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n // ...\n // If the type contained \'auto\', deduce the \'auto\' to \'id\'.\n if (FirstType->getContainedAutoType()) {\n // ...\n if (!inTemplateInstantiation()) {\n // ...\n Diag(Loc, diag::warn_auto_var_is_id) << D->getDeclName();"}}, | ||
[k]={ | [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]"} | ["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:14:8: warning: \'auto\' deduced as \'id\' in declaration of \'thisKey\' [-Wauto-var-id]"} | ||
Line 8,257: | Line 8,257: | ||
["warn_autosynthesis_property_in_superclass"]={ | ["warn_autosynthesis_property_in_superclass"]={ | ||
[a]="auto property synthesis will not synthesize property A; it will be implemented by its superclass, use @dynamic to acknowledge intention [-Wobjc-property-synthesis]", | [a]="auto property synthesis will not synthesize property A; it will be implemented by its superclass, use @dynamic to acknowledge intention [-Wobjc-property-synthesis]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-property-synthesis"}, | ||
[ | [q]="objc-property-synthesis", | ||
[e]="auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", | [e]="auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", | ||
[g]= | [g]=t, | ||
[b]="auto property synthesis will not synthesize property (.*?); it will be implemented by its superclass, use @dynamic to acknowledge intention", | [b]="auto property synthesis will not synthesize property (.*?); it will be implemented by its superclass, use @dynamic to acknowledge intention", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"6c9ee7b0c856",1406407946,"Objective-C. Issue more warning diagnostic when certain","Objective-C. Issue more warning diagnostic when certain"}, | [i]={"6c9ee7b0c856",1406407946,"Objective-C. Issue more warning diagnostic when certain","Objective-C. Issue more warning diagnostic when certain"}, | ||
[j]={{F,1957,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n for (const auto &PropEntry : PropMap) {\n // If property to be implemented in the super class, ignore.\n if (PropInSuperClass) {\n if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n } else {\n Diag(Prop->getLocation(), diag::warn_autosynthesis_property_in_superclass) << Prop->getIdentifier();"}}, | [j]={{F,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 // ...\n for (const auto &PropEntry : PropMap) {\n // ...\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 // ...\n } else {\n Diag(Prop->getLocation(), diag::warn_autosynthesis_property_in_superclass) << Prop->getIdentifier();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,274: | Line 8,274: | ||
["warn_autosynthesis_property_ivar_match"]={ | ["warn_autosynthesis_property_ivar_match"]={ | ||
[a]="autosynthesized property A will use ... instance variable B, not existing instance variable C [-Wobjc-autosynthesis-property-ivar-name-match]", | [a]="autosynthesized property A will use ... instance variable B, not existing instance variable C [-Wobjc-autosynthesis-property-ivar-name-match]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-autosynthesis-property-ivar-name-match"}, | ||
[ | [q]="objc-autosynthesis-property-ivar-name-match", | ||
[e]="autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", | [e]="autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", | ||
[g]= | [g]=t, | ||
[b]="autosynthesized property (.*?) will use (?:|synthesized) instance variable (.*?), not existing instance variable (.*?)", | [b]="autosynthesized property (.*?) will use (?:|synthesized) instance variable (.*?), not existing instance variable (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-autosynthesis\\-property\\-ivar\\-name\\-match[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-autosynthesis\\-property\\-ivar\\-name\\-match[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"63d40202fb47",1340146282,"objective-c: warn when autosynthesizing a property which has same","objective-c: warn when autosynthesizing a property which has same"}, | [i]={"63d40202fb47",1340146282,"objective-c: warn when autosynthesizing a property which has same","objective-c: warn when autosynthesizing a property which has same"}, | ||
[j]={{F,1286,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n if (AtLoc.isInvalid()) {\n if (originalIvar) {\n Diag(PropertyDiagLoc, diag::warn_autosynthesis_property_ivar_match) << PropertyId << (Ivar == nullptr) << PropertyIvar << originalIvar->getIdentifier();"}}, | [j]={{F,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (AtLoc.isInvalid()) {\n // ...\n if (originalIvar) {\n Diag(PropertyDiagLoc, diag::warn_autosynthesis_property_ivar_match) << PropertyId << (Ivar == nullptr) << PropertyIvar << originalIvar->getIdentifier();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,291: | Line 8,291: | ||
["warn_availability_and_unavailable"]={ | ["warn_availability_and_unavailable"]={ | ||
[a]="\'unavailable\' availability overrides all other availability information [-Wavailability]", | [a]="\'unavailable\' availability overrides all other availability information [-Wavailability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={zb}, | ||
[ | [q]=zb, | ||
[e]="\'unavailable\' availability overrides all other availability information", | [e]="\'unavailable\' availability overrides all other availability information", | ||
[g]= | [g]=t, | ||
[b]="\'unavailable\' availability overrides all other availability information", | [b]="\'unavailable\' availability overrides all other availability information", | ||
[h]= | [h]=rc, | ||
[f]= | [f]=U, | ||
[i]={"7ab142b55a6e",1301110555,"Extend the new \'availability\' attribute with support for an","Extend the new \'availability\' attribute with support for an"}, | [i]={"7ab142b55a6e",1301110555,"Extend the new \'availability\' attribute with support for an","Extend the new \'availability\' attribute with support for an"}, | ||
[j]={{ | [j]={{lc,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 // ...\n // The \'unavailable\' availability cannot be combined with any other\n // availability changes. Make sure that hasn\'t happened.\n if (UnavailableLoc.isValid()) {\n // ...\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]={ | [k]={ | ||
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:19:50: warning: \'unavailable\' availability overrides all other availability information [-Wavailability]"} | ["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:19:50: warning: \'unavailable\' availability overrides all other availability information [-Wavailability]"} | ||
Line 8,308: | Line 8,308: | ||
["warn_availability_fuchsia_unavailable_minor"]={ | ["warn_availability_fuchsia_unavailable_minor"]={ | ||
[a]="Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]", | [a]="Fuchsia API Level prohibits specifying a minor or sub-minor version [-Wavailability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={zb}, | ||
[ | [q]=zb, | ||
[e]="Fuchsia API Level prohibits specifying a minor or sub-minor version", | [e]="Fuchsia API Level prohibits specifying a minor or sub-minor version", | ||
[g]= | [g]=t, | ||
[b]="Fuchsia API Level prohibits specifying a minor or sub\\-minor version", | [b]="Fuchsia API Level prohibits specifying a minor or sub\\-minor version", | ||
[h]= | [h]=rc, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[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);"}}, | [j]={{v,2651,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (II->isStr(\"fuchsia\")) {\n // ...\n if ((Min = Introduced.Version.getMinor()) || (Sub = Introduced.Version.getSubminor())) {\n S.Diag(AL.getLoc(), diag::warn_availability_fuchsia_unavailable_minor);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,325: | Line 8,325: | ||
["warn_availability_on_static_initializer"]={ | ["warn_availability_on_static_initializer"]={ | ||
[a]="ignoring availability attribute ... [-Wavailability]", | [a]="ignoring availability attribute ... [-Wavailability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={zb}, | ||
[ | [q]=zb, | ||
[e]="ignoring availability attribute %select{on \'+load\' method|with constructor attribute|with destructor attribute}0", | [e]="ignoring availability attribute %select{on \'+load\' method|with constructor attribute|with destructor attribute}0", | ||
[g]= | [g]=t, | ||
[b]="ignoring availability attribute (?:on \'\\+load\' method|with constructor attribute|with destructor attribute)", | [b]="ignoring availability attribute (?:on \'\\+load\' method|with constructor attribute|with destructor attribute)", | ||
[h]= | [h]=rc, | ||
[f]=l, | [f]=l, | ||
[i]={"3bb4aa566e1f",1523921658,"[Availability] Improve availability to consider functions run at load time","[Availability] Improve availability to consider functions run at load time"}, | [i]={"3bb4aa566e1f",1523921658,"[Availability] Improve availability to consider functions run at load time","[Availability] Improve availability to consider functions run at load time"}, | ||
[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;"}}, | [j]={{w,10778,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\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 // ...\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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,342: | Line 8,342: | ||
["warn_availability_swift_unavailable_deprecated_only"]={ | ["warn_availability_swift_unavailable_deprecated_only"]={ | ||
[a]="only \'unavailable\' and \'deprecated\' are supported for Swift availability [-Wavailability]", | [a]="only \'unavailable\' and \'deprecated\' are supported for Swift availability [-Wavailability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={zb}, | ||
[ | [q]=zb, | ||
[e]="only \'unavailable\' and \'deprecated\' are supported for Swift availability", | [e]="only \'unavailable\' and \'deprecated\' are supported for Swift availability", | ||
[g]= | [g]=t, | ||
[b]="only \'unavailable\' and \'deprecated\' are supported for Swift availability", | [b]="only \'unavailable\' and \'deprecated\' are supported for Swift availability", | ||
[h]= | [h]=rc, | ||
[f]=l, | [f]=l, | ||
[i]={"260e96240297",1541990673,"Support Swift in platform availability attribute","Support Swift in platform availability attribute"}, | [i]={"260e96240297",1541990673,"Support Swift in platform availability attribute","Support Swift in platform availability attribute"}, | ||
[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);"}}, | [j]={{v,2642,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,359: | Line 8,359: | ||
["warn_availability_unknown_platform"]={ | ["warn_availability_unknown_platform"]={ | ||
[a]="unknown platform A in availability macro [-Wavailability]", | [a]="unknown platform A in availability macro [-Wavailability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={zb}, | ||
[ | [q]=zb, | ||
[e]="unknown platform %0 in availability macro", | [e]="unknown platform %0 in availability macro", | ||
[g]= | [g]=t, | ||
[b]="unknown platform (.*?) in availability macro", | [b]="unknown platform (.*?) in availability macro", | ||
[h]= | [h]=rc, | ||
[f]=l, | [f]=l, | ||
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify"}, | [i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify"}, | ||
[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;"}}, | [j]={{v,2619,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (AvailabilityAttr::getPrettyPlatformName(II->getName()).empty())\n S.Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Platform->Ident;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,376: | Line 8,376: | ||
["warn_availability_version_ordering"]={ | ["warn_availability_version_ordering"]={ | ||
[a]="feature cannot be ... in A version B before it was ... in version C; attribute ignored [-Wavailability]", | [a]="feature cannot be ... in A version B before it was ... in version C; attribute ignored [-Wavailability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={zb}, | ||
[ | [q]=zb, | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="feature cannot be (?:introduced|deprecated|obsoleted) in (.*?) version (.*?) before it was (?:introduced|deprecated|obsoleted) in version (.*?); attribute ignored", | [b]="feature cannot be (?:introduced|deprecated|obsoleted) in (.*?) version (.*?) before it was (?:introduced|deprecated|obsoleted) in version (.*?); attribute ignored", | ||
[h]= | [h]=rc, | ||
[f]=l, | [f]=l, | ||
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify"}, | [i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify"}, | ||
[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();"}}, | [j]={{v,2398,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n // ...\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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,393: | Line 8,393: | ||
["warn_avx_calling_convention"]={ | ["warn_avx_calling_convention"]={ | ||
[a]="AVX vector ... of type A without \'B\' enabled changes the ABI [-Wpsabi]", | [a]="AVX vector ... of type A without \'B\' enabled changes the ABI [-Wpsabi]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"psabi"}, | ||
[ | [q]="psabi", | ||
[e]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI", | [e]="AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI", | ||
[g]= | [g]=t, | ||
[b]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI", | [b]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wpsabi[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wpsabi[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error","Implement AVX ABI Warning/error"}, | [i]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error","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 // ...\n if (!CallerHasFeat && !CalleeHasFeat)\n return Diag.Report(CallLoc, diag::warn_avx_calling_convention) << IsArgument << Ty << Feature;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,410: | Line 8,410: | ||
["warn_bad_character_encoding"]={ | ["warn_bad_character_encoding"]={ | ||
[a]="illegal character encoding in character literal [-Winvalid-source-encoding]", | [a]="illegal character encoding in character literal [-Winvalid-source-encoding]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"invalid-source-encoding"}, | ||
[ | [q]="invalid-source-encoding", | ||
[e]="illegal character encoding in character literal", | [e]="illegal character encoding in character literal", | ||
[g]= | [g]=t, | ||
[b]="illegal character encoding in character literal", | [b]="illegal character encoding in character literal", | ||
[h]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non...","Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non-wide character literals with an unexpected encoding to a warning for compatibility with gcc and older versions of clang. <rdar://problem/10837678>."}, | [i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non...","Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non-wide character literals with an unexpected encoding to a warning for compatibility with gcc and older versions of clang. <rdar://problem/10837678>."}, | ||
[j]={{ | [j]={{Uc,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 // ...\n while (begin != end) {\n // Is this a span of non-escape characters?\n if (begin[0] != \'\\\\\') {\n // ...\n if (res != llvm::conversionOK) {\n // ...\n if (NoErrorOnBadEncoding)\n Msg = diag::warn_bad_character_encoding;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,427: | Line 8,427: | ||
["warn_bad_cxx_cast_nested_pointer_addr_space"]={ | ["warn_bad_cxx_cast_nested_pointer_addr_space"]={ | ||
[a]="... from A to B changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]", | [a]="... from A to B changes address space of nested pointers [-Wincompatible-pointer-types-discards-qualifiers]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"incompatible-pointer-types","incompatible-pointer-types-discards-qualifiers"}, | ||
[ | [q]="incompatible-pointer-types-discards-qualifiers", | ||
[e]="%select{reinterpret_cast|C-style cast}0 from %1 to %2 changes address space of nested pointers", | [e]="%select{reinterpret_cast|C-style cast}0 from %1 to %2 changes address space of nested pointers", | ||
[g]= | [g]=t, | ||
[b]="(?:reinterpret_cast|C\\-style cast) from (.*?) to (.*?) changes address space of nested pointers", | [b]="(?:reinterpret_cast|C\\-style cast) from (.*?) to (.*?) changes address space of nested pointers", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Bb,1576809732,cb,cb}, | ||
[j]={{sb,2583,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n while (!DestPtee.isNull() && !SrcPtee.isNull()) {\n if (DestPtee.getAddressSpace() != SrcPtee.getAddressSpace()) {\n Self.Diag(OpRange.getBegin(), diag::warn_bad_cxx_cast_nested_pointer_addr_space) << CStyle << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}, | [j]={{sb,2583,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,444: | Line 8,444: | ||
["warn_bad_function_cast"]={ | ["warn_bad_function_cast"]={ | ||
[a]="cast from function call of type A to non-matching type B [-Wbad-function-cast]", | [a]="cast from function call of type A to non-matching type B [-Wbad-function-cast]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"bad-function-cast"}, | ||
[ | [q]="bad-function-cast", | ||
[e]="cast from function call of type %0 to non-matching type %1", | [e]="cast from function call of type %0 to non-matching type %1", | ||
[g]= | [g]=t, | ||
[b]="cast from function call of type (.*?) to non\\-matching type (.*?)", | [b]="cast from function call of type (.*?) to non\\-matching type (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbad\\-function\\-cast[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbad\\-function\\-cast[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"91f548b04b7d",1345224154,"c: implement gcc\'s -Wbad-function-cast which warns","c: implement gcc\'s -Wbad-function-cast which warns"}, | [i]={"91f548b04b7d",1345224154,"c: implement gcc\'s -Wbad-function-cast which warns","c: implement gcc\'s -Wbad-function-cast which warns"}, | ||
[j]={{sb,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()))"},{sb,2906,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n/// non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_bad_function_cast) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}, | [j]={{sb,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()))"},{sb,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 // ...\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_bad_function_cast) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,462: | Line 8,462: | ||
["warn_bad_receiver_type"]={ | ["warn_bad_receiver_type"]={ | ||
[a]="receiver type A is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]", | [a]="receiver type A is not \'id\' or interface pointer, consider casting it to \'id\' [-Wreceiver-expr]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"receiver-expr"}, | ||
[ | [q]="receiver-expr", | ||
[e]="receiver type %0 is not \'id\' or interface pointer, consider casting it to \'id\'", | [e]="receiver type %0 is not \'id\' or interface pointer, consider casting it to \'id\'", | ||
[g]= | [g]=t, | ||
[b]="receiver type (.*?) is not \'id\' or interface pointer, consider casting it to \'id\'", | [b]="receiver type (.*?) is not \'id\' or interface pointer, consider casting it to \'id\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-expr[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-expr[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{vb,2914,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n // If we have a receiver expression, perform appropriate promotions\n // and determine receiver type.\n if (Receiver) {\n // If the receiver is an ObjC pointer, a block pointer, or an\n // __attribute__((NSObject)) pointer, we don\'t need to do any\n // special conversion in order to look up a receiver.\n if (ReceiverType->isObjCRetainableType()) {\n } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n Diag(Loc, diag::warn_bad_receiver_type) << ReceiverType << RecRange;"}}, | [j]={{vb,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 // ...\n // If we have a receiver expression, perform appropriate promotions\n // and determine receiver type.\n if (Receiver) {\n // ...\n // If the receiver is an ObjC pointer, a block pointer, or an\n // __attribute__((NSObject)) pointer, we don\'t need to do any\n // special conversion in order to look up a receiver.\n if (ReceiverType->isObjCRetainableType()) {\n // ...\n } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n // ...\n Diag(Loc, diag::warn_bad_receiver_type) << ReceiverType << RecRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,479: | Line 8,479: | ||
["warn_bad_string_encoding"]={ | ["warn_bad_string_encoding"]={ | ||
[a]="illegal character encoding in string literal [-Winvalid-source-encoding]", | [a]="illegal character encoding in string literal [-Winvalid-source-encoding]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"invalid-source-encoding"}, | ||
[ | [q]="invalid-source-encoding", | ||
[e]="illegal character encoding in string literal", | [e]="illegal character encoding in string literal", | ||
[g]= | [g]=t, | ||
[b]="illegal character encoding in string literal", | [b]="illegal character encoding in string literal", | ||
[h]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Winvalid\\-source\\-encoding[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non...","Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non-wide character literals with an unexpected encoding to a warning for compatibility with gcc and older versions of clang. <rdar://problem/10837678>."}, | [i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non...","Implement warning for non-wide string literals with an unexpected encoding. Downgrade error for non-wide character literals with an unexpected encoding to a warning for compatibility with gcc and older versions of clang. <rdar://problem/10837678>."}, | ||
[j]={{ | [j]={{Uc,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 // ...\n if (Diags) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,496: | Line 8,496: | ||
["warn_base_class_is_uninit"]={ | ["warn_base_class_is_uninit"]={ | ||
[a]="base class A is uninitialized when used here to access B [-Wuninitialized]", | [a]="base class A is uninitialized when used here to access B [-Wuninitialized]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,"uninitialized"}, | ||
[ | [q]="uninitialized", | ||
[e]="base class %0 is uninitialized when used here to access %q1", | [e]="base class %0 is uninitialized when used here to access %q1", | ||
[g]= | [g]=t, | ||
[b]="base class (.*?) is uninitialized when used here to access (.*?)", | [b]="base class (.*?) is uninitialized when used here to access (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"3630c399727a",1416539430,"Extend -Wuninitialized to warn when accessing uninitialized base classes in a","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","Extend -Wuninitialized to warn when accessing uninitialized base classes in a"}, | ||
[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;"}}, | [j]={{z,3836,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n // ...\n void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n // ...\n if (ImplicitCastExpr *BaseCast = dyn_cast<ImplicitCastExpr>(Base)) {\n // ...\n if (BaseCast->getCastKind() == CK_UncheckedDerivedToBase) {\n // ...\n if (T->isPointerType() && BaseClasses.count(T->getPointeeType())) {\n S.Diag(FieldME->getExprLoc(), diag::warn_base_class_is_uninit) << T->getPointeeType() << FoundVD;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,513: | Line 8,513: | ||
["warn_bind_ref_member_to_parameter"]={ | ["warn_bind_ref_member_to_parameter"]={ | ||
[a]="binding reference member A to stack allocated ... B [-Wdangling-field]", | [a]="binding reference member A to stack allocated ... B [-Wdangling-field]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"dangling","dangling-field"}, | ||
[ | [q]="dangling-field", | ||
[e]="binding reference member %0 to stack allocated %select{variable|parameter}2 %1", | [e]="binding reference member %0 to stack allocated %select{variable|parameter}2 %1", | ||
[g]= | [g]=t, | ||
[b]="binding reference member (.*?) to stack allocated (?:variable|parameter) (.*?)", | [b]="binding reference member (.*?) to stack allocated (?:variable|parameter) (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and","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","Add a simple new warning to catch blatantly dangling pointer and"}, | ||
[j]={{ | [j]={{bb,8226,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n // ...\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n // ...\n case LK_MemInitializer: {\n if (isa<MaterializeTemporaryExpr>(L)) {\n // ...\n } else {\n // ...\n if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,530: | Line 8,530: | ||
["warn_binding_null_to_reference"]={ | ["warn_binding_null_to_reference"]={ | ||
[a]="binding dereferenced null pointer to reference has undefined behavior [-Wnull-dereference]", | [a]="binding dereferenced null pointer to reference has undefined behavior [-Wnull-dereference]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"null-dereference"}, | ||
[ | [q]="null-dereference", | ||
[e]="binding dereferenced null pointer to reference has undefined behavior", | [e]="binding dereferenced null pointer to reference has undefined behavior", | ||
[g]= | [g]=t, | ||
[b]="binding dereferenced null pointer to reference has undefined behavior", | [b]="binding dereferenced null pointer to reference has undefined behavior", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"2eeddfb1efc8",1463247854,"Warn when a reference is bound to an empty l-value (dereferenced null pointer).","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).","Warn when a reference is bound to an empty l-value (dereferenced null pointer)."}, | ||
[j]={{ | [j]={{bb,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]={ | [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]"} | ["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]"} | ||
Line 8,547: | Line 8,547: | ||
["warn_bitfield_too_small_for_enum"]={ | ["warn_bitfield_too_small_for_enum"]={ | ||
[a]="bit-field A is not wide enough to store all enumerators of B [-Wbitfield-enum-conversion]", | [a]="bit-field A is not wide enough to store all enumerators of B [-Wbitfield-enum-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"bitfield-enum-conversion",Pb,Sb}, | ||
[ | [q]="bitfield-enum-conversion", | ||
[e]="bit-field %0 is not wide enough to store all enumerators of %1", | [e]="bit-field %0 is not wide enough to store all enumerators of %1", | ||
[g]= | [g]=t, | ||
[b]="bit\\-field (.*?) is not wide enough to store all enumerators of (.*?)", | [b]="bit\\-field (.*?) is not wide enough to store all enumerators of (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Ic, | ||
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values","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","Warn on enum assignment to bitfields that can\'t fit all values"}, | ||
[j]={{G,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]={{G,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 // ...\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 // ...\n // Check the bitwidth.\n if (BitsNeeded > FieldWidth) {\n // ...\n S.Diag(InitLoc, diag::warn_bitfield_too_small_for_enum) << Bitfield << ED;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,565: | Line 8,565: | ||
["warn_bitfield_width_exceeds_type_width"]={ | ["warn_bitfield_width_exceeds_type_width"]={ | ||
[a]="width of bit-field A (B bits) exceeds the width of its type; value will be truncated to C bitD [-Wbitfield-width]", | [a]="width of bit-field A (B bits) exceeds the width of its type; value will be truncated to C bitD [-Wbitfield-width]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"bitfield-width"}, | ||
[ | [q]="bitfield-width", | ||
[e]="width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", | [e]="width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", | ||
[g]= | [g]=t, | ||
[b]="width of bit\\-field (.*?) \\((.*?) bits\\) exceeds the width of its type; value will be truncated to (.*?) bit(.*?)", | [b]="width of bit\\-field (.*?) \\((.*?) bits\\) exceeds the width of its type; value will be truncated to (.*?) bit(.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-width[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-width[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic","C11 _Bool bitfield diagnostic"}, | [i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic","C11 _Bool bitfield diagnostic"}, | ||
[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;"}}, | [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 // ...\n if (!FieldTy->isDependentType()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,582: | Line 8,582: | ||
["warn_bitwise_instead_of_logical"]={ | ["warn_bitwise_instead_of_logical"]={ | ||
[a]="use of bitwise \'A\' with boolean operands [-Wbitwise-instead-of-logical]", | [a]="use of bitwise \'A\' with boolean operands [-Wbitwise-instead-of-logical]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Z,hb,"bitwise-instead-of-logical","bool-operation",rb}, | ||
[ | [q]="bitwise-instead-of-logical", | ||
[e]="use of bitwise \'%0\' with boolean operands", | [e]="use of bitwise \'%0\' with boolean operands", | ||
[g]= | [g]=t, | ||
[b]="use of bitwise \'(.*?)\' with boolean operands", | [b]="use of bitwise \'(.*?)\' with boolean operands", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-instead\\-of\\-logical[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-instead\\-of\\-logical[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[j]={{G,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]={{G,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,600: | Line 8,600: | ||
["warn_bitwise_negation_bool"]={ | ["warn_bitwise_negation_bool"]={ | ||
[a]="bitwise negation of a boolean expression... did you mean logical negation? [-Wbool-operation]", | [a]="bitwise negation of a boolean expression... did you mean logical negation? [-Wbool-operation]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Z,hb,"bool-operation",rb}, | ||
[ | [q]="bool-operation", | ||
[e]="bitwise negation of a boolean expression%select{;| always evaluates to \'true\';}0 did you mean logical negation?", | [e]="bitwise negation of a boolean expression%select{;| always evaluates to \'true\';}0 did you mean logical negation?", | ||
[g]= | [g]=t, | ||
[b]="bitwise negation of a boolean expression(?:;| always evaluates to \'true\';) did you mean logical negation\\?", | [b]="bitwise negation of a boolean expression(?:;| always evaluates to \'true\';) did you mean logical negation\\?", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbool\\-operation[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbool\\-operation[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[j]={{G,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]={{G,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,618: | Line 8,618: | ||
["warn_bitwise_op_in_bitwise_op"]={ | ["warn_bitwise_op_in_bitwise_op"]={ | ||
[a]="\'A\' within \'B\' [-Wbitwise-op-parentheses]", | [a]="\'A\' within \'B\' [-Wbitwise-op-parentheses]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Z,hb,"bitwise-op-parentheses","parentheses"}, | ||
[ | [q]="bitwise-op-parentheses", | ||
[e]="\'%0\' within \'%1\'", | [e]="\'%0\' within \'%1\'", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' within \'(.*?)\'", | [b]="\'(.*?)\' within \'(.*?)\'", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-op\\-parentheses[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-op\\-parentheses[^\\]]*\\]", | ||
Line 8,636: | Line 8,636: | ||
["warn_block_capture_autoreleasing"]={ | ["warn_block_capture_autoreleasing"]={ | ||
[a]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]", | [a]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Wblock-capture-autoreleasing]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"block-capture-autoreleasing"}, | ||
[ | [q]="block-capture-autoreleasing", | ||
[e]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs", | [e]="block captures an autoreleasing out-parameter, which may result in use-after-free bugs", | ||
[g]= | [g]=t, | ||
[b]="block captures an autoreleasing out\\-parameter, which may result in use\\-after\\-free bugs", | [b]="block captures an autoreleasing out\\-parameter, which may result in use\\-after\\-free bugs", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wblock\\-capture\\-autoreleasing[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wblock\\-capture\\-autoreleasing[^\\]]*\\]", | ||
[f]=zc, | [f]=zc, | ||
[i]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured","[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"}, | [i]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured","[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"}, | ||
[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);"}}, | [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 // ...\n // Warn about implicitly autoreleasing indirect parameters captured by blocks.\n if (const auto *PT = CaptureType->getAs<PointerType>()) {\n // ...\n if (!Invalid && PointeeTy->getAs<ObjCObjectPointerType>() && PointeeTy.getObjCLifetime() == Qualifiers::OCL_Autoreleasing && !S.Context.hasDirectOwnershipQualifier(PointeeTy)) {\n if (BuildAndDiagnose) {\n // ...\n S.Diag(Loc, diag::warn_block_capture_autoreleasing);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,653: | Line 8,653: | ||
["warn_block_literal_attributes_on_omitted_return_type"]={ | ["warn_block_literal_attributes_on_omitted_return_type"]={ | ||
[a]="attribute A ignored, because it cannot be applied to omitted return type [-Wignored-attributes]", | [a]="attribute A ignored, because it cannot be applied to omitted return type [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="attribute %0 ignored, because it cannot be applied to omitted return type", | [e]="attribute %0 ignored, because it cannot be applied to omitted return type", | ||
[g]= | [g]=t, | ||
[b]="attribute (.*?) ignored, because it cannot be applied to omitted return type", | [b]="attribute (.*?) ignored, because it cannot be applied to omitted return type", | ||
[h]= | [h]=N, | ||
[f]=m, | [f]=m, | ||
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted","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","Block: Fix a crash when we have type attributes or qualifiers with omitted"}, | ||
[j]={{ | [j]={{ib,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 // ...\n for (ParsedAttr &AL : declarator.getMutableDeclSpec().getAttributes()) {\n // ...\n S.Diag(AL.getLoc(), diag::warn_block_literal_attributes_on_omitted_return_type) << AL;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,670: | Line 8,670: | ||
["warn_block_literal_qualifiers_on_omitted_return_type"]={ | ["warn_block_literal_qualifiers_on_omitted_return_type"]={ | ||
[a]="\'A\' qualifier on omitted return type B has no effect [-Wignored-qualifiers]", | [a]="\'A\' qualifier on omitted return type B has no effect [-Wignored-qualifiers]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={m,Z,Xc,"ignored-qualifiers"}, | ||
[ | [q]="ignored-qualifiers", | ||
[e]="\'%0\' qualifier on omitted return type %1 has no effect", | [e]="\'%0\' qualifier on omitted return type %1 has no effect", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' qualifier on omitted return type (.*?) has no effect", | [b]="\'(.*?)\' qualifier on omitted return type (.*?) has no effect", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted","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","Block: Fix a crash when we have type attributes or qualifiers with omitted"}, | ||
[j]={{ | [j]={{ib,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 // ...\n diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, (unsigned)-1, diag::warn_block_literal_qualifiers_on_omitted_return_type);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,687: | Line 8,687: | ||
["warn_bool_switch_condition"]={ | ["warn_bool_switch_condition"]={ | ||
[a]="switch condition has boolean value [-Wswitch-bool]", | [a]="switch condition has boolean value [-Wswitch-bool]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,"switch-bool"}, | ||
[ | [q]="switch-bool", | ||
[e]="switch condition has boolean value", | [e]="switch condition has boolean value", | ||
[g]= | [g]=t, | ||
[b]="switch condition has boolean value", | [b]="switch condition has boolean value", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wswitch\\-bool[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wswitch\\-bool[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan.","Fix for PR5190, Credit to Zhanyong Wan."}, | [i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan.","Fix for PR5190, Credit to Zhanyong Wan."}, | ||
[j]={{ | [j]={{T,1111,"StmtResult Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc) {\n // ...\n if (CondExpr && !CondExpr->isTypeDependent()) {\n // ...\n if (CondExpr->isKnownToHaveBooleanValue()) {\n // ...\n Diag(SwitchLoc, diag::warn_bool_switch_condition) << CondExpr->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:81:3: warning: switch condition has boolean value [-Wswitch-bool]"} | ["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:81:3: warning: switch condition has boolean value [-Wswitch-bool]"} | ||
Line 8,704: | Line 8,704: | ||
["warn_braces_around_init"]={ | ["warn_braces_around_init"]={ | ||
[a]="braces around ...initializer [-Wbraced-scalar-init]", | [a]="braces around ...initializer [-Wbraced-scalar-init]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"braced-scalar-init"}, | ||
[ | [q]="braced-scalar-init", | ||
[e]="braces around %select{scalar |}0initializer", | [e]="braces around %select{scalar |}0initializer", | ||
[g]= | [g]=t, | ||
[b]="braces around (?:scalar |)initializer", | [b]="braces around (?:scalar |)initializer", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbraced\\-scalar\\-init[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbraced\\-scalar\\-init[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[j]={{ | [j]={{bb,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 // ...\n case InitializedEntity::EK_VectorElement:\n case InitializedEntity::EK_ComplexElement:\n case InitializedEntity::EK_ArrayElement:\n case InitializedEntity::EK_Parameter:\n case InitializedEntity::EK_Parameter_CF_Audited:\n case InitializedEntity::EK_TemplateParameter:\n case InitializedEntity::EK_Result:\n case InitializedEntity::EK_ParenAggInitMember:\n // ...\n DiagID = diag::warn_braces_around_init;"},{bb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,721: | Line 8,721: | ||
["warn_break_binds_to_switch"]={ | ["warn_break_binds_to_switch"]={ | ||
[a]="\'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]", | [a]="\'break\' is bound to loop, GCC binds it to switch [-Wgcc-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Pc}, | ||
[ | [q]=Pc, | ||
[e]="\'break\' is bound to loop, GCC binds it to switch", | [e]="\'break\' is bound to loop, GCC binds it to switch", | ||
[g]= | [g]=t, | ||
[b]="\'break\' is bound to loop, GCC binds it to switch", | [b]="\'break\' is bound to loop, GCC binds it to switch", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)","Fix to PR8880 (clang dies processing a for loop)"}, | [i]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)","Fix to PR8880 (clang dies processing a for loop)"}, | ||
[j]={{ | [j]={{T,2121,"void Sema::CheckBreakContinueBinding(Expr *E) {\n // ...\n if (BCFinder.BreakFound() && BreakParent) {\n if (BreakParent->getFlags() & Scope::SwitchScope) {\n Diag(BCFinder.GetBreakLoc(), diag::warn_break_binds_to_switch);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,738: | Line 8,738: | ||
["warn_builtin_chk_overflow"]={ | ["warn_builtin_chk_overflow"]={ | ||
[a]="\'A\' will always overflow; destination buffer has size B, but size argument is C [-Wbuiltin-memcpy-chk-size]", | [a]="\'A\' will always overflow; destination buffer has size B, but size argument is C [-Wbuiltin-memcpy-chk-size]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"builtin-memcpy-chk-size"}, | ||
[ | [q]="builtin-memcpy-chk-size", | ||
[e]="\'%0\' will always overflow; destination buffer has size %1, but size argument is %2", | [e]="\'%0\' will always overflow; destination buffer has size %1, but size argument is %2", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)", | [b]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-memcpy\\-chk\\-size[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-memcpy\\-chk\\-size[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"}, | [i]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"}, | ||
[j]={{G,1276,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n case Builtin::BI__builtin___mempcpy_chk: {\n DiagID = diag::warn_builtin_chk_overflow;"},{G,1286,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n case Builtin::BI__builtin___vsnprintf_chk: {\n DiagID = diag::warn_builtin_chk_overflow;"}}, | [j]={{G,1276,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n // ...\n case Builtin::BI__builtin___memcpy_chk:\n case Builtin::BI__builtin___memmove_chk:\n case Builtin::BI__builtin___memset_chk:\n case Builtin::BI__builtin___strlcat_chk:\n case Builtin::BI__builtin___strlcpy_chk:\n case Builtin::BI__builtin___strncat_chk:\n case Builtin::BI__builtin___strncpy_chk:\n case Builtin::BI__builtin___stpncpy_chk:\n case Builtin::BI__builtin___memccpy_chk:\n case Builtin::BI__builtin___mempcpy_chk: {\n DiagID = diag::warn_builtin_chk_overflow;"},{G,1286,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n // ...\n case Builtin::BI__builtin___snprintf_chk:\n case Builtin::BI__builtin___vsnprintf_chk: {\n DiagID = diag::warn_builtin_chk_overflow;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,755: | Line 8,755: | ||
["warn_builtin_unknown"]={ | ["warn_builtin_unknown"]={ | ||
[a]="use of unknown builtin A [-Wimplicit-function-declaration]", | [a]="use of unknown builtin A [-Wimplicit-function-declaration]", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=Rc, | ||
[ | [r]={Z,hb,"implicit","implicit-function-declaration",rb}, | ||
[ | [q]="implicit-function-declaration", | ||
[e]="use of unknown builtin %0", | [e]="use of unknown builtin %0", | ||
[g]= | [g]=ad, | ||
[b]="use of unknown builtin (.*?)", | [b]="use of unknown builtin (.*?)", | ||
[h]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"56fbc37bbba3",1254172459,"Provide a custom diagnostic when code tries to use an unknown builtin","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","Provide a custom diagnostic when code tries to use an unknown builtin"}, | ||
[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;"}}, | [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 // ...\n if (II.getName().startswith(\"__builtin_\"))\n diag_id = diag::warn_builtin_unknown;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,772: | Line 8,772: | ||
["warn_c17_compat_ellipsis_only_parameter"]={ | ["warn_c17_compat_ellipsis_only_parameter"]={ | ||
[a]="\'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="\'...\' as the only parameter of a function is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="\'...\' as the only parameter of a function is incompatible with C standards before C2x", | [e]="\'...\' as the only parameter of a function is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="\'\\.\\.\\.\' as the only parameter of a function is incompatible with C standards before C2x", | [b]="\'\\.\\.\\.\' as the only parameter of a function is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{ib,5445,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n // strict prototypes as in C2x because it allows a function definition to\n // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n // ...\n } else {\n // 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]={ | [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]"} | ["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]"} | ||
Line 8,790: | Line 8,790: | ||
["warn_c17_compat_static_assert_no_message"]={ | ["warn_c17_compat_static_assert_no_message"]={ | ||
[a]="\'_Static_assert\' with no message is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="\'_Static_assert\' with no message is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="\'_Static_assert\' with no message is incompatible with C standards before C2x", | [e]="\'_Static_assert\' with no message is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="\'_Static_assert\' with no message is incompatible with C standards before C2x", | [b]="\'_Static_assert\' with no message is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]= | [f]=U, | ||
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions."}, | [i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[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 // ...\n if (Tok.is(tok::r_paren)) {\n // ...\n if (getLangOpts().CPlusPlus17)\n // ...\n else if (getLangOpts().CPlusPlus)\n // ...\n else if (getLangOpts().C2x)\n DiagVal = diag::warn_c17_compat_static_assert_no_message;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,808: | Line 8,808: | ||
["warn_c2x_compat_bitint_suffix"]={ | ["warn_c2x_compat_bitint_suffix"]={ | ||
[a]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x", | [e]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x", | [b]="\'_BitInt\' suffix for literals is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=m, | [f]=m, | ||
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt","Implement literal suffixes for _BitInt"}, | [i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt","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);"},{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);"}}, | [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 // ...\n case tok::numeric_constant: {\n // ...\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 // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,826: | Line 8,826: | ||
["warn_c2x_compat_digit_separator"]={ | ["warn_c2x_compat_digit_separator"]={ | ||
[a]="digit separators are incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="digit separators are incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="digit separators are incompatible with C standards before C2x", | [e]="digit separators are incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="digit separators are incompatible with C standards before C2x", | [b]="digit separators are incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=H, | [f]=H, | ||
[i]={"e44831005905",1615551663,"Add support for digit separators in C2x.","Add support for digit separators in C2x."}, | [i]={"e44831005905",1615551663,"Add support for digit separators in C2x.","Add support for digit separators in C2x."}, | ||
[j]={{qb,1963,"/// LexNumericConstant - Lex the remainder of a integer or floating point\n/// constant. From[-1] is the first character lexed. Return the end of the\n/// constant.\nbool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {\n // If we have a digit separator, continue.\n if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n if (isAsciiIdentifierContinue(Next)) {\n if (!isLexingRawMode())\n Diag(CurPtr, LangOpts.CPlusPlus ? diag::warn_cxx11_compat_digit_separator : diag::warn_c2x_compat_digit_separator);"}}, | [j]={{qb,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 // ...\n // If we have a digit separator, continue.\n if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,844: | Line 8,844: | ||
["warn_c2x_compat_empty_initializer"]={ | ["warn_c2x_compat_empty_initializer"]={ | ||
[a]="use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="use of an empty initializer is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="use of an empty initializer is incompatible with C standards before C2x", | [e]="use of an empty initializer is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="use of an empty initializer is incompatible with C standards before C2x", | [b]="use of an empty initializer is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]= | [f]=U, | ||
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)","[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)","[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,862: | Line 8,862: | ||
["warn_c2x_compat_keyword"]={ | ["warn_c2x_compat_keyword"]={ | ||
[a]="\'A\' is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="\'A\' is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="\'%0\' is incompatible with C standards before C2x", | [e]="\'%0\' is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' is incompatible with C standards before C2x", | [b]="\'(.*?)\' is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]= | [f]=U, | ||
[i]={"06174134e418",1677335266,"[C2x] Implement support for revised spelling of keywords","[C2x] Implement support for revised spelling of keywords"}, | [i]={"06174134e418",1677335266,"[C2x] Implement support for revised spelling of keywords","[C2x] Implement support for revised spelling of keywords"}, | ||
[j]={{ | [j]={{lc,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 // ...\n while (true) {\n // ...\n case tok::kw_thread_local:\n if (getLangOpts().C2x)\n Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{lc,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 // ...\n while (true) {\n // ...\n case tok::kw_bool:\n if (getLangOpts().C2x)\n Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{lc,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 // ...\n if (getLangOpts().C2x && !II->getName().startswith(\"__\"))\n Diag(Tok.getLocation(), diag::warn_c2x_compat_keyword) << Tok.getName();"},{lc,7960,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n // ...\n if (Tok.is(tok::kw__ExtInt)) {\n // ...\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 // ...\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();"},{Sc,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 // ...\n case tok::kw_nullptr:\n if (getLangOpts().CPlusPlus)\n // ...\n else\n Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"},{Sc,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 // ...\n if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n // ...\n else if (getLangOpts().C2x && OpTok.is(tok::kw_alignof))\n Diag(OpTok, diag::warn_c2x_compat_keyword) << OpTok.getName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,880: | Line 8,880: | ||
["warn_c2x_compat_label_end_of_compound_statement"]={ | ["warn_c2x_compat_label_end_of_compound_statement"]={ | ||
[a]="label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="label at end of compound statement is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="label at end of compound statement is incompatible with C standards before C2x", | [e]="label at end of compound statement is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="label at end of compound statement is incompatible with C standards before C2x", | [b]="label at end of compound statement is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]= | [f]=U, | ||
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl."}, | [i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,898: | Line 8,898: | ||
["warn_c2x_compat_literal_ucn_control_character"]={ | ["warn_c2x_compat_literal_ucn_control_character"]={ | ||
[a]="universal character name referring to a control character is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="universal character name referring to a control character is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="universal character name referring to a control character is incompatible with C standards before C2x", | [e]="universal character name referring to a control character is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="universal character name referring to a control character is incompatible with C standards before C2x", | [b]="universal character name referring to a control character is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=H, | [f]=H, | ||
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN","[Clang] Correctly handle $, @, and ` when represented as UCN"}, | [i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN","[Clang] Correctly handle $, @, and ` when represented as UCN"}, | ||
[j]={{ | [j]={{Uc,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 // ...\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 // ...\n if (Diags) {\n // ...\n if (UcnVal >= 0x20 && UcnVal < 0x7f)\n // ...\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"]={ | ||
[a]="specifying character \'A\' with a universal character name is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="specifying character \'A\' with a universal character name is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="specifying character \'%0\' with a universal character name is incompatible with C standards before C2x", | [e]="specifying character \'%0\' with a universal character name is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="specifying character \'(.*?)\' with a universal character name is incompatible with C standards before C2x", | [b]="specifying character \'(.*?)\' with a universal character name is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=H, | [f]=H, | ||
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN","[Clang] Correctly handle $, @, and ` when represented as UCN"}, | [i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN","[Clang] Correctly handle $, @, and ` when represented as UCN"}, | ||
[j]={{ | [j]={{Uc,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 // ...\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 // ...\n if (Diags) {\n // ...\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"]={ | ||
[a]="use of a \'#...\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="use of a \'#...\' directive is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C standards before C2x", | [e]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C standards before C2x", | [b]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{Y,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 // ...\n while (true) {\n // ...\n if (Directive.startswith(\"if\")) {\n // ...\n } else if (Directive[0] == \'e\') {\n // ...\n if (Sub == \"ndif\") { // \"endif\"\n // ...\n } else if (Sub == \"lse\") { // \"else\".\n // ...\n } else if (Sub == \"lif\") { // \"elif\".\n // ...\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n // ...\n if (LangOpts.CPlusPlus)\n // ...\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{Y,3457,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n // ...\n case PED_Elifdef:\n case PED_Elifndef:\n // ...\n if (LangOpts.CPlusPlus)\n // ...\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,946: | Line 8,946: | ||
["warn_c2x_compat_warning_directive"]={ | ["warn_c2x_compat_warning_directive"]={ | ||
[a]="#warning is incompatible with C standards before C2x [-Wpre-c2x-compat]", | [a]="#warning is incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={ab,Db}, | ||
[ | [q]=ab, | ||
[e]="#warning is incompatible with C standards before C2x", | [e]="#warning is incompatible with C standards before C2x", | ||
[g]= | [g]=t, | ||
[b]="\\#warning is incompatible with C standards before C2x", | [b]="\\#warning is incompatible with C standards before C2x", | ||
[h]=Cb, | [h]=Cb, | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{ | [j]={{Y,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 // ...\n default:\n // ...\n case tok::pp_warning:\n if (LangOpts.CPlusPlus)\n // ...\n else\n Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,964: | Line 8,964: | ||
["warn_c2x_keyword"]={ | ["warn_c2x_keyword"]={ | ||
[a]="\'A\' is a keyword in C2x [-Wc2x-compat]", | [a]="\'A\' is a keyword in C2x [-Wc2x-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"c2x-compat"}, | ||
[ | [q]="c2x-compat", | ||
[e]="\'%0\' is a keyword in C2x", | [e]="\'%0\' is a keyword in C2x", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' is a keyword in C2x", | [b]="\'(.*?)\' is a keyword in C2x", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wc2x\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wc2x\\-compat[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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 // ...\n if (LangOpts.CPlusPlus) {\n // ...\n } else {\n // ...\n if ((Flags & KEYC2X) == KEYC2X)\n return diag::warn_c2x_keyword;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/nullptr-prec2x.c"]={"clang/test/Sema/nullptr-prec2x.c:5:5: warning: \'nullptr\' is a keyword in C2x [-Wc2x-compat]"} | ["clang/test/Sema/nullptr-prec2x.c"]={"clang/test/Sema/nullptr-prec2x.c:5:5: warning: \'nullptr\' is a keyword in C2x [-Wc2x-compat]"} | ||
Line 8,982: | Line 8,982: | ||
["warn_c99_compat_unicode_id"]={ | ["warn_c99_compat_unicode_id"]={ | ||
[a]="... is incompatible with C99 [-Wc99-compat]", | [a]="... is incompatible with C99 [-Wc99-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Dc}, | ||
[ | [q]=Dc, | ||
[e]="%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", | [e]="%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", | ||
[g]= | [g]=t, | ||
[b]="(?:using this character in an identifier|starting an identifier with this character) is incompatible with C99", | [b]="(?:using this character in an identifier|starting an identifier with this character) is incompatible with C99", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11).","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).","Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."}, | ||
[j]={{qb,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())) {"},{qb,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;"},{qb,1584,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n // Check C99 compatibility.\n if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n if (!C99AllowedIDChars.contains(C)) {\n } else if (IsFirst && C99DisallowedInitialIDChars.contains(C)) {\n Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotStartIdentifier;"}}, | [j]={{qb,1569,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n // ...\n if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {"},{qb,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 // ...\n if (!C99AllowedIDChars.contains(C)) {\n Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotAppearInIdentifier;"},{qb,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 // ...\n if (!C99AllowedIDChars.contains(C)) {\n // ...\n } else if (IsFirst && C99DisallowedInitialIDChars.contains(C)) {\n Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotStartIdentifier;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,000: | Line 9,000: | ||
["warn_c99_compat_unicode_literal"]={ | ["warn_c99_compat_unicode_literal"]={ | ||
[a]="unicode literals are incompatible with C99 [-Wc99-compat]", | [a]="unicode literals are incompatible with C99 [-Wc99-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Dc}, | ||
[ | [q]=Dc, | ||
[e]="unicode literals are incompatible with C99", | [e]="unicode literals are incompatible with C99", | ||
[g]= | [g]=t, | ||
[b]="unicode literals are incompatible with C99", | [b]="unicode literals are incompatible with C99", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={"06d274fdb7c8",1363024902,"Add -Wc99-compat warning for C11 unicode string and character literals.","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.","Add -Wc99-compat warning for C11 unicode string and character literals."}, | ||
[j]={{qb,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);"},{qb,2304,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n if (!isLexingRawMode()) {\n if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"}}, | [j]={{qb,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 // ...\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);"},{qb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,018: | Line 9,018: | ||
["warn_c99_keyword"]={ | ["warn_c99_keyword"]={ | ||
[a]="\'A\' is a keyword in C99 [-Wc99-compat]", | [a]="\'A\' is a keyword in C99 [-Wc99-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Dc}, | ||
[ | [q]=Dc, | ||
[e]="\'%0\' is a keyword in C99", | [e]="\'%0\' is a keyword in C99", | ||
[g]= | [g]=t, | ||
[b]="\'(.*?)\' is a keyword in C99", | [b]="\'(.*?)\' is a keyword in C99", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | ||
[f]=H, | [f]=H, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[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;"}}, | [j]={{"clang/lib/Basic/IdentifierTable.cpp",917,"#include \"clang/Basic/TokenKinds.def\"\n // ...\n if (LangOpts.CPlusPlus) {\n // ...\n } else {\n if ((Flags & KEYC99) == KEYC99)\n return diag::warn_c99_keyword;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,036: | Line 9,036: | ||
["warn_c_kext"]={ | ["warn_c_kext"]={ | ||
[a]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only", | [a]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only", | [e]="ignoring -fapple-kext which is valid for C++ and Objective-C++ only", | ||
[g]= | [g]=t, | ||
[b]="ignoring \\-fapple\\-kext which is valid for C\\+\\+ and Objective\\-C\\+\\+ only", | [b]="ignoring \\-fapple\\-kext which is valid for C\\+\\+ and Objective\\-C\\+\\+ only", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=m, | [f]=m, | ||
[i]={"f7f04458b3d1",1296777684,"-fapple-kext cannot have \'weak\' visibility in this","-fapple-kext cannot have \'weak\' visibility in this"}, | [i]={"f7f04458b3d1",1296777684,"-fapple-kext cannot have \'weak\' visibility in this","-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 // ...\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"]={ | ||
[a]="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]", | [a]="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]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"call-to-pure-virtual-from-ctor-dtor"}, | ||
[ | [q]="call-to-pure-virtual-from-ctor-dtor", | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="call to pure virtual member function (.*?) has undefined behavior; overrides of (.*?) in subclasses are not available in the (?:constructor|destructor) of (.*?)", | [b]="call to pure virtual member function (.*?) has undefined behavior; overrides of (.*?) in subclasses are not available in the (?:constructor|destructor) of (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcall\\-to\\-pure\\-virtual\\-from\\-ctor\\-dtor[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcall\\-to\\-pure\\-virtual\\-from\\-ctor\\-dtor[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"47061ee5bc64",1304691931,"Warn when trying to call a pure virtual member function in a class from the class constructor/destru...","Warn when trying to call a pure virtual member function in a class from the class constructor/destructor. Fixes PR7966."}, | [i]={"47061ee5bc64",1304691931,"Warn when trying to call a pure virtual member function in a class from the class constructor/destru...","Warn when trying to call a pure virtual member function in a class from the class constructor/destructor. Fixes PR7966."}, | ||
[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();"}}, | [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 // ...\n if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,065: | Line 9,065: | ||
["warn_call_wrong_number_of_arguments"]={ | ["warn_call_wrong_number_of_arguments"]={ | ||
[a]="too ... arguments in call to A", | [a]="too ... arguments in call to A", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="too %select{few|many}0 arguments in call to %1", | [e]="too %select{few|many}0 arguments in call to %1", | ||
[g]= | [g]=t, | ||
[b]="too (?:few|many) arguments in call to (.*?)", | [b]="too (?:few|many) arguments in call to (.*?)", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=l, | [f]=l, | ||
[i]={"d8e97def584d",1238686630,"When calling a function without a prototype for which we have a","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","When calling a function without a prototype for which we have a"}, | ||
[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();"}}, | [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 // ...\n if (Proto) {\n // ...\n } else {\n // ...\n if (FDecl) {\n // ...\n if (FDecl->hasBody(Def) && Args.size() != Def->param_size()) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 9,080: | Line 9,080: | ||
["warn_called_once_gets_called_twice"]={ | ["warn_called_once_gets_called_twice"]={ | ||
[a]="A parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]", | [a]="A parameter marked \'called_once\' is called twice [-Wcalled-once-parameter]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Rb}, | ||
[ | [q]=Rb, | ||
[e]="%0 parameter marked \'called_once\' is called twice", | [e]="%0 parameter marked \'called_once\' is called twice", | ||
[g]= | [g]=t, | ||
[b]="(.*?) parameter marked \'called_once\' is called twice", | [b]="(.*?) parameter marked \'called_once\' is called twice", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{ | [j]={{L,1690,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,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]={ | [k]={ | ||
[ | [Jc]={"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"]={ | ||
[a]="...A parameter marked \'called_once\' is never called [-Wcalled-once-parameter]", | [a]="...A parameter marked \'called_once\' is never called [-Wcalled-once-parameter]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Rb}, | ||
[ | [q]=Rb, | ||
[e]="%select{|captured }1%0 parameter marked \'called_once\' is never called", | [e]="%select{|captured }1%0 parameter marked \'called_once\' is never called", | ||
[g]= | [g]=t, | ||
[b]="(?:|captured )(.*?) parameter marked \'called_once\' is never called", | [b]="(?:|captured )(.*?) parameter marked \'called_once\' is never called", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{ | [j]={{L,1700,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,1730,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,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]={ | [k]={ | ||
[ | [Jc]={"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"]={ | ||
[a]="A parameter marked \'called_once\' is never ... when ... [-Wcalled-once-parameter]", | [a]="A parameter marked \'called_once\' is never ... when ... [-Wcalled-once-parameter]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Rb}, | ||
[ | [q]=Rb, | ||
[e]="%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", | [e]="%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", | ||
[g]= | [g]=t, | ||
[b]="(.*?) 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)", | [b]="(.*?) 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)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcalled\\-once\\-parameter[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{ | [j]={{L,1711,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,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]={ | [k]={ | ||
[ | [Jc]={"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"]={ | ||
[a]="cannot pass object of ... type A through variadic ...; call will abort at runtime [-Wnon-pod-varargs]", | [a]="cannot pass object of ... type A through variadic ...; call will abort at runtime [-Wnon-pod-varargs]", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=Rc, | ||
[ | [r]={"class-varargs","non-pod-varargs"}, | ||
[ | [q]="non-pod-varargs", | ||
[e]="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]="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", | ||
[g]= | [g]=ad, | ||
[b]="cannot pass object of (?:non\\-POD|non\\-trivial) type (.*?) through variadic (?:function|block|method|constructor); call will abort at runtime", | [b]="cannot pass object of (?:non\\-POD|non\\-trivial) type (.*?) through variadic (?:function|block|method|constructor); call will abort at runtime", | ||
[h]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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);"}}, | [j]={{D,1013,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n // ...\n case VAK_Undefined:\n case VAK_MSVCUndefined:\n DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg) << getLangOpts().CPlusPlus11 << Ty << CT);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,148: | Line 9,148: | ||
["warn_cannot_resolve_lock"]={ | ["warn_cannot_resolve_lock"]={ | ||
[a]="cannot resolve lock expression [-Wthread-safety-analysis]", | [a]="cannot resolve lock expression [-Wthread-safety-analysis]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"thread-safety",Cc}, | ||
[ | [q]=Cc, | ||
[e]="cannot resolve lock expression", | [e]="cannot resolve lock expression", | ||
[g]= | [g]=t, | ||
[b]="cannot resolve lock expression", | [b]="cannot resolve lock expression", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"ff2f3f810525",1315585315,"Thread safety: This patch deals with previously unhandled cases when building lock expressions. We n...","Thread safety: This patch deals with previously unhandled cases when building lock expressions. We now resolve this expressions, avoid crashing when encountering cast expressions, and have a diagnostic for unresolved lock expressions"}, | [i]={"ff2f3f810525",1315585315,"Thread safety: This patch deals with previously unhandled cases when building lock expressions. We n...","Thread safety: This patch deals with previously unhandled cases when building lock expressions. We now resolve this expressions, avoid crashing when encountering cast expressions, and have a diagnostic for unresolved lock expressions"}, | ||
[j]={{ | [j]={{L,1864,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n // ...\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"]={ | ||
[a]="empty case range specified", | [a]="empty case range specified", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="empty case range specified", | [e]="empty case range specified", | ||
[g]= | [g]=t, | ||
[b]="empty case range specified", | [b]="empty case range specified", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{ | [j]={{T,1420,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n // ...\n if (!HasDependentValue) {\n // ...\n // Detect duplicate case ranges, which usually don\'t exist at all in\n // the first place.\n if (!CaseRanges.empty()) {\n // ...\n for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n // ...\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]={ | [k]={ | ||
["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:15:8: warning: empty case range specified"} | ["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:15:8: warning: empty case range specified"} | ||
Line 9,178: | Line 9,178: | ||
["warn_case_value_overflow"]={ | ["warn_case_value_overflow"]={ | ||
[a]="overflow converting case value to switch condition type (A to B) [-Wswitch]", | [a]="overflow converting case value to switch condition type (A to B) [-Wswitch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,"switch"}, | ||
[ | [q]="switch", | ||
[e]="overflow converting case value to switch condition type (%0 to %1)", | [e]="overflow converting case value to switch condition type (%0 to %1)", | ||
[g]= | [g]=t, | ||
[b]="overflow converting case value to switch condition type \\((.*?) to (.*?)\\)", | [b]="overflow converting case value to switch condition type \\((.*?) to (.*?)\\)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{ | [j]={{T,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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,195: | Line 9,195: | ||
["warn_cast_align"]={ | ["warn_cast_align"]={ | ||
[a]="cast from A to B increases required alignment from C to D [-Wcast-align]", | [a]="cast from A to B increases required alignment from C to D [-Wcast-align]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"cast-align"}, | ||
[ | [q]="cast-align", | ||
[e]="cast from %0 to %1 increases required alignment from %2 to %3", | [e]="cast from %0 to %1 increases required alignment from %2 to %3", | ||
[g]= | [g]=t, | ||
[b]="cast from (.*?) to (.*?) increases required alignment from (.*?) to (.*?)", | [b]="cast from (.*?) to (.*?) increases required alignment from (.*?) to (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-align[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-align[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"2b5c1b2516ca",1281649497,"Implement -Wcast-align. The initial design of this diagnostic diverges ","Implement -Wcast-align. The initial design of this diagnostic diverges "}, | [i]={"2b5c1b2516ca",1281649497,"Implement -Wcast-align. The initial design of this diagnostic diverges ","Implement -Wcast-align. The initial design of this diagnostic diverges "}, | ||
[j]={{G,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()))"},{G,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]={{G,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 // ...\n if (getDiagnostics().isIgnored(diag::warn_cast_align, TRange.getBegin()))"},{G,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,213: | Line 9,213: | ||
["warn_cast_calling_conv"]={ | ["warn_cast_calling_conv"]={ | ||
[a]="cast between incompatible calling conventions \'A\' and \'B\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]", | [a]="cast between incompatible calling conventions \'A\' and \'B\'; calls through this pointer may abort at runtime [-Wcast-calling-convention]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"cast-calling-convention"}, | ||
[ | [q]="cast-calling-convention", | ||
[e]="cast between incompatible calling conventions \'%0\' and \'%1\'; calls through this pointer may abort at runtime", | [e]="cast between incompatible calling conventions \'%0\' and \'%1\'; calls through this pointer may abort at runtime", | ||
[g]= | [g]=t, | ||
[b]="cast between incompatible calling conventions \'(.*?)\' and \'(.*?)\'; calls through this pointer may abort at runtime", | [b]="cast between incompatible calling conventions \'(.*?)\' and \'(.*?)\'; calls through this pointer may abort at runtime", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-calling\\-convention[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-calling\\-convention[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions","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","Add -Wcast-calling-convention to warn when casting away calling conventions"}, | ||
[j]={{sb,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;"},{sb,2152,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))"}}, | [j]={{sb,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 // ...\n Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv) << SrcCCName << DstCCName << OpRange;"},{sb,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 // ...\n if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,230: | Line 9,230: | ||
["warn_cast_function_type"]={ | ["warn_cast_function_type"]={ | ||
[a]="cast from A to B converts to incompatible function type [-Wcast-function-type]", | [a]="cast from A to B converts to incompatible function type [-Wcast-function-type]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"cast-function-type"}, | ||
[ | [q]="cast-function-type", | ||
[e]="cast %diff{from $ to $ |}0,1converts to incompatible function type", | [e]="cast %diff{from $ to $ |}0,1converts to incompatible function type", | ||
[g]= | [g]=t, | ||
[b]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type", | [b]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{sb,1099,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"}}, | [j]={{sb,1099,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n // ...\n const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,248: | Line 9,248: | ||
["warn_cast_function_type_strict"]={ | ["warn_cast_function_type_strict"]={ | ||
[a]="cast from A to B converts to incompatible function type [-Wcast-function-type-strict]", | [a]="cast from A to B converts to incompatible function type [-Wcast-function-type-strict]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"cast-function-type","cast-function-type-strict"}, | ||
[ | [q]="cast-function-type-strict", | ||
[e]="cast %diff{from $ to $ |}0,1converts to incompatible function type", | [e]="cast %diff{from $ to $ |}0,1converts to incompatible function type", | ||
[g]= | [g]=t, | ||
[b]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type", | [b]="cast (?:from (.*?) to (.*?) |)converts to incompatible function type", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type\\-strict[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-function\\-type\\-strict[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={fb,1625925174,K,K}, | [i]={fb,1625925174,K,K}, | ||
[j]={{sb,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};"},{sb,1130,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n if (DiagID == diag::warn_cast_function_type_strict)"}} | [j]={{sb,1098,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n // ...\n const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"},{sb,1130,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n // ...\n if (DiagID == diag::warn_cast_function_type_strict)"}} | ||
}, | }, | ||
["warn_cast_nonnull_to_bool"]={ | ["warn_cast_nonnull_to_bool"]={ | ||
[a]="nonnull ... \'A\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]", | [a]="nonnull ... \'A\' will evaluate to \'true\' on first encounter [-Wpointer-bool-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"address","bool-conversion","bool-conversions",Pb,Sb,"pointer-bool-conversion"}, | ||
[ | [q]="pointer-bool-conversion", | ||
[e]="nonnull %select{function call|parameter}0 \'%1\' will evaluate to \'true\' on first encounter", | [e]="nonnull %select{function call|parameter}0 \'%1\' will evaluate to \'true\' on first encounter", | ||
[g]= | [g]=t, | ||
[b]="nonnull (?:function call|parameter) \'(.*?)\' will evaluate to \'true\' on first encounter", | [b]="nonnull (?:function call|parameter) \'(.*?)\' will evaluate to \'true\' on first encounter", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]", | ||
[f]= | [f]=Ic, | ||
[i]={"4c8cb14c1ab0",1414090810,"patch to issue warning on comparing parameters with","patch to issue warning on comparing parameters with"}, | [i]={"4c8cb14c1ab0",1414090810,"patch to issue warning on comparing parameters with","patch to issue warning on comparing parameters with"}, | ||
[j]={{G,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]={{G,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 // ...\n auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n // ...\n unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,280: | Line 9,280: | ||
["warn_cast_pointer_from_sel"]={ | ["warn_cast_pointer_from_sel"]={ | ||
[a]="cast of type A to B is deprecated; use sel_getName instead [-Wcast-of-sel-type]", | [a]="cast of type A to B is deprecated; use sel_getName instead [-Wcast-of-sel-type]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,"cast-of-sel-type",rb}, | ||
[ | [q]="cast-of-sel-type", | ||
[e]="cast of type %0 to %1 is deprecated; use sel_getName instead", | [e]="cast of type %0 to %1 is deprecated; use sel_getName instead", | ||
[g]= | [g]=t, | ||
[b]="cast of type (.*?) to (.*?) is deprecated; use sel_getName instead", | [b]="cast of type (.*?) to (.*?) is deprecated; use sel_getName instead", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-of\\-sel\\-type[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-of\\-sel\\-type[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"5ad9659688e8",1345142027,"objective-C: deprecate casts of ObjC\'s SEL","objective-C: deprecate casts of ObjC\'s SEL"}, | [i]={"5ad9659688e8",1345142027,"objective-C: deprecate casts of ObjC\'s SEL","objective-C: deprecate casts of ObjC\'s SEL"}, | ||
[j]={{sb,2097,"static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n if (const PointerType *SrcPtrTy = SrcType->getAs<PointerType>())\n if (SrcPtrTy->isObjCSelType()) {\n if (!DT.getUnqualifiedType()->isVoidType())\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_cast_pointer_from_sel) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}, | [j]={{sb,2097,"static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n // ...\n if (const PointerType *SrcPtrTy = SrcType->getAs<PointerType>())\n if (SrcPtrTy->isObjCSelType()) {\n // ...\n if (!DT.getUnqualifiedType()->isVoidType())\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_cast_pointer_from_sel) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,297: | Line 9,297: | ||
["warn_cast_qual"]={ | ["warn_cast_qual"]={ | ||
[a]="cast from A to B drops ... [-Wcast-qual]", | [a]="cast from A to B drops ... [-Wcast-qual]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"cast-qual"}, | ||
[ | [q]="cast-qual", | ||
[e]="cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", | [e]="cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", | ||
[g]= | [g]=t, | ||
[b]="cast from (.*?) to (.*?) drops (?:const and volatile qualifiers|const qualifier|volatile qualifier)", | [b]="cast from (.*?) to (.*?) drops (?:const and volatile qualifiers|const qualifier|volatile qualifier)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772.","Implement -Wcast-qual, fixing #13772."}, | [i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772.","Implement -Wcast-qual, fixing #13772."}, | ||
[j]={{sb,3328,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n // This is a variant of int **x; const int **y = (const int **)x;\n if (qualifiers == -1)\n else\n Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual) << TheOffendingSrcType << TheOffendingDestType << qualifiers;"}}, | [j]={{sb,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 // ...\n // This is a variant of int **x; const int **y = (const int **)x;\n if (qualifiers == -1)\n // ...\n else\n Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual) << TheOffendingSrcType << TheOffendingDestType << qualifiers;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,315: | Line 9,315: | ||
["warn_cast_qual2"]={ | ["warn_cast_qual2"]={ | ||
[a]="cast from A to B must have all intermediate pointers const qualified to be safe [-Wcast-qual]", | [a]="cast from A to B must have all intermediate pointers const qualified to be safe [-Wcast-qual]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"cast-qual"}, | ||
[ | [q]="cast-qual", | ||
[e]="cast from %0 to %1 must have all intermediate pointers const qualified to be safe", | [e]="cast from %0 to %1 must have all intermediate pointers const qualified to be safe", | ||
[g]= | [g]=t, | ||
[b]="cast from (.*?) to (.*?) must have all intermediate pointers const qualified to be safe", | [b]="cast from (.*?) to (.*?) must have all intermediate pointers const qualified to be safe", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772.","Implement -Wcast-qual, fixing #13772."}, | [i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772.","Implement -Wcast-qual, fixing #13772."}, | ||
[j]={{sb,3325,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n // This is a variant of int **x; const int **y = (const int **)x;\n if (qualifiers == -1)\n Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual2) << SrcType << DestType;"}}, | [j]={{sb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,333: | Line 9,333: | ||
["warn_category_method_impl_match"]={ | ["warn_category_method_impl_match"]={ | ||
[a]="category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]", | [a]="category is implementing a method which will also be implemented by its primary class [-Wobjc-protocol-method-implementation]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-protocol-method-implementation"}, | ||
[ | [q]="objc-protocol-method-implementation", | ||
[e]="category is implementing a method which will also be implemented by its primary class", | [e]="category is implementing a method which will also be implemented by its primary class", | ||
[g]= | [g]=t, | ||
[b]="category is implementing a method which will also be implemented by its primary class", | [b]="category is implementing a method which will also be implemented by its primary class", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-method\\-implementation[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-method\\-implementation[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"9f8b19e9aea9",1311895190,"objective-c: warn if implementation of a method in category","objective-c: warn if implementation of a method in category"}, | [i]={"9f8b19e9aea9",1311895190,"objective-c: warn if implementation of a method in category","objective-c: warn if implementation of a method in category"}, | ||
[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);"}}, | [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 // ...\n if (match) {\n Diag(ImpMethodDecl->getLocation(), diag::warn_category_method_impl_match);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,350: | Line 9,350: | ||
["warn_cconv_knr"]={ | ["warn_cconv_knr"]={ | ||
[a]="function with no prototype cannot use the A calling convention [-Wmissing-prototype-for-cc]", | [a]="function with no prototype cannot use the A calling convention [-Wmissing-prototype-for-cc]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"missing-prototype-for-cc"}, | ||
[ | [q]="missing-prototype-for-cc", | ||
[e]="function with no prototype cannot use the %0 calling convention", | [e]="function with no prototype cannot use the %0 calling convention", | ||
[g]= | [g]=t, | ||
[b]="function with no prototype cannot use the (.*?) calling convention", | [b]="function with no prototype cannot use the (.*?) calling convention", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototype\\-for\\-cc[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototype\\-for\\-cc[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d191063c6c50",1411168032,"Follow-up to r214408: Warn on other callee-cleanup functions without prototype too.","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.","Follow-up to r214408: Warn on other callee-cleanup functions without prototype too."}, | ||
[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;"}}, | [j]={{w,10321,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n if (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n // ...\n if (!supportsVariadicCall(CC)) {\n // ...\n int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,367: | Line 9,367: | ||
["warn_cconv_unsupported"]={ | ["warn_cconv_unsupported"]={ | ||
[a]="A calling convention is not supported ... [-Wignored-attributes]", | [a]="A calling convention is not supported ... [-Wignored-attributes]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={M,A}, | ||
[ | [q]=A, | ||
[e]="%0 calling convention is not supported %select{for this target|on variadic function|on constructor/destructor|on builtin function}1", | [e]="%0 calling convention is not supported %select{for this target|on variadic function|on constructor/destructor|on builtin function}1", | ||
[g]= | [g]=t, | ||
[b]="(.*?) calling convention is not supported (?:for this target|on variadic function|on constructor\\/destructor|on builtin function)", | [b]="(.*?) calling convention is not supported (?:for this target|on variadic function|on constructor\\/destructor|on builtin function)", | ||
[h]= | [h]=N, | ||
[f]=l, | [f]=l, | ||
[i]={"85d667fcb6f3",1563396086,"Renamed and changed the wording of warn_cconv_ignored","Renamed and changed the wording of warn_cconv_ignored"}, | [i]={"85d667fcb6f3",1563396086,"Renamed and changed the wording of warn_cconv_ignored","Renamed and changed the wording of warn_cconv_ignored"}, | ||
[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;"},{ | [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 // ...\n if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n // ...\n if (!NewCCExplicit) {\n // ...\n } else if (Old->getBuiltinID()) {\n // ...\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 // ...\n case TargetInfo::CCCR_Warning: {\n Diag(Attrs.getLoc(), diag::warn_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"},{ib,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 // ...\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 // ...\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;"},{ib,8060,"void Sema::adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor, SourceLocation Loc) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,384: | Line 9,384: | ||
["warn_cdtor_function_try_handler_mem_expr"]={ | ["warn_cdtor_function_try_handler_mem_expr"]={ | ||
[a]="cannot refer to a non-static member from the handler of a ... function try block [-Wexceptions]", | [a]="cannot refer to a non-static member from the handler of a ... function try block [-Wexceptions]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"exceptions"}, | ||
[ | [q]="exceptions", | ||
[e]="cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", | [e]="cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", | ||
[g]= | [g]=t, | ||
[b]="cannot refer to a non\\-static member from the handler of a (?:constructor|destructor) function try block", | [b]="cannot refer to a non\\-static member from the handler of a (?:constructor|destructor) function try block", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"6924dcdf6f73",1441118964,"Add a new frontend warning for referencing members from the handler of a constructor or destructor f...","Add a new frontend warning for referencing members from the handler of a constructor or destructor function-try-block, which is UB in C++."}, | [i]={"6924dcdf6f73",1441118964,"Add a new frontend warning for referencing members from the handler of a constructor or destructor f...","Add a new frontend warning for referencing members from the handler of a constructor or destructor function-try-block, which is UB in C++."}, | ||
[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,401: | Line 9,401: | ||
["warn_cfstring_truncated"]={ | ["warn_cfstring_truncated"]={ | ||
[a]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 [-WCFString-literal]", | [a]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 [-WCFString-literal]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"CFString-literal"}, | ||
[ | [q]="CFString-literal", | ||
[e]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8", | [e]="input conversion stopped due to an input byte that does not belong to the input codeset UTF-8", | ||
[g]= | [g]=t, | ||
[b]="input conversion stopped due to an input byte that does not belong to the input codeset UTF\\-8", | [b]="input conversion stopped due to an input byte that does not belong to the input codeset UTF\\-8", | ||
[h]=" \\[(?:\\-Werror,)?\\-WCFString\\-literal[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-WCFString\\-literal[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"56603ef7b279",1283888293,"Have Sema check for validity of CGString literal","Have Sema check for validity of CGString literal"}, | [i]={"56603ef7b279",1283888293,"Have Sema check for validity of CGString literal","Have Sema check for validity of CGString literal"}, | ||
[j]={{G,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]={{G,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 // ...\n if (Literal->containsNonAsciiOrNull()) {\n // ...\n // Check for conversion failure.\n if (Result != llvm::conversionOK)\n Diag(Arg->getBeginLoc(), diag::warn_cfstring_truncated) << Arg->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,418: | Line 9,418: | ||
["warn_char_constant_too_large"]={ | ["warn_char_constant_too_large"]={ | ||
[a]="character constant too long for its type", | [a]="character constant too long for its type", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="character constant too long for its type", | [e]="character constant too long for its type", | ||
[g]= | [g]=t, | ||
[b]="character constant too long for its type", | [b]="character constant too long for its type", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=H, | [f]=H, | ||
[i]={P,1236199783,O | [i]={P,1236199783,Q,O}, | ||
[j]={{ | [j]={{Uc,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 // ...\n if (!HadError && multi_char_too_long) {\n PP.Diag(Loc, diag::warn_char_constant_too_large);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:32:5: warning: character constant too long for its type"} | ["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:32:5: warning: character constant too long for its type"} | ||
Line 9,433: | Line 9,433: | ||
["warn_class_method_not_found"]={ | ["warn_class_method_not_found"]={ | ||
[a]="class method A not found (return type defaults to \'id\') [-Wobjc-method-access]", | [a]="class method A not found (return type defaults to \'id\') [-Wobjc-method-access]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-method-access"}, | ||
[ | [q]="objc-method-access", | ||
[e]="class method %objcclass0 not found (return type defaults to \'id\')", | [e]="class method %objcclass0 not found (return type defaults to \'id\')", | ||
[g]= | [g]=t, | ||
[b]="class method (.*?) not found \\(return type defaults to \'id\'\\)", | [b]="class method (.*?) not found \\(return type defaults to \'id\'\\)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[j]={{vb,1745,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n if (!Method) {\n if (getLangOpts().ObjCAutoRefCount)\n else\n DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}}, | [j]={{vb,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 // ...\n if (!Method) {\n // ...\n if (getLangOpts().ObjCAutoRefCount)\n // ...\n else\n DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,450: | Line 9,450: | ||
["warn_class_method_not_found_with_typo"]={ | ["warn_class_method_not_found_with_typo"]={ | ||
[a]="class method A not found (return type defaults to \'id\'); did you mean B? [-Wobjc-method-access]", | [a]="class method A not found (return type defaults to \'id\'); did you mean B? [-Wobjc-method-access]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-method-access"}, | ||
[ | [q]="objc-method-access", | ||
[e]="class method %objcclass0 not found (return type defaults to \'id\'); did you mean %objcclass2?", | [e]="class method %objcclass0 not found (return type defaults to \'id\'); did you mean %objcclass2?", | ||
[g]= | [g]=t, | ||
[b]="class method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?", | [b]="class method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors","Objective-C [qoi]: privide typo correction for selectors"}, | [i]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors","Objective-C [qoi]: privide typo correction for selectors"}, | ||
[j]={{vb,1753,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n if (!Method) {\n if (!getLangOpts().DebuggerSupport) {\n if (OMD && !OMD->isInvalidDecl()) {\n if (getLangOpts().ObjCAutoRefCount)\n else\n DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}}, | [j]={{vb,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 // ...\n if (!Method) {\n // ...\n if (!getLangOpts().DebuggerSupport) {\n // ...\n if (OMD && !OMD->isInvalidDecl()) {\n if (getLangOpts().ObjCAutoRefCount)\n // ...\n else\n DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,467: | Line 9,467: | ||
["warn_clause_expected_string"]={ | ["warn_clause_expected_string"]={ | ||
[a]="expected string literal in \'clause A\' - ignoring [-Wignored-pragmas]", | [a]="expected string literal in \'clause A\' - ignoring [-Wignored-pragmas]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"ignored-pragmas","pragmas"}, | ||
[ | [q]="ignored-pragmas", | ||
[e]="expected string literal in \'clause %0\' - ignoring", | [e]="expected string literal in \'clause %0\' - ignoring", | ||
[g]= | [g]=t, | ||
[b]="expected string literal in \'clause (.*?)\' \\- ignoring", | [b]="expected string literal in \'clause (.*?)\' \\- ignoring", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause.","[OPENMP5.1] Initial support for message clause."}, | [i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause.","[OPENMP5.1] Initial support for message clause."}, | ||
[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);"}}, | [j]={{x,16939,"OMPClause *Sema::ActOnOpenMPMessageClause(Expr *ME, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n if (!isa<StringLiteral>(ME)) {\n Diag(ME->getBeginLoc(), diag::warn_clause_expected_string) << getOpenMPClauseName(OMPC_message);"}}, | ||
[k]={ | [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]"} | ["clang/test/OpenMP/error_message.cpp"]={"clang/test/OpenMP/error_message.cpp:114:27: warning: expected string literal in \'clause message\' - ignoring [-Wignored-pragmas]"} | ||
Line 9,484: | Line 9,484: | ||
["warn_cleanup_ext"]={ | ["warn_cleanup_ext"]={ | ||
[a]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier [-Wgcc-compat]", | [a]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier [-Wgcc-compat]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Pc}, | ||
[ | [q]=Pc, | ||
[e]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier", | [e]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier", | ||
[g]= | [g]=t, | ||
[b]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier", | [b]="GCC does not allow the \'cleanup\' attribute argument to be anything other than a simple identifier", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"c12aaff2cbe5",1378863461,"The cleanup attribute no longer uses an unresolved, simple identifier as its argument. Instead, it ...","The cleanup attribute no longer uses an unresolved, simple identifier as its argument. Instead, it takes an expression that is fully resolved."}, | [i]={"c12aaff2cbe5",1378863461,"The cleanup attribute no longer uses an unresolved, simple identifier as its argument. Instead, it ...","The cleanup attribute no longer uses an unresolved, simple identifier as its argument. Instead, it takes an expression that is fully resolved."}, | ||
[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);"}}, | [j]={{v,3706,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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 // ...\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 // ...\n } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n if (ULE->hasExplicitTemplateArgs())\n S.Diag(Loc, diag::warn_cleanup_ext);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,501: | Line 9,501: | ||
["warn_cmse_nonsecure_union"]={ | ["warn_cmse_nonsecure_union"]={ | ||
[a]="passing union across security boundary via ... may leak information [-Wcmse-union-leak]", | [a]="passing union across security boundary via ... may leak information [-Wcmse-union-leak]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"cmse-union-leak"}, | ||
[ | [q]="cmse-union-leak", | ||
[e]="passing union across security boundary via %select{parameter %1|return value}0 may leak information", | [e]="passing union across security boundary via %select{parameter %1|return value}0 may leak information", | ||
[g]= | [g]=t, | ||
[b]="passing union across security boundary via (?:parameter (.*?)|return value) may leak information", | [b]="passing union across security boundary via (?:parameter (.*?)|return value) may leak information", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcmse\\-union\\-leak[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcmse\\-union\\-leak[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Eb,1576908663,db,db}, | ||
[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;"},{ | [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 // ...\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;"},{T,3970,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (const FunctionDecl *FD = getCurFunctionDecl()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,518: | Line 9,518: | ||
["warn_cocoa_naming_owned_rule"]={ | ["warn_cocoa_naming_owned_rule"]={ | ||
[a]="property follows Cocoa naming convention for returning \'owned\' objects [-Wobjc-property-matches-cocoa-ownership-rule]", | [a]="property follows Cocoa naming convention for returning \'owned\' objects [-Wobjc-property-matches-cocoa-ownership-rule]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-property-matches-cocoa-ownership-rule"}, | ||
[ | [q]="objc-property-matches-cocoa-ownership-rule", | ||
[e]="property follows Cocoa naming convention for returning \'owned\' objects", | [e]="property follows Cocoa naming convention for returning \'owned\' objects", | ||
[g]= | [g]=t, | ||
[b]="property follows Cocoa naming convention for returning \'owned\' objects", | [b]="property follows Cocoa naming convention for returning \'owned\' objects", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-matches\\-cocoa\\-ownership\\-rule[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-matches\\-cocoa\\-ownership\\-rule[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) ","ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "}, | [i]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) ","ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "}, | ||
[j]={{F,2277,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n for (const auto *PID : D->property_impls()) {\n if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n if (getLangOpts().ObjCAutoRefCount)\n else\n Diag(PD->getLocation(), diag::warn_cocoa_naming_owned_rule);"}} | [j]={{F,2277,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n // ...\n for (const auto *PID : D->property_impls()) {\n // ...\n if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n // ...\n if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n if (getLangOpts().ObjCAutoRefCount)\n // ...\n else\n Diag(PD->getLocation(), diag::warn_cocoa_naming_owned_rule);"}} | ||
}, | }, | ||
["warn_collection_expr_type"]={ | ["warn_collection_expr_type"]={ | ||
[a]="collection expression type A may not respond to B", | [a]="collection expression type A may not respond to B", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]="collection expression type %0 may not respond to %1", | [e]="collection expression type %0 may not respond to %1", | ||
[g]= | [g]=t, | ||
[b]="collection expression type (.*?) may not respond to (.*?)", | [b]="collection expression type (.*?) may not respond to (.*?)", | ||
[h]=Ab, | [h]=Ab, | ||
[f]=l, | [f]=l, | ||
[i]={"68e69ca9f9e0",1281651942,"Patch to issue warning when colllection expresion\'s type","Patch to issue warning when colllection expresion\'s type"}, | [i]={"68e69ca9f9e0",1281651942,"Patch to issue warning when colllection expresion\'s type","Patch to issue warning when colllection expresion\'s type"}, | ||
[j]={{ | [j]={{T,2271,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n // ...\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 // ...\n } else if (iface || !objectType->qual_empty()) {\n // ...\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]={ | [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:\'"} | ["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:\'"} | ||
Line 9,547: | Line 9,547: | ||
["warn_comma_operator"]={ | ["warn_comma_operator"]={ | ||
[a]="possible misuse of comma operator here [-Wcomma]", | [a]="possible misuse of comma operator here [-Wcomma]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"comma"}, | ||
[ | [q]="comma", | ||
[e]="possible misuse of comma operator here", | [e]="possible misuse of comma operator here", | ||
[g]= | [g]=t, | ||
[b]="possible misuse of comma operator here", | [b]="possible misuse of comma operator here", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcomma[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcomma[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang.","Add -Wcomma warning to Clang."}, | [i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang.","Add -Wcomma warning to Clang."}, | ||
[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))"},{ | [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 // ...\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 // ...\n if (!S.getDiagnostics().isIgnored(diag::warn_comma_operator, Loc))"},{T,898,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n // ...\n if (CondExpr && (getLangOpts().C99 || getLangOpts().CPlusPlus) && !Diags.isIgnored(diag::warn_comma_operator, CondExpr->getExprLoc()))"},{T,1697,"StmtResult Sema::ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc, ConditionResult Cond, SourceLocation RParenLoc, Stmt *Body) {\n // ...\n if (CondVal.second && !Diags.isIgnored(diag::warn_comma_operator, CondVal.second->getExprLoc()))"},{T,1726,"StmtResult Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, SourceLocation WhileLoc, SourceLocation CondLParen, Expr *Cond, SourceLocation CondRParen) {\n // ...\n if (Cond && !getLangOpts().C99 && !getLangOpts().CPlusPlus && !Diags.isIgnored(diag::warn_comma_operator, Cond->getExprLoc()))"},{T,2177,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n // ...\n if (Second.get().second && !Diags.isIgnored(diag::warn_comma_operator, Second.get().second->getExprLoc()))"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,565: | Line 9,565: | ||
["warn_comparison_always"]={ | ["warn_comparison_always"]={ | ||
[a]="...comparison always evaluates to ... [-Wtautological-compare]", | [a]="...comparison always evaluates to ... [-Wtautological-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,rb,oc}, | ||
[ | [q]=oc, | ||
[e]="%select{self-|array }0comparison always evaluates to %select{a constant|true|false|\'std::strong_ordering::equal\'}1", | [e]="%select{self-|array }0comparison always evaluates to %select{a constant|true|false|\'std::strong_ordering::equal\'}1", | ||
[g]= | [g]=t, | ||
[b]="(?:self\\-|array )comparison always evaluates to (?:a constant|true|false|\'std\\:\\:strong_ordering\\:\\:equal\')", | [b]="(?:self\\-|array )comparison always evaluates to (?:a constant|true|false|\'std\\:\\:strong_ordering\\:\\:equal\')", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-compare[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"ec170db73d50",1276026634,"Warn about comparisons between arrays and improve self-comparison","Warn about comparisons between arrays and improve self-comparison"}, | [i]={"ec170db73d50",1276026634,"Warn about comparisons between arrays and improve self-comparison","Warn about comparisons between arrays and improve self-comparison"}, | ||
[j]={{D,12673,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n if (Expr::isSameComparisonOperand(LHS, RHS)) {\n S.DiagRuntimeBehavior(Loc, nullptr,\n S.PDiag(diag::warn_comparison_always) << 0 /*self-comparison*/"},{D,12703,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n if (Expr::isSameComparisonOperand(LHS, RHS)) {\n } else if (checkForArray(LHSStripped) && checkForArray(RHSStripped)) {\n S.DiagRuntimeBehavior(Loc, nullptr,\n S.PDiag(diag::warn_comparison_always) << 1 /*array comparison*/"}}, | [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 // ...\n if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n if (Expr::isSameComparisonOperand(LHS, RHS)) {\n // ...\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 // ...\n if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n if (Expr::isSameComparisonOperand(LHS, RHS)) {\n // ...\n } else if (checkForArray(LHSStripped) && checkForArray(RHSStripped)) {\n // ...\n S.DiagRuntimeBehavior(Loc, nullptr,\n S.PDiag(diag::warn_comparison_always) << 1 /*array comparison*/"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/self-comparison.m"]={"clang/test/SemaObjC/self-comparison.m:10:14: warning: self-comparison always evaluates to true [-Wtautological-compare]"} | ["clang/test/SemaObjC/self-comparison.m"]={"clang/test/SemaObjC/self-comparison.m:10:14: warning: self-comparison always evaluates to true [-Wtautological-compare]"} | ||
Line 9,582: | Line 9,582: | ||
["warn_comparison_bitwise_always"]={ | ["warn_comparison_bitwise_always"]={ | ||
[a]="bitwise comparison always evaluates to ... [-Wtautological-bitwise-compare]", | [a]="bitwise comparison always evaluates to ... [-Wtautological-bitwise-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Z,hb,rb,"tautological-bitwise-compare",oc}, | ||
[ | [q]="tautological-bitwise-compare", | ||
[e]="bitwise comparison always evaluates to %select{false|true}0", | [e]="bitwise comparison always evaluates to %select{false|true}0", | ||
[g]= | [g]=t, | ||
[b]="bitwise comparison always evaluates to (?:false|true)", | [b]="bitwise comparison always evaluates to (?:false|true)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"7afd71e4ff5d",1400607071,"Add a check for tautological bitwise comparisons to -Wtautological-compare.","Add a check for tautological bitwise comparisons to -Wtautological-compare."}, | [i]={"7afd71e4ff5d",1400607071,"Add a check for tautological bitwise comparisons to -Wtautological-compare.","Add a check for tautological bitwise comparisons to -Wtautological-compare."}, | ||
[j]={{ | [j]={{L,177,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n // ...\n void compareBitwiseEquality(const BinaryOperator *B, bool isAlwaysTrue) override {\n // ...\n S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_always) << DiagRange << isAlwaysTrue;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,600: | Line 9,600: | ||
["warn_comparison_bitwise_or"]={ | ["warn_comparison_bitwise_or"]={ | ||
[a]="bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]", | [a]="bitwise or with non-zero value always evaluates to true [-Wtautological-bitwise-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Z,hb,rb,"tautological-bitwise-compare",oc}, | ||
[ | [q]="tautological-bitwise-compare", | ||
[e]="bitwise or with non-zero value always evaluates to true", | [e]="bitwise or with non-zero value always evaluates to true", | ||
[g]= | [g]=t, | ||
[b]="bitwise or with non\\-zero value always evaluates to true", | [b]="bitwise or with non\\-zero value always evaluates to true", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wtautological\\-bitwise\\-compare[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[j]={{ | [j]={{L,186,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n // ...\n void compareBitwiseOr(const BinaryOperator *B) override {\n // ...\n S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_or) << DiagRange;"},{L,192,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,618: | Line 9,618: | ||
["warn_comparison_mixed_enum_types"]={ | ["warn_comparison_mixed_enum_types"]={ | ||
[a]="... different enumeration types (A and B) [-Wenum-compare]", | [a]="... different enumeration types (A and B) [-Wenum-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"enum-compare"}, | ||
[ | [q]="enum-compare", | ||
[e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | [e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}}, | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\n } else if (ACK == Sema::ACK_Conditional) {\n // ...\n } else if (ACK == Sema::ACK_Comparison) {\n // ...\n DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,635: | Line 9,635: | ||
["warn_comparison_mixed_enum_types_cxx20"]={ | ["warn_comparison_mixed_enum_types_cxx20"]={ | ||
[a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare]", | [a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Hb,"deprecated-enum-compare","enum-compare"}, | ||
[ | [q]="deprecated-enum-compare", | ||
[e]="%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]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}}, | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\n } else if (ACK == Sema::ACK_Conditional) {\n // ...\n } else if (ACK == Sema::ACK_Comparison) {\n // ...\n DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}}, | ||
[k]={ | [k]={ | ||
[ | [ed]={"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"]={ | ||
[a]="comparison of different enumeration types in switch statement (A and B) [-Wenum-compare-switch]", | [a]="comparison of different enumeration types in switch statement (A and B) [-Wenum-compare-switch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"enum-compare","enum-compare-switch"}, | ||
[ | [q]="enum-compare-switch", | ||
[e]="comparison of different enumeration types in switch statement%diff{ ($ and $)|}0,1", | [e]="comparison of different enumeration types in switch statement%diff{ ($ and $)|}0,1", | ||
[g]= | [g]=t, | ||
[b]="comparison of different enumeration types in switch statement(?: \\((.*?) and (.*?)\\)|)", | [b]="comparison of different enumeration types in switch statement(?: \\((.*?) and (.*?)\\)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-switch[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-switch[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"0284a20fbafa",1502312203,"[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare","[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","[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare"}, | ||
[j]={{ | [j]={{T,1211,"static void checkEnumTypesInSwitchStmt(Sema &S, const Expr *Cond, const Expr *Case) {\n // ...\n S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types_switch) << CondType << CaseType << Cond->getSourceRange() << Case->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,669: | Line 9,669: | ||
["warn_completion_handler_called_twice"]={ | ["warn_completion_handler_called_twice"]={ | ||
[a]="completion handler is called twice [-Wcompletion-handler]", | [a]="completion handler is called twice [-Wcompletion-handler]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Rb,uc}, | ||
[ | [q]=uc, | ||
[e]="completion handler is called twice", | [e]="completion handler is called twice", | ||
[g]= | [g]=t, | ||
[b]="completion handler is called twice", | [b]="completion handler is called twice", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{ | [j]={{L,1689,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,1757,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}, | ||
[k]={ | [k]={ | ||
[ | [Jc]={"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"]={ | ||
[a]="...completion handler is never called [-Wcompletion-handler]", | [a]="...completion handler is never called [-Wcompletion-handler]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Rb,uc}, | ||
[ | [q]=uc, | ||
[e]="%select{|captured }1completion handler is never called", | [e]="%select{|captured }1completion handler is never called", | ||
[g]= | [g]=t, | ||
[b]="(?:|captured )completion handler is never called", | [b]="(?:|captured )completion handler is never called", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{ | [j]={{L,1699,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,1729,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,1755,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}, | ||
[k]={ | [k]={ | ||
[ | [Jc]={"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"]={ | ||
[a]="completion handler is never ... when ... [-Wcompletion-handler]", | [a]="completion handler is never ... when ... [-Wcompletion-handler]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Rb,uc}, | ||
[ | [q]=uc, | ||
[e]="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]="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", | ||
[g]= | [g]=t, | ||
[b]="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)", | [b]="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)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcompletion\\-handler[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={wb,1590001902, | [i]={wb,1590001902,X,X}, | ||
[j]={{ | [j]={{L,1710,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n // ...\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;"},{L,1756,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}, | ||
[k]={ | [k]={ | ||
[ | [Jc]={"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"]={ | ||
[a]="...A tokens ... appear in different macro expansion contexts [-Wcompound-token-split-by-macro]", | [a]="...A tokens ... appear in different macro expansion contexts [-Wcompound-token-split-by-macro]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"compound-token-split","compound-token-split-by-macro"}, | ||
[ | [q]="compound-token-split-by-macro", | ||
[e]="%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]="%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", | ||
[g]= | [g]=t, | ||
[b]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) appear in different macro expansion contexts", | [b]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) appear in different macro expansion contexts", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-macro[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-macro[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | [i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,740: | Line 9,740: | ||
["warn_compound_token_split_by_whitespace"]={ | ["warn_compound_token_split_by_whitespace"]={ | ||
[a]="...A tokens ... are separated by whitespace [-Wcompound-token-split-by-space]", | [a]="...A tokens ... are separated by whitespace [-Wcompound-token-split-by-space]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"compound-token-split","compound-token-split-by-space"}, | ||
[ | [q]="compound-token-split-by-space", | ||
[e]="%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]="%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", | ||
[g]= | [g]=t, | ||
[b]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) are separated by whitespace", | [b]="(?:(.*?) and |)(.*?) tokens (?:introducing statement expression|terminating statement expression|introducing attribute|terminating attribute|forming pointer to member type) are separated by whitespace", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-space[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wcompound\\-token\\-split\\-by\\-space[^\\]]*\\]", | ||
[f]= | [f]=U, | ||
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | [i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[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 // ...\n // We expect the tokens to abut.\n if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n // ...\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"]={ | ||
[a]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]", | [a]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={m,Z,Xc,"string-concatenation"}, | ||
[ | [q]="string-concatenation", | ||
[e]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma?", | [e]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma?", | ||
[g]= | [g]=t, | ||
[b]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma\\?", | [b]="suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma\\?", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wstring\\-concatenation[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wstring\\-concatenation[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={kb,1582847864,R,R}, | ||
[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;"}}, | [j]={{w,14154,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (!var->getType()->isStructureType() && var->hasInit() && isa<InitListExpr>(var->getInit())) {\n // ...\n if (NumInits > 2)\n for (unsigned I = 0; I < NumInits; ++I) {\n // ...\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 // ...\n if (OnlyOneMissingComma) {\n // ...\n Diag(SL->getStrTokenLoc(1), diag::warn_concatenated_literal_array_init) << Hints;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,773: | Line 9,773: | ||
["warn_concatenated_nsarray_literal"]={ | ["warn_concatenated_nsarray_literal"]={ | ||
[a]="concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]", | [a]="concatenated NSString literal for an NSArray expression - possibly missing a comma [-Wobjc-string-concatenation]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"objc-string-concatenation"}, | ||
[ | [q]="objc-string-concatenation", | ||
[e]="concatenated NSString literal for an NSArray expression - possibly missing a comma", | [e]="concatenated NSString literal for an NSArray expression - possibly missing a comma", | ||
[g]= | [g]=t, | ||
[b]="concatenated NSString literal for an NSArray expression \\- possibly missing a comma", | [b]="concatenated NSString literal for an NSArray expression \\- possibly missing a comma", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-string\\-concatenation[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wobjc\\-string\\-concatenation[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"a802c3526bc8",1376437495,"ObjectiveC [QoI] issue warning if an element of an nsarray","ObjectiveC [QoI] issue warning if an element of an nsarray"}, | [i]={"a802c3526bc8",1376437495,"ObjectiveC [QoI] issue warning if an element of an nsarray","ObjectiveC [QoI] issue warning if an element of an nsarray"}, | ||
[j]={{vb,488,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n if (ArrayLiteral)\n if (ObjCStringLiteral *getString = dyn_cast<ObjCStringLiteral>(OrigElement)) {\n if (StringLiteral *SL = getString->getString()) {\n if (numConcat > 1) {\n if (!hasMacro)\n S.Diag(Element->getBeginLoc(), diag::warn_concatenated_nsarray_literal) << Element->getType();"}}, | [j]={{vb,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 // ...\n if (ArrayLiteral)\n if (ObjCStringLiteral *getString = dyn_cast<ObjCStringLiteral>(OrigElement)) {\n if (StringLiteral *SL = getString->getString()) {\n // ...\n if (numConcat > 1) {\n // ...\n if (!hasMacro)\n S.Diag(Element->getBeginLoc(), diag::warn_concatenated_nsarray_literal) << Element->getType();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,790: | Line 9,790: | ||
["warn_condition_is_assignment"]={ | ["warn_condition_is_assignment"]={ | ||
[a]="using the result of an assignment as a condition without parentheses [-Wparentheses]", | [a]="using the result of an assignment as a condition without parentheses [-Wparentheses]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Z,hb,"parentheses"}, | ||
[ | [q]="parentheses", | ||
[e]="using the result of an assignment as a condition without parentheses", | [e]="using the result of an assignment as a condition without parentheses", | ||
[g]= | [g]=t, | ||
[b]="using the result of an assignment as a condition without parentheses", | [b]="using the result of an assignment as a condition without parentheses", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d5707abdfdd5",1255384747,"Implement -Wparentheses: warn about using assignments in contexts that require","Implement -Wparentheses: warn about using assignments in contexts that require"}, | [i]={"d5707abdfdd5",1255384747,"Implement -Wparentheses: warn about using assignments in contexts that require","Implement -Wparentheses: warn about using assignments in contexts that require"}, | ||
[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;"}}, | [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 // ...\n unsigned diagnostic = diag::warn_condition_is_assignment;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,807: | Line 9,807: | ||
["warn_condition_is_idiomatic_assignment"]={ | ["warn_condition_is_idiomatic_assignment"]={ | ||
[a]="using the result of an assignment as a condition without parentheses [-Widiomatic-parentheses]", | [a]="using the result of an assignment as a condition without parentheses [-Widiomatic-parentheses]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={"idiomatic-parentheses"}, | ||
[ | [q]="idiomatic-parentheses", | ||
[e]="using the result of an assignment as a condition without parentheses", | [e]="using the result of an assignment as a condition without parentheses", | ||
[g]= | [g]=t, | ||
[b]="using the result of an assignment as a condition without parentheses", | [b]="using the result of an assignment as a condition without parentheses", | ||
[h]=" \\[(?:\\-Werror,)?\\-Widiomatic\\-parentheses[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Widiomatic\\-parentheses[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"b0e419e34dc0",1257984365,"Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,","Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,"}, | [i]={"b0e419e34dc0",1257984365,"Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,","Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,"}, | ||
[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;"}} | [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 // ...\n if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n // ...\n // Greylist some idioms by putting them into a warning subcategory.\n if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n // ...\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 // ...\n if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n // ...\n // Greylist some idioms by putting them into a warning subcategory.\n if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n // ...\n // self = [<foo> init...]\n if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n // ...\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"]={ | ||
[a]="... different enumeration types (A and B) [-Wenum-compare-conditional]", | [a]="... different enumeration types (A and B) [-Wenum-compare-conditional]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Pb,"enum-compare-conditional",tc,Sb}, | ||
[ | [q]="enum-compare-conditional", | ||
[e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | [e]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-conditional[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wenum\\-compare\\-conditional[^\\]]*\\]", | ||
[f]= | [f]=Ic, | ||
[i]={ | [i]={bc,1567434909,pb,pb}, | ||
[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;"}} | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\n } else if (ACK == Sema::ACK_Conditional) {\n // ...\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"]={ | ||
[a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare-conditional]", | [a]="... different enumeration types (A and B) is deprecated [-Wdeprecated-enum-compare-conditional]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={Pb,Hb,"deprecated-enum-compare-conditional","enum-compare-conditional",tc,Sb}, | ||
[ | [q]="deprecated-enum-compare-conditional", | ||
[e]="%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]="%select{arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of}0 different enumeration types%diff{ ($ and $)|}1,2 is deprecated", | ||
[g]= | [g]=t, | ||
[b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | [b]="(?:arithmetic between|bitwise operation between|comparison of|conditional expression between|compound assignment of) different enumeration types(?: \\((.*?) and (.*?)\\)|) is deprecated", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare\\-conditional[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-enum\\-compare\\-conditional[^\\]]*\\]", | ||
[f]= | [f]=Yb, | ||
[i]={ | [i]={Fb,1575504770,gb,gb}, | ||
[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;"}} | [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 // ...\n if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n // ...\n } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n // ...\n if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n // ...\n } else if (ACK == Sema::ACK_Conditional) {\n // ...\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"]={ | ||
[a]="conflicting nullability specifier on parameter types, A conflicts with existing specifier B [-Wnullability]", | [a]="conflicting nullability specifier on parameter types, A conflicts with existing specifier B [-Wnullability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"nullability"}, | ||
[ | [q]="nullability", | ||
[e]="conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", | [e]="conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", | ||
[g]= | [g]=t, | ||
[b]="conflicting nullability specifier on parameter types, (.*?) conflicts with existing specifier (.*?)", | [b]="conflicting nullability specifier on parameter types, (.*?) conflicts with existing specifier (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | ||
[f]="Nullability Issue", | [f]="Nullability Issue", | ||
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C."}, | [i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C."}, | ||
[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));"}}, | [j]={{C,2460,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,868: | Line 9,868: | ||
["warn_conflicting_nullability_attr_overriding_ret_types"]={ | ["warn_conflicting_nullability_attr_overriding_ret_types"]={ | ||
[a]="conflicting nullability specifier on return types, A conflicts with existing specifier B [-Wnullability]", | [a]="conflicting nullability specifier on return types, A conflicts with existing specifier B [-Wnullability]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"nullability"}, | ||
[ | [q]="nullability", | ||
[e]="conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", | [e]="conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", | ||
[g]= | [g]=t, | ||
[b]="conflicting nullability specifier on return types, (.*?) conflicts with existing specifier (.*?)", | [b]="conflicting nullability specifier on return types, (.*?) conflicts with existing specifier (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | ||
[f]="Nullability Issue", | [f]="Nullability Issue", | ||
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C."}, | [i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C."}, | ||
[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));"}}, | [j]={{C,2376,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // ...\n if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(MethodImpl->getReturnType(), MethodDecl->getReturnType(), false)) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,885: | Line 9,885: | ||
["warn_conflicting_overriding_param_modifiers"]={ | ["warn_conflicting_overriding_param_modifiers"]={ | ||
[a]="conflicting distributed object modifiers on parameter type in declaration of A [-Woverriding-method-mismatch]", | [a]="conflicting distributed object modifiers on parameter type in declaration of A [-Woverriding-method-mismatch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ib}, | ||
[ | [q]=Ib, | ||
[e]="conflicting distributed object modifiers on parameter type in declaration of %0", | [e]="conflicting distributed object modifiers on parameter type in declaration of %0", | ||
[g]= | [g]=t, | ||
[b]="conflicting distributed object modifiers on parameter type in declaration of (.*?)", | [b]="conflicting distributed object modifiers on parameter type in declaration of (.*?)", | ||
[h]= | [h]=id, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={dd,1312996590,Gb,Gb}, | ||
[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();"}} | [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"]={ | ||
[a]="conflicting parameter types in declaration of A: B vs C [-Woverriding-method-mismatch]", | [a]="conflicting parameter types in declaration of A: B vs C [-Woverriding-method-mismatch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ib}, | ||
[ | [q]=Ib, | ||
[e]="conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", | [e]="conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", | ||
[g]= | [g]=t, | ||
[b]="conflicting parameter types in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)", | [b]="conflicting parameter types in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)", | ||
[h]= | [h]=id, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={dd,1312996590,Gb,Gb}, | ||
[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;"}}, | [j]={{C,2475,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // ...\n unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,918: | Line 9,918: | ||
["warn_conflicting_overriding_ret_type_modifiers"]={ | ["warn_conflicting_overriding_ret_type_modifiers"]={ | ||
[a]="conflicting distributed object modifiers on return type in declaration of A [-Woverriding-method-mismatch]", | [a]="conflicting distributed object modifiers on return type in declaration of A [-Woverriding-method-mismatch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ib}, | ||
[ | [q]=Ib, | ||
[e]="conflicting distributed object modifiers on return type in declaration of %0", | [e]="conflicting distributed object modifiers on return type in declaration of %0", | ||
[g]= | [g]=t, | ||
[b]="conflicting distributed object modifiers on return type in declaration of (.*?)", | [b]="conflicting distributed object modifiers on return type in declaration of (.*?)", | ||
[h]= | [h]=id, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={dd,1312996590,Gb,Gb}, | ||
[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();"}}, | [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]={ | [k]={ | ||
Line 9,936: | Line 9,936: | ||
["warn_conflicting_overriding_ret_types"]={ | ["warn_conflicting_overriding_ret_types"]={ | ||
[a]="conflicting return type in declaration of A: B vs C [-Woverriding-method-mismatch]", | [a]="conflicting return type in declaration of A: B vs C [-Woverriding-method-mismatch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ib}, | ||
[ | [q]=Ib, | ||
[e]="conflicting return type in declaration of %0%diff{: $ vs $|}1,2", | [e]="conflicting return type in declaration of %0%diff{: $ vs $|}1,2", | ||
[g]= | [g]=t, | ||
[b]="conflicting return type in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)", | [b]="conflicting return type in declaration of (.*?)(?:\\: (.*?) vs (.*?)|)", | ||
[h]= | [h]=id, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={dd,1312996590,Gb,Gb}, | ||
[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;"}}, | [j]={{C,2393,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // ...\n unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,954: | Line 9,954: | ||
["warn_conflicting_overriding_variadic"]={ | ["warn_conflicting_overriding_variadic"]={ | ||
[a]="conflicting variadic declaration of method and its implementation [-Woverriding-method-mismatch]", | [a]="conflicting variadic declaration of method and its implementation [-Woverriding-method-mismatch]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[B]=false, | [B]=false, | ||
[ | [r]={Ib}, | ||
[ | [q]=Ib, | ||
[e]= | [e]=hd, | ||
[g]= | [g]=t, | ||
[b]= | [b]=hd, | ||
[h]= | [h]=id, | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={dd,1312996590,Gb,Gb}, | ||
[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);"}} | [j]={{C,2623,"void Sema::CheckConflictingOverridingMethod(ObjCMethodDecl *Method, ObjCMethodDecl *Overridden, bool IsProtocolMethodDecl) {\n // ...\n if (Method->isVariadic() != Overridden->isVariadic()) {\n Diag(Method->getLocation(), diag::warn_conflicting_overriding_variadic);"}} | ||
}, | }, | ||
["warn_conflicting_param_modifiers"]={ | ["warn_conflicting_param_modifiers"]={ | ||
[a]="conflicting distributed object modifiers on parameter type in implementation of A [-Wdistributed-object-modifiers]", | [a]="conflicting distributed object modifiers on parameter type in implementation of A [-Wdistributed-object-modifiers]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"distributed-object-modifiers"}, | ||
[ | [q]="distributed-object-modifiers", | ||
[e]="conflicting distributed object modifiers on parameter type in implementation of %0", | [e]="conflicting distributed object modifiers on parameter type in implementation of %0", | ||
[g]= | [g]=t, | ||
[b]="conflicting distributed object modifiers on parameter type in implementation of (.*?)", | [b]="conflicting distributed object modifiers on parameter type in implementation of (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in","Warn when type modifiers on objc method declarations in"}, | [i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in","Warn when type modifiers on objc method declarations in"}, | ||
[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();"}}, | [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 // ...\n else\n S.Diag(ImplVar->getLocation(), diag::warn_conflicting_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,986: | Line 9,986: | ||
["warn_conflicting_param_types"]={ | ["warn_conflicting_param_types"]={ | ||
[a]="conflicting parameter types in implementation of A: B vs C [-Wmismatched-parameter-types]", | [a]="conflicting parameter types in implementation of A: B vs C [-Wmismatched-parameter-types]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"mismatched-parameter-types"}, | ||
[ | [q]="mismatched-parameter-types", | ||
[e]="conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", | [e]="conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", | ||
[g]= | [g]=t, | ||
[b]="conflicting parameter types in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)", | [b]="conflicting parameter types in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-parameter\\-types[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-parameter\\-types[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now","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","improve the \'conflicting types\' diagnostics to include correct location info, now"}, | ||
[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;"}}, | [j]={{C,2476,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // ...\n unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,003: | Line 10,003: | ||
["warn_conflicting_ret_type_modifiers"]={ | ["warn_conflicting_ret_type_modifiers"]={ | ||
[a]="conflicting distributed object modifiers on return type in implementation of A [-Wdistributed-object-modifiers]", | [a]="conflicting distributed object modifiers on return type in implementation of A [-Wdistributed-object-modifiers]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"distributed-object-modifiers"}, | ||
[ | [q]="distributed-object-modifiers", | ||
[e]="conflicting distributed object modifiers on return type in implementation of %0", | [e]="conflicting distributed object modifiers on return type in implementation of %0", | ||
[g]= | [g]=t, | ||
[b]="conflicting distributed object modifiers on return type in implementation of (.*?)", | [b]="conflicting distributed object modifiers on return type in implementation of (.*?)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wdistributed\\-object\\-modifiers[^\\]]*\\]", | ||
Line 10,020: | Line 10,020: | ||
["warn_conflicting_ret_types"]={ | ["warn_conflicting_ret_types"]={ | ||
[a]="conflicting return type in implementation of A: B vs C [-Wmismatched-return-types]", | [a]="conflicting return type in implementation of A: B vs C [-Wmismatched-return-types]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"mismatched-return-types"}, | ||
[ | [q]="mismatched-return-types", | ||
[e]="conflicting return type in implementation of %0%diff{: $ vs $|}1,2", | [e]="conflicting return type in implementation of %0%diff{: $ vs $|}1,2", | ||
[g]= | [g]=t, | ||
[b]="conflicting return type in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)", | [b]="conflicting return type in implementation of (.*?)(?:\\: (.*?) vs (.*?)|)", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-return\\-types[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-return\\-types[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now","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","improve the \'conflicting types\' diagnostics to include correct location info, now"}, | ||
[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;"}}, | [j]={{C,2394,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // ...\n unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,036: | Line 10,036: | ||
}, | }, | ||
["warn_conflicting_variadic"]={ | ["warn_conflicting_variadic"]={ | ||
[a]= | [a]=hd, | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[e]= | [e]=hd, | ||
[g]= | [g]=t, | ||
[b]= | [b]=hd, | ||
[h]=Ab, | [h]=Ab, | ||
[f]=l, | [f]=l, | ||
[i]={"5981b04718ca",1274484538,"Clang missing warning about conflicting declaration vs. definition ","Clang missing warning about conflicting declaration vs. definition "}, | [i]={"5981b04718ca",1274484538,"Clang missing warning about conflicting declaration vs. definition ","Clang missing warning about conflicting declaration vs. definition "}, | ||
[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);"}}, | [j]={{C,2600,"void Sema::WarnConflictingTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n // ...\n if (ImpMethodDecl->isVariadic() != MethodDecl->isVariadic()) {\n Diag(ImpMethodDecl->getLocation(), diag::warn_conflicting_variadic);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,052: | Line 10,052: | ||
["warn_consteval_if_always_true"]={ | ["warn_consteval_if_always_true"]={ | ||
[a]="consteval if is always true in an ... context [-Wredundant-consteval-if]", | [a]="consteval if is always true in an ... context [-Wredundant-consteval-if]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"redundant-consteval-if"}, | ||
[ | [q]="redundant-consteval-if", | ||
[e]="consteval if is always true in an %select{unevaluated|immediate}0 context", | [e]="consteval if is always true in an %select{unevaluated|immediate}0 context", | ||
[g]= | [g]=t, | ||
[b]="consteval if is always true in an (?:unevaluated|immediate) context", | [b]="consteval if is always true in an (?:unevaluated|immediate) context", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wredundant\\-consteval\\-if[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wredundant\\-consteval\\-if[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={ | [i]={Mb,1615397021,lb,lb}, | ||
[j]={{ | [j]={{T,946,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n // ...\n if (ConstevalOrNegatedConsteval) {\n // ...\n if (isUnevaluatedContext() || Immediate)\n Diags.Report(IfLoc, diag::warn_consteval_if_always_true) << Immediate;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,069: | Line 10,069: | ||
["warn_constexpr_unscoped_enum_out_of_range"]={ | ["warn_constexpr_unscoped_enum_out_of_range"]={ | ||
[a]="integer value A is outside the valid range of values [B, C] for the enumeration type D [-Wenum-constexpr-conversion]", | [a]="integer value A is outside the valid range of values [B, C] for the enumeration type D [-Wenum-constexpr-conversion]", | ||
[c]= | [c]=xb, | ||
[d]= | [d]=Rc, | ||
[ | [r]={"enum-constexpr-conversion"}, | ||
[ | [q]="enum-constexpr-conversion", | ||
[e]="integer value %0 is outside the valid range of values [%1, %2] for the enumeration type %3", | [e]="integer value %0 is outside the valid range of values [%1, %2] for the enumeration type %3", | ||
[g]= | [g]=ad, | ||
[b]="integer value (.*?) is outside the valid range of values \\[(.*?), (.*?)\\] for the enumeration type (.*?)", | [b]="integer value (.*?) is outside the valid range of values \\[(.*?), (.*?)\\] for the enumeration type (.*?)", | ||
[h]=" \\[[^\\]]*\\-Wenum\\-constexpr\\-conversion[^\\]]*\\]", | [h]=" \\[[^\\]]*\\-Wenum\\-constexpr\\-conversion[^\\]]*\\]", | ||
[f]=m, | [f]=m, | ||
[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs","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","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 // ...\n case CK_IntegralCast: {\n // ...\n if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n // ...\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 // ...\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 // ...\n case CK_IntegralCast: {\n // ...\n if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n // ...\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 // ...\n if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 10,086: | Line 10,086: | ||
["warn_conv_to_base_not_used"]={ | ["warn_conv_to_base_not_used"]={ | ||
[a]="conversion function converting A to its base class B will never be used [-Wclass-conversion]", | [a]="conversion function converting A to its base class B will never be used [-Wclass-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"class-conversion"}, | ||
[ | [q]="class-conversion", | ||
[e]="conversion function converting %0 to its base class %1 will never be used", | [e]="conversion function converting %0 to its base class %1 will never be used", | ||
[g]= | [g]=t, | ||
[b]="conversion function converting (.*?) to its base class (.*?) will never be used", | [b]="conversion function converting (.*?) to its base class (.*?) will never be used", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\n if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n // ...\n else if (Conversion->size_overridden_methods() != 0)\n // ...\n else if (ConvType->isRecordType()) {\n // ...\n if (ConvType == ClassType)\n // ...\n else if (IsDerivedFrom(Conversion->getLocation(), ClassType, ConvType))\n Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used) << ClassType << ConvType;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,103: | Line 10,103: | ||
["warn_conv_to_self_not_used"]={ | ["warn_conv_to_self_not_used"]={ | ||
[a]="conversion function converting A to itself will never be used [-Wclass-conversion]", | [a]="conversion function converting A to itself will never be used [-Wclass-conversion]", | ||
[c]= | [c]=u, | ||
[d]= | [d]=s, | ||
[ | [r]={"class-conversion"}, | ||
[ | [q]="class-conversion", | ||
[e]="conversion function converting %0 to itself will never be used", | [e]="conversion function converting %0 to itself will never be used", | ||
[g]= | [g]=t, | ||
[b]="conversion function converting (.*?) to itself will never be used", | [b]="conversion function converting (.*?) to itself will never be used", | ||
[h]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | [h]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | ||
[f]=l, | [f]=l, | ||
[i]={eb,1237025389,I,I}, | [i]={eb,1237025389,I,I}, | ||
[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;"}}, | [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 // ...\n if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n // ...\n else if (Conversion->size_overridden_methods() != 0)\n // ...\n else if (ConvType->isRecordType()) {\n // ...\n if (ConvType == ClassType)\n Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used) << ClassType;"}}, | ||
[k]={ | [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]"} | ["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