Module:ClangDiags/DiagsLongData7: Difference between revisions

Jump to navigation Jump to search
no edit summary
(Created page with "local a="regex3"; local b="regex1"; local c="title"; local d="prefix"; local e="category"; local f="type"; local g="regex2"; local h="message"; local i="commit"; local j="source"; local k="Semantic Issue"; local l=""; local m="note\\: "; local n="note: "; local o="Note"; local p="groups"; local q="maingroup"; local r="Warning"; local s="warning: "; local t="(?:warning|error|fatal error)\\: "; local u="clang/lib/Sema/SemaDeclAttr.cpp"; local v="clang/lib/Sema/SemaDecl.cpp...")
 
No edit summary
Line 146: Line 146:
[e]=H,
[e]=H,
[i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct."},
[i]={"b78ca83d3b9f",1427859197,"[OPENMP] Sema analysis for \'atomic capture\' construct."},
[j]={{w,10362,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (ErrorFound != NoError) {\n        Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"},{w,10511,"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]={{w,12793,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (ErrorFound != NoError) {\n        Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"},{w,12956,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_capture) << ErrorFound << NoteRange;"}}
},
},
["note_omp_atomic_compare"]={
["note_omp_atomic_compare"]={
Line 158: Line 158:
[e]=H,
[e]=H,
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[j]={{w,10522,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"},{w,10540,"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]={{w,12968,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"},{w,12988,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n    } else {\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n        Diag(ErrorInfo.NoteLoc, diag::note_omp_atomic_compare) << ErrorInfo.Error << ErrorInfo.NoteRange;"}}
},
},
["note_omp_atomic_read_write"]={
["note_omp_atomic_read_write"]={
Line 170: Line 170:
[e]=H,
[e]=H,
[i]={"f33eba65730d",1417159300,"[OPENMP] Additional processing of \'omp atomic write\' directive."},
[i]={"f33eba65730d",1417159300,"[OPENMP] Additional processing of \'omp atomic write\' directive."},
[j]={{w,10259,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"},{w,10305,"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]={{w,12656,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"},{w,12718,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n    if (ErrorFound != NoError) {\n      Diag(NoteLoc, diag::note_omp_atomic_read_write) << ErrorFound << NoteRange;"}}
},
},
["note_omp_atomic_update"]={
["note_omp_atomic_update"]={
Line 182: Line 182:
[e]=H,
[e]=H,
[i]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'."},
[i]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'."},
[j]={{w,10320,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n    if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"},{w,10346,"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]={{w,12739,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n    if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"},{w,12774,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  } else if (AtomicKind == OMPC_write) {\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  } else if (AtomicKind == OMPC_capture) {\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      if (AtomicBinOp && AtomicBinOp->getOpcode() == BO_Assign) {\n        if (Checker.checkStatement(Body, diag::err_omp_atomic_capture_not_expression_statement, diag::note_omp_atomic_update))"}}
},
},
["note_omp_collapse_ordered_expr"]={
["note_omp_collapse_ordered_expr"]={
Line 194: Line 194:
[e]=H,
[e]=H,
[i]={"10e775f4a882",1438256176,"[OPENMP 4.1] Initial support for extended \'ordered\' clause."},
[i]={"10e775f4a882",1438256176,"[OPENMP 4.1] Initial support for extended \'ordered\' clause."},
[j]={{w,7355,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n        SemaRef.Diag(DSA.getConstructLoc(), diag::note_omp_collapse_ordered_expr) << 2 << CollapseLoopCountExpr->getSourceRange() << OrderedLoopCountExpr->getSourceRange();"},{w,7357,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n        SemaRef.Diag(CollapseLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 0 << CollapseLoopCountExpr->getSourceRange();"},{w,7359,"/// 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]={{w,9212,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n        SemaRef.Diag(DSA.getConstructLoc(), diag::note_omp_collapse_ordered_expr) << 2 << CollapseLoopCountExpr->getSourceRange() << OrderedLoopCountExpr->getSourceRange();"},{w,9217,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n        SemaRef.Diag(CollapseLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 0 << CollapseLoopCountExpr->getSourceRange();"},{w,9221,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // Ranged for is supported only in OpenMP 5.0.\n  if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n    if (TotalNestedLoopCount > 1) {\n      if (CollapseLoopCountExpr && OrderedLoopCountExpr)\n      else if (CollapseLoopCountExpr)\n      else\n        SemaRef.Diag(OrderedLoopCountExpr->getExprLoc(), diag::note_omp_collapse_ordered_expr) << 1 << OrderedLoopCountExpr->getSourceRange();"}}
},
},
["note_omp_conversion_here"]={
["note_omp_conversion_here"]={
Line 206: Line 206:
[e]=H,
[e]=H,
[i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'"},
[i]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'"},
[j]={{w,13496,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"},{w,13498,"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]={{w,16406,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"},{w,16415,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_omp_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"}}
},
},
["note_omp_critical_hint_here"]={
["note_omp_critical_hint_here"]={
Line 218: Line 218:
[e]=H,
[e]=H,
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[j]={{w,8676,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n        Diag(HintLoc, diag::note_omp_critical_hint_here) << 0 << toString(Hint, /*Radix=*/10, /*Signed=*/false);"},{w,8680,"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]={{w,10890,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n        Diag(HintLoc, diag::note_omp_critical_hint_here) << 0 << toString(Hint, /*Radix=*/10, /*Signed=*/false);"},{w,10895,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n        Diag(C->getBeginLoc(), diag::note_omp_critical_hint_here) << 1"}}
},
},
["note_omp_critical_no_hint"]={
["note_omp_critical_no_hint"]={
Line 230: Line 230:
[e]=H,
[e]=H,
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[i]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive."},
[j]={{w,8678,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n      else\n        Diag(StartLoc, diag::note_omp_critical_no_hint) << 0;"},{w,8684,"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]={{w,10893,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (HintLoc.isValid())\n      else\n        Diag(StartLoc, diag::note_omp_critical_no_hint) << 0;"},{w,10900,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Pair.first && DirName.getName() && !DependentHint) {\n    if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n      if (const auto *C = Pair.first->getSingleClause<OMPHintClause>()) {\n      } else {\n        Diag(Pair.first->getBeginLoc(), diag::note_omp_critical_no_hint) << 1;"}}
},
},
["note_omp_ctx_compatible_set_and_selector_for_property"]={
["note_omp_ctx_compatible_set_and_selector_for_property"]={
Line 242: Line 242:
[e]=Q,
[e]=Q,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{P,808,"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]={{P,1032,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(PropertyLoc, diag::note_omp_ctx_compatible_set_and_selector_for_property) << getOpenMPContextTraitPropertyName(TIProperty.Kind, TIProperty.RawString) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(TIProperty.Kind)) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(TIProperty.Kind));"}}
},
},
["note_omp_ctx_compatible_set_for_selector"]={
["note_omp_ctx_compatible_set_for_selector"]={
Line 254: Line 254:
[e]=Q,
[e]=Q,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{P,907,"/// 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]={{P,1164,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  if (!isValidTraitSelectorForTraitSet(TISelector.Kind, Set, AllowsTraitScore, RequiresProperty)) {\n    Diag(SelectorLoc, diag::note_omp_ctx_compatible_set_for_selector) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(TISelector.Kind)) << RequiresProperty;"}}
},
},
["note_omp_declare_variant_ctx_continue_here"]={
["note_omp_declare_variant_ctx_continue_here"]={
Line 266: Line 266:
[e]=Q,
[e]=Q,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{P,795,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  // If we have an invalid property here we already issued a warning.\n  if (TIProperty.Kind == TraitProperty::invalid) {\n    if (PropertyLoc != Tok.getLocation())\n      Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{P,809,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{P,895,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the selector. However, commas are ambiguous so we look for the nesting\n  // of parentheses here as well.\n  auto FinishSelector = [OuterPC, this]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_LVL;"},{P,1025,"/// 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]={{P,1013,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  // If we have an invalid property here we already issued a warning.\n  if (TIProperty.Kind == TraitProperty::invalid) {\n    if (PropertyLoc != Tok.getLocation())\n      Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{P,1039,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_TRAIT_LVL;"},{P,1148,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the selector. However, commas are ambiguous so we look for the nesting\n  // of parentheses here as well.\n  auto FinishSelector = [OuterPC, this]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_LVL;"},{P,1318,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n  // If anything went wrong we issue an error or warning and then skip the rest\n  // of the set. However, commas are ambiguous so we look for the nesting\n  // of braces here as well.\n  auto FinishSelectorSet = [this, OuterBC]() -> void {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_continue_here) << CONTEXT_SELECTOR_SET_LVL;"}}
},
},
["note_omp_declare_variant_ctx_is_a"]={
["note_omp_declare_variant_ctx_is_a"]={
Line 278: Line 278:
[e]=Q,
[e]=Q,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{P,725,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_TRAIT_LVL;"},{P,732,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_TRAIT_LVL;"},{P,834,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_SELECTOR_LVL;"},{P,843,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_LVL;"},{P,981,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_SELECTOR_SET_LVL;"},{P,992,"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]={{P,905,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_TRAIT_LVL;"},{P,914,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_TRAIT_LVL;"},{P,1069,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_SET_LVL << CONTEXT_SELECTOR_LVL;"},{P,1083,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_LVL;"},{P,1255,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_SELECTOR_LVL << CONTEXT_SELECTOR_SET_LVL;"},{P,1275,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_is_a) << Name << CONTEXT_TRAIT_LVL << CONTEXT_SELECTOR_SET_LVL;"}}
},
},
["note_omp_declare_variant_ctx_options"]={
["note_omp_declare_variant_ctx_options"]={
Line 290: Line 290:
[e]=Q,
[e]=Q,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{P,707,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{P,746,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{P,818,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{P,847,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{P,965,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"},{P,996,"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]={{P,884,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{P,942,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_TRAIT_LVL << listOpenMPContextTraitProperties(Set, Selector);"},{P,1051,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{P,1093,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_LVL << listOpenMPContextTraitSelectors(Set);"},{P,1237,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (Name.empty()) {\n    Diag(Tok.getLocation(), diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"},{P,1285,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::note_omp_declare_variant_ctx_options) << CONTEXT_SELECTOR_SET_LVL << listOpenMPContextTraitSets();"}}
},
},
["note_omp_declare_variant_ctx_try"]={
["note_omp_declare_variant_ctx_try"]={
Line 302: Line 302:
[e]=Q,
[e]=Q,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{P,726,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{P,736,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{P,743,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{P,835,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{P,844,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{P,985,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{P,993,"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]={{P,907,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{P,921,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{P,934,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{P,1071,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  if (SetForName != TraitSet::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << Name << \"<selector-name>\""},{P,1085,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"},{P,1262,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  if (SelectorForName != TraitSelector::invalid) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForSelector(SelectorForName)) << Name << (RequiresProperty ? \"(<property-name>)\" : \"\");"},{P,1277,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  for (const auto &PotentialSet : {TraitSet::construct, TraitSet::user, TraitSet::implementation, TraitSet::device}) {\n    Diag(NameLoc, diag::note_omp_declare_variant_ctx_try) << getOpenMPContextTraitSetName(getOpenMPContextTraitSetForProperty(PropertyForName)) << getOpenMPContextTraitSelectorName(getOpenMPContextTraitSelectorForProperty(PropertyForName)) << (\"(\" + Name + \")\").str();"}}
},
},
["note_omp_declare_variant_ctx_used_here"]={
["note_omp_declare_variant_ctx_used_here"]={
Line 314: Line 314:
[e]=Q,
[e]=Q,
[i]={"70d2e5427ed3",1570556872,"[OPENMP50]Do not allow multiple same context traits in the same context"},
[i]={"70d2e5427ed3",1570556872,"[OPENMP50]Do not allow multiple same context traits in the same context"},
[j]={{P,696,"static bool checkForDuplicates(Parser &P, StringRef Name, SourceLocation NameLoc, llvm::StringMap<SourceLocation> &Seen, OMPContextLvl Lvl) {\n  P.Diag(Res.first->getValue(), diag::note_omp_declare_variant_ctx_used_here) << Lvl << Name;"},{P,772,"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]={{P,869,"static bool checkForDuplicates(Parser &P, StringRef Name, SourceLocation NameLoc, llvm::StringMap<SourceLocation> &Seen, OMPContextLvl Lvl) {\n  P.Diag(Res.first->getValue(), diag::note_omp_declare_variant_ctx_used_here) << Lvl << Name;"},{P,985,"static bool checkExtensionProperty(Parser &P, SourceLocation Loc, OMPTraitProperty &TIProperty, OMPTraitSelector &TISelector, llvm::StringMap<SourceLocation> &Seen) {\n  if (IsMatchExtension(TIProperty)) {\n    for (OMPTraitProperty &SeenProp : TISelector.Properties)\n      if (IsMatchExtension(SeenProp)) {\n        P.Diag(SeenLoc, diag::note_omp_declare_variant_ctx_used_here) << CONTEXT_TRAIT_LVL << SeenName;"}}
},
},
["note_omp_default_dsa_none"]={
["note_omp_default_dsa_none"]={
Line 326: Line 326:
[e]=H,
[e]=H,
[i]={"cf9e7a282b74",1557164962,"[OPENMP]Fix PR41768: check DSA for globals with `default(none)` clauses."},
[i]={"cf9e7a282b74",1557164962,"[OPENMP]Fix PR41768: check DSA for globals with `default(none)` clauses."},
[j]={{w,5376,"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]={{w,6796,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const auto &P : VarsWithInheritedDSA) {\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n      Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_default_dsa_none);"}}
},
},
["note_omp_defaultmap_attr_none"]={
["note_omp_defaultmap_attr_none"]={
Line 338: Line 338:
[e]=H,
[e]=H,
[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[j]={{w,5379,"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]={{w,6802,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const auto &P : VarsWithInheritedDSA) {\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n    } else if (getLangOpts().OpenMP >= 50) {\n      Diag(DSAStack->getDefaultDSALocation(), diag::note_omp_defaultmap_attr_none);"}}
},
},
["note_omp_directive_here"]={
["note_omp_directive_here"]={
Line 350: Line 350:
[e]=H,
[e]=H,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{w,12171,"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]={{w,14994,"StmtResult Sema::ActOnOpenMPUnrollDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (FullClause) {\n    if (!VerifyPositiveIntegerConstantInClause(LoopHelper.NumIterations, OMPC_full, /*StrictlyPositive=*/false,\n      Diag(FullClause->getBeginLoc(), diag::note_omp_directive_here) << \"#pragma omp unroll full\";"}}
},
},
["note_omp_exits_structured_block"]={
["note_omp_exits_structured_block"]={
Line 362: Line 362:
[e]=H,
[e]=H,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{N,552,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{N,860,"/// 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]={{N,617,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{N,946,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n        S.Diag(To->getBeginLoc(), diag::note_omp_exits_structured_block);"}}
},
},
["note_omp_explicit_dsa"]={
["note_omp_explicit_dsa"]={
Line 374: Line 374:
[e]=H,
[e]=H,
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[j]={{w,2859,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (DVar.RefExpr) {\n    SemaRef.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(DVar.CKind);"},{w,5467,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.8.1, simd construct, Restrictions]\n          // A list-item cannot appear in more than one aligned clause.\n          if (AlignedArgs.count(CanonPVD) > 0) {\n            Diag(AlignedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,5483,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (isa<CXXThisExpr>(E)) {\n      if (AlignedThis) {\n        Diag(AlignedThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,5525,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.15.3.7, linear Clause, Restrictions]\n          // A list-item cannot appear in more than one linear clause.\n          if (LinearArgs.count(CanonPVD) > 0) {\n            Diag(LinearArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_linear);"},{w,5531,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // Each argument can appear in at most one uniform or linear clause.\n          if (UniformedArgs.count(CanonPVD) > 0) {\n            Diag(UniformedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_uniform);"},{w,5545,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (isa<CXXThisExpr>(E)) {\n      if (UniformedLinearThis) {\n        Diag(UniformedLinearThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform : OMPC_linear);"},{w,16627,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP  [2.8.1, simd construct, Restrictions]\n    // A list-item cannot appear in more than one aligned clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueAligned(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,19425,"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]={{w,3569,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (DVar.RefExpr) {\n    SemaRef.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(DVar.CKind);"},{w,6909,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.8.1, simd construct, Restrictions]\n          // A list-item cannot appear in more than one aligned clause.\n          if (AlignedArgs.count(CanonPVD) > 0) {\n            Diag(AlignedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,6931,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Aligneds) {\n    if (isa<CXXThisExpr>(E)) {\n      if (AlignedThis) {\n        Diag(AlignedThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,6980,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.15.3.7, linear Clause, Restrictions]\n          // A list-item cannot appear in more than one linear clause.\n          if (LinearArgs.count(CanonPVD) > 0) {\n            Diag(LinearArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_linear);"},{w,6990,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // Each argument can appear in at most one uniform or linear clause.\n          if (UniformedArgs.count(CanonPVD) > 0) {\n            Diag(UniformedArgs[CanonPVD]->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_uniform);"},{w,7011,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  for (const Expr *E : Linears) {\n    if (isa<CXXThisExpr>(E)) {\n      if (UniformedLinearThis) {\n        Diag(UniformedLinearThis->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform : OMPC_linear);"},{w,20299,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP  [2.8.1, simd construct, Restrictions]\n    // A list-item cannot appear in more than one aligned clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueAligned(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_aligned);"},{w,23732,"OMPClause *Sema::ActOnOpenMPNontemporalClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0, 2.9.3.1 simd Construct, Restrictions.\n    // A list-item cannot appear in more than one nontemporal clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueNontemporal(D, SimpleRefExpr)) {\n      Diag(PrevRef->getExprLoc(), diag::note_omp_explicit_dsa) << getOpenMPClauseName(OMPC_nontemporal);"}}
},
},
["note_omp_flush_order_clause_here"]={
["note_omp_flush_order_clause_here"]={
Line 386: Line 386:
[e]=H,
[e]=H,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{w,8948,"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]={{w,11242,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (FC && OrderClause) {\n    Diag(OrderClause->getBeginLoc(), diag::note_omp_flush_order_clause_here) << getOpenMPClauseName(OrderClause->getClauseKind());"}}
},
},
["note_omp_implicit_dsa"]={
["note_omp_implicit_dsa"]={
Line 398: Line 398:
[e]=H,
[e]=H,
[i]={"bae9a793fdf7",1403865426,"[OPENMP] Parsing and sema analysis for \'copyprivate\' clause."},
[i]={"bae9a793fdf7",1403865426,"[OPENMP] Parsing and sema analysis for \'copyprivate\' clause."},
[j]={{w,2891,"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]={{w,3616,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (Reason != PDSA_Implicit) {\n  } else if (DVar.ImplicitDSALoc.isValid()) {\n    SemaRef.Diag(DVar.ImplicitDSALoc, diag::note_omp_implicit_dsa) << getOpenMPClauseName(DVar.CKind);"}}
},
},
["note_omp_invalid_length_on_this_ptr_mapping"]={
["note_omp_invalid_length_on_this_ptr_mapping"]={
Line 410: Line 410:
[e]=H,
[e]=H,
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[j]={{w,17469,"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]={{w,21319,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n      if (!OASE->getLength()->isValueDependent() && OASE->getLength()->EvaluateAsInt(ResultR, SemaRef.getASTContext()) && !ResultR.Val.getInt().isOne()) {\n        SemaRef.Diag(OASE->getLength()->getExprLoc(), diag::note_omp_invalid_length_on_this_ptr_mapping);"}}
},
},
["note_omp_invalid_lower_bound_on_this_ptr_mapping"]={
["note_omp_invalid_lower_bound_on_this_ptr_mapping"]={
Line 422: Line 422:
[e]=H,
[e]=H,
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[j]={{w,17473,"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]={{w,21328,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n      if (OASE->getLowerBound() && !OASE->getLowerBound()->isValueDependent() && OASE->getLowerBound()->EvaluateAsInt(ResultL, SemaRef.getASTContext()) && !ResultL.Val.getInt().isZero()) {\n        SemaRef.Diag(OASE->getLowerBound()->getExprLoc(), diag::note_omp_invalid_lower_bound_on_this_ptr_mapping);"}}
},
},
["note_omp_invalid_subscript_on_this_ptr_map"]={
["note_omp_invalid_subscript_on_this_ptr_map"]={
Line 434: Line 434:
[e]=H,
[e]=H,
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[i]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ..."},
[j]={{w,17403,"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]={{w,21240,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E->IgnoreParenCasts())) {\n      if (!AE->getIdx()->isValueDependent() && AE->getIdx()->EvaluateAsInt(Result, SemaRef.getASTContext()) && !Result.Val.getInt().isZero()) {\n        SemaRef.Diag(AE->getIdx()->getExprLoc(), diag::note_omp_invalid_subscript_on_this_ptr_map);"}}
},
},
["note_omp_loop_cond_requres_compatible_incr"]={
["note_omp_loop_cond_requres_compatible_incr"]={
Line 446: Line 446:
[e]=H,
[e]=H,
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"},
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"},
[j]={{w,6388,"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]={{w,8026,"bool OpenMPIterationSpaceChecker::setStep(Expr *NewStep, bool Subtract) {\n  if (!NewStep->isValueDependent()) {\n    if (UB && (IsConstZero || (*TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract)) : (IsConstPos || (IsUnsigned && !Subtract))))) {\n      SemaRef.Diag(ConditionLoc, diag::note_omp_loop_cond_requres_compatible_incr) << *TestIsLessOp << ConditionSrcRange;"}}
},
},
["note_omp_marked_declare_variant_here"]={
["note_omp_marked_declare_variant_here"]={
Line 458: Line 458:
[e]=H,
[e]=H,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{w,6021,"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]={{w,7584,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // Check if variant function is not marked with declare variant directive.\n  if (NewFD->hasAttrs() && NewFD->hasAttr<OMPDeclareVariantAttr>()) {\n    Diag(SR.getBegin(), diag::note_omp_marked_declare_variant_here) << SR;"}}
},
},
["note_omp_marked_device_type_here"]={
["note_omp_marked_device_type_here"]={
Line 470: Line 470:
[e]=H,
[e]=H,
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"},
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"},
[j]={{w,2198,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (LangOpts.OpenMPIsTargetDevice && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_Host) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << HostDevTy;"},{w,2219,"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]={{w,2722,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (LangOpts.OpenMPIsTargetDevice && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_Host) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << HostDevTy;"},{w,2751,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n  if (!LangOpts.OpenMPIsTargetDevice && !LangOpts.OpenMPOffloadMandatory && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_NoHost) {\n    Diag(*OMPDeclareTargetDeclAttr::getLocation(FD), diag::note_omp_marked_device_type_here) << NoHostDevTy;"}}
},
},
["note_omp_nested_statement_here"]={
["note_omp_nested_statement_here"]={
Line 482: Line 482:
[e]=H,
[e]=H,
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[j]={{w,10605,"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]={{w,13062,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    if (!OMPTeamsFound) {\n      Diag(S->getBeginLoc(), diag::note_omp_nested_statement_here) << isa<OMPExecutableDirective>(S);"}}
},
},
["note_omp_nested_teams_construct_here"]={
["note_omp_nested_teams_construct_here"]={
Line 494: Line 494:
[e]=H,
[e]=H,
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[i]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support."},
[j]={{w,10604,"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]={{w,13061,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    if (!OMPTeamsFound) {\n      Diag(DSAStack->getInnerTeamsRegionLoc(), diag::note_omp_nested_teams_construct_here);"}}
},
},
["note_omp_nowait_clause_here"]={
["note_omp_nowait_clause_here"]={
Line 506: Line 506:
[e]=H,
[e]=H,
[i]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive."},
[i]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive."},
[j]={{w,8620,"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]={{w,10826,"StmtResult Sema::ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *Clause : Clauses) {\n    if (Copyprivate && Nowait) {\n      Diag(Nowait->getBeginLoc(), diag::note_omp_nowait_clause_here);"}}
},
},
["note_omp_ordered_param"]={
["note_omp_ordered_param"]={
Line 518: Line 518:
[e]=H,
[e]=H,
[i]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'."},
[i]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'."},
[j]={{w,3738,"static bool checkOrderedOrderSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n  if (Ordered && Order) {\n    S.Diag(Ordered->getBeginLoc(), diag::note_omp_ordered_param) << 0 << SourceRange(Ordered->getBeginLoc(), Ordered->getEndLoc());"},{w,9061,"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]={{w,4766,"static bool checkOrderedOrderSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n  if (Ordered && Order) {\n    S.Diag(Ordered->getBeginLoc(), diag::note_omp_ordered_param) << 0 << SourceRange(Ordered->getBeginLoc(), Ordered->getEndLoc());"},{w,11384,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n  } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n  } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) {\n  } else if (TC || Clauses.empty()) {\n    if (const Expr *Param = DSAStack->getParentOrderedRegionParam().first) {\n      Diag(Param->getBeginLoc(), diag::note_omp_ordered_param) << 1;"}}
},
},
["note_omp_predefined_allocator"]={
["note_omp_predefined_allocator"]={
Line 530: Line 530:
[e]=H,
[e]=H,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{w,19574,"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]={{w,23913,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n  for (const UsesAllocatorsData &D : Data) {\n    // Check allocator expression.\n    if (D.Allocator->isTypeDependent()) {\n    } else {\n      // OpenMP [2.12.5, target Construct]\n      // Predefined allocators appearing in a uses_allocators clause cannot have\n      // traits specified.\n      if (IsPredefinedAllocator && D.AllocatorTraits) {\n        Diag(D.Allocator->getExprLoc(), diag::note_omp_predefined_allocator) << cast<NamedDecl>(DRE->getDecl())->getName() << D.Allocator->getSourceRange();"}}
},
},
["note_omp_predetermined_dsa"]={
["note_omp_predetermined_dsa"]={
Line 542: Line 542:
[e]=H,
[e]=H,
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[i]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'"},
[j]={{w,2889,"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]={{w,3612,"static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, const ValueDecl *D, const DSAStackTy::DSAVarData &DVar, bool IsLoopIterVar) {\n  if (Reason != PDSA_Implicit) {\n    SemaRef.Diag(ReportLoc, diag::note_omp_predetermined_dsa) << Reason << ReportHint << getOpenMPDirectiveName(Stack->getCurrentDirective());"}}
},
},
["note_omp_previous_allocator"]={
["note_omp_previous_allocator"]={
Line 554: Line 554:
[e]=H,
[e]=H,
[i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable."},
[i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable."},
[j]={{w,2685,"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]={{w,3347,"static bool checkPreviousOMPAllocateAttribute(Sema &S, DSAStackTy *Stack, Expr *RefExpr, VarDecl *VD, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorKind, Expr *Allocator) {\n  if (!AllocatorsMatch) {\n    S.Diag(PrevAllocatorLoc, diag::note_omp_previous_allocator) << PrevAllocatorRange;"}}
},
},
["note_omp_previous_clause"]={
["note_omp_previous_clause"]={
Line 566: Line 566:
[e]=H,
[e]=H,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{w,8844,"/// 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]={{w,11101,"/// Find and diagnose mutually exclusive clause kinds.\nstatic bool checkMutuallyExclusiveClauses(Sema &S, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPClauseKind> MutuallyExclusiveClauses) {\n  for (const OMPClause *C : Clauses) {\n    if (llvm::is_contained(MutuallyExclusiveClauses, C->getClauseKind())) {\n      if (!PrevClause) {\n      } else if (PrevClause->getClauseKind() != C->getClauseKind()) {\n        S.Diag(PrevClause->getBeginLoc(), diag::note_omp_previous_clause) << getOpenMPClauseName(PrevClause->getClauseKind());"}}
},
},
["note_omp_previous_critical_region"]={
["note_omp_previous_critical_region"]={
Line 578: Line 578:
[e]=H,
[e]=H,
[i]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'."},
[i]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'."},
[j]={{w,3992,"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]={{w,5108,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n    if (CurrentRegion == OMPD_cancellation_point || CurrentRegion == OMPD_cancel) {\n    } else if (CurrentRegion == OMPD_master || CurrentRegion == OMPD_masked) {\n    } else if (CurrentRegion == OMPD_critical && CurrentName.getName()) {\n      if (DeadLock) {\n        if (PreviousCriticalLoc.isValid())\n          SemaRef.Diag(PreviousCriticalLoc, diag::note_omp_previous_critical_region);"}}
},
},
["note_omp_previous_directive"]={
["note_omp_previous_directive"]={
Line 590: Line 590:
[e]=H,
[e]=H,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{w,8989,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Check that only one instance of scan directives is used in the same outer\n  // region.\n  if (DSAStack->doesParentHasScanDirective()) {\n    Diag(DSAStack->getParentScanDirectiveLoc(), diag::note_omp_previous_directive) << \"scan\";"},{w,9076,"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]={{w,11293,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Check that only one instance of scan directives is used in the same outer\n  // region.\n  if (DSAStack->doesParentHasScanDirective()) {\n    Diag(DSAStack->getParentScanDirectiveLoc(), diag::note_omp_previous_directive) << \"scan\";"},{w,11400,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.0, 2.17.9, ordered Construct, Restrictions.\n  // During execution of an iteration of a worksharing-loop or a loop nest\n  // within a worksharing-loop, simd, or worksharing-loop SIMD region, a thread\n  // must not execute more than one ordered region corresponding to an ordered\n  // construct without a depend clause.\n  if (!DependFound && !DoacrossFound) {\n    if (DSAStack->doesParentHasOrderedDirective()) {\n      Diag(DSAStack->getParentOrderedDirectiveLoc(), diag::note_omp_previous_directive) << \"ordered\";"}}
},
},
["note_omp_previous_inscan_reduction"]={
["note_omp_previous_inscan_reduction"]={
Line 602: Line 602:
[e]=H,
[e]=H,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{w,2273,"/// 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]={{w,2821,"/// Check consistency of the reduction clauses.\nstatic void checkReductionClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n  if (InscanFound) {\n    for (OMPClause *C : Clauses) {\n      if (RC->getModifier() != OMPC_REDUCTION_inscan) {\n        S.Diag(InscanLoc, diag::note_omp_previous_inscan_reduction);"}}
},
},
["note_omp_previous_mem_order_clause"]={
["note_omp_previous_mem_order_clause"]={
Line 614: Line 614:
[e]=H,
[e]=H,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{w,8939,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    if (C->getClauseKind() == OMPC_acq_rel || C->getClauseKind() == OMPC_acquire || C->getClauseKind() == OMPC_release) {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{w,10129,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n        Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{w,10135,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n      } else {\n        if (!EncounteredAtomicKinds.insert(C->getClauseKind()).second) {\n          Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{w,10147,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_relaxed: {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{w,10178,"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]={{w,11231,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    if (C->getClauseKind() == OMPC_acq_rel || C->getClauseKind() == OMPC_acquire || C->getClauseKind() == OMPC_release) {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{w,12496,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n        Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{w,12504,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n      } else {\n        if (!EncounteredAtomicKinds.insert(C->getClauseKind()).second) {\n          Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(AtomicKind);"},{w,12519,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  for (const OMPClause *C : Clauses) {\n    case OMPC_relaxed: {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"},{w,12559,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.0, 2.17.7 atomic Construct, Restrictions\n  // If atomic-clause is read then memory-order-clause must not be acq_rel or\n  // release.\n  // If atomic-clause is write then memory-order-clause must not be acq_rel or\n  // acquire.\n  // If atomic-clause is update or not present then memory-order-clause must not\n  // be acq_rel or acquire.\n  if ((AtomicKind == OMPC_read && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_release)) || ((AtomicKind == OMPC_write || AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_acquire))) {\n    Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) << getOpenMPClauseName(MemOrderKind);"}}
},
},
["note_omp_previous_named_if_clause"]={
["note_omp_previous_named_if_clause"]={
Line 626: Line 626:
[e]=H,
[e]=H,
[i]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause."},
[i]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause."},
[j]={{w,4150,"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]={{w,5320,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n  // If any if clause on the directive includes a directive-name-modifier then\n  // all if clauses on the directive must include a directive-name-modifier.\n  if (FoundNameModifiers[OMPD_unknown] && NamedModifiersNumber > 0) {\n    for (SourceLocation Loc : NameModifierLoc) {\n      S.Diag(Loc, diag::note_omp_previous_named_if_clause);"}}
},
},
["note_omp_previous_reduction_identifier"]={
["note_omp_previous_reduction_identifier"]={
Line 638: Line 638:
[e]=H,
[e]=H,
[i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause."},
[i]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause."},
[j]={{w,16253,"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]={{w,19812,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.15.4.6, Restrictions, p.2]\n    // A list item that appears in an in_reduction clause of a task construct\n    // must appear in a task_reduction clause of a construct associated with a\n    // taskgroup region that includes the participating task in its taskgroup\n    // set. The construct associated with the innermost region that meets this\n    // condition must specify the same reduction-identifier as the in_reduction\n    // clause.\n    if (ClauseKind == OMPC_in_reduction) {\n      if ((DeclareReductionRef.isUnset() && IsParentReductionOp) || (DeclareReductionRef.isUsable() && IsParentBOK) || (IsParentBOK && BOK != ParentBOK) || IsParentReductionOp) {\n        if (EmitError) {\n          S.Diag(ParentSR.getBegin(), diag::note_omp_previous_reduction_identifier) << ParentSR << (IsParentBOK ? ParentBOKDSA.RefExpr : ParentReductionOpDSA.RefExpr)->getSourceRange();"}}
},
},
["note_omp_protected_structured_block"]={
["note_omp_protected_structured_block"]={
Line 650: Line 650:
[e]=H,
[e]=H,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{N,552,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{N,858,"/// 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]={{N,616,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  default:\n    if (auto *ED = dyn_cast<OMPExecutableDirective>(S)) {\n      if (!ED->isStandaloneDirective()) {\n        Scopes.emplace_back(ParentScope, diag::note_omp_protected_structured_block, diag::note_omp_exits_structured_block, ED->getStructuredBlock()->getBeginLoc());"},{N,944,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {"}}
},
},
["note_omp_referenced"]={
["note_omp_referenced"]={
Line 662: Line 662:
[e]=H,
[e]=H,
[i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause"},
[i]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause"},
[j]={{w,15905,"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]={{w,19368,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n      if (DVar.CKind == OMPC_reduction) {\n        if (DVar.RefExpr)\n          S.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_referenced);"}}
},
},
["note_omp_requires_encountered_directive"]={
["note_omp_requires_encountered_directive"]={
Line 674: Line 674:
[e]=H,
[e]=H,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{w,2843,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n        for (SourceLocation TargetLoc : TargetLocations) {\n          Diag(TargetLoc, diag::note_omp_requires_encountered_directive) << \"target\";"},{w,2847,"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]={{w,3545,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n        for (SourceLocation TargetLoc : TargetLocations) {\n          Diag(TargetLoc, diag::note_omp_requires_encountered_directive) << \"target\";"},{w,3552,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n      } else if (!AtomicLoc.isInvalid() && isa<OMPAtomicDefaultMemOrderClause>(CNew)) {\n        Diag(AtomicLoc, diag::note_omp_requires_encountered_directive) << \"atomic\";"}}
},
},
["note_omp_requires_previous_clause"]={
["note_omp_requires_previous_clause"]={
Line 686: Line 686:
[e]=H,
[e]=H,
[i]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause"},
[i]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause"},
[j]={{w,558,"/// 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]={{w,681,"/// Stack for tracking declarations used in OpenMP directives and\n/// clauses and their data-sharing attributes.\nclass DSAStackTy {\n  /// Checks for a duplicate clause amongst previously declared requires\n  /// directives\n  bool hasDuplicateRequiresClause(ArrayRef<OMPClause *> ClauseList) const {\n    for (OMPClause *CNew : ClauseList) {\n      for (const OMPRequiresDecl *D : RequiresDecls) {\n        for (const OMPClause *CPrev : D->clauselists()) {\n          if (CNew->getClauseKind() == CPrev->getClauseKind()) {\n            SemaRef.Diag(CPrev->getBeginLoc(), diag::note_omp_requires_previous_clause) << getOpenMPClauseName(CPrev->getClauseKind());"}}
},
},
["note_omp_task_predetermined_firstprivate_here"]={
["note_omp_task_predetermined_firstprivate_here"]={
Line 698: Line 698:
[e]=H,
[e]=H,
[i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause."},
[i]={"e7a5517a5835",1412764975,"[OPENMP] Codegen for \'firstprivate\' clause."},
[j]={{w,15085,"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]={{w,18440,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (VDPrivate->isInvalidDecl()) {\n      if (IsImplicitClause) {\n        Diag(RefExpr->getExprLoc(), diag::note_omp_task_predetermined_firstprivate_here);"}}
},
},
["note_opencl_typedef_access_qualifier"]={
["note_opencl_typedef_access_qualifier"]={
Line 710: Line 710:
[e]=k,
[e]=k,
[i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs"},
[i]={"c813c8113db7",1467992099,"[OpenCL] Fix access qualifiers handling for typedefs"},
[j]={{hb,7463,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    S.Diag(TypedefTy->getDecl()->getBeginLoc(), diag::note_opencl_typedef_access_qualifier) << PrevAccessQual;"}}
[j]={{hb,8443,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    S.Diag(TypedefTy->getDecl()->getBeginLoc(), diag::note_opencl_typedef_access_qualifier) << PrevAccessQual;"}}
},
},
["note_operator_arrow_depth"]={
["note_operator_arrow_depth"]={
Line 722: Line 722:
[e]=k,
[e]=k,
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[j]={{Ub,6582,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n        Diag(OpLoc, diag::note_operator_arrow_depth) << getLangOpts().ArrowDepth;"}}
[j]={{Ub,7591,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n        Diag(OpLoc, diag::note_operator_arrow_depth) << getLangOpts().ArrowDepth;"}}
},
},
["note_operator_arrow_here"]={
["note_operator_arrow_here"]={
Line 734: Line 734:
[e]=k,
[e]=k,
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[j]={{Ub,6532,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n    } else {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrow_here) << OperatorArrows[I]->getCallResultType();"}}
[j]={{Ub,7537,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n    } else {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrow_here) << OperatorArrows[I]->getCallResultType();"}}
},
},
["note_operator_arrows_suppressed"]={
["note_operator_arrows_suppressed"]={
Line 746: Line 746:
[e]=k,
[e]=k,
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[i]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will"},
[j]={{Ub,6529,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrows_suppressed) << SkipCount;"}}
[j]={{Ub,7533,"/// Note a set of \'operator->\' functions that were used for a member access.\nstatic void noteOperatorArrows(Sema &S, ArrayRef<FunctionDecl *> OperatorArrows) {\n  for (unsigned I = 0; I < OperatorArrows.size(); /**/) {\n    if (I == SkipStart) {\n      S.Diag(OperatorArrows[I]->getLocation(), diag::note_operator_arrows_suppressed) << SkipCount;"}}
},
},
["note_overridden_marked_noescape"]={
["note_overridden_marked_noescape"]={
Line 758: Line 758:
[e]=k,
[e]=k,
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."},
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."},
[j]={{y,15370,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (OldFT->hasExtParameterInfos()) {\n    for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)\n      // A parameter of the overriding method should be annotated with noescape\n      // if the corresponding parameter of the overridden method is annotated.\n      if (OldFT->getExtParameterInfo(I).isNoEscape() && !NewFT->getExtParameterInfo(I).isNoEscape()) {\n        Diag(Old->getParamDecl(I)->getLocation(), diag::note_overridden_marked_noescape);"},{B,113,"/// 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]={{y,17985,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (OldFT->hasExtParameterInfos()) {\n    for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)\n      // A parameter of the overriding method should be annotated with noescape\n      // if the corresponding parameter of the overridden method is annotated.\n      if (OldFT->getExtParameterInfo(I).isNoEscape() && !NewFT->getExtParameterInfo(I).isNoEscape()) {\n        Diag(Old->getParamDecl(I)->getLocation(), diag::note_overridden_marked_noescape);"},{B,119,"/// Issue a warning if the parameter of the overridden method is non-escaping\n/// but the parameter of the overriding method is not.\nstatic bool diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, Sema &S) {\n  if (OldD->hasAttr<NoEscapeAttr>() && !NewD->hasAttr<NoEscapeAttr>()) {\n    S.Diag(OldD->getLocation(), diag::note_overridden_marked_noescape);"}}
},
},
["note_overridden_method"]={
["note_overridden_method"]={
Line 770: Line 770:
[e]=k,
[e]=k,
[i]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[i]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[j]={{u,2270,"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]={{u,2546,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          if (AMK == AMK_Override)\n            Diag(CI.getLoc(), diag::note_overridden_method);"}}
},
},
["note_overridden_virtual_function"]={
["note_overridden_virtual_function"]={
Line 782: Line 782:
[e]=k,
[e]=k,
[i]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t..."},
[i]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t..."},
[j]={{v,16631,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    if (CXXRecord) {\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                Diag(M->first->getLocation(), diag::note_overridden_virtual_function);"},{y,1558,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      } else {\n        if (WrittenVirtual != Method)\n          Diag(WrittenVirtual->getLocation(), diag::note_overridden_virtual_function);"},{y,2816,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) {\n      Diag(OMD->getLocation(), diag::note_overridden_virtual_function);"},{y,2834,"/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member\n/// function overrides a virtual member function marked \'final\', according to\n/// C++11 [class.virtual]p4.\nbool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{y,5887,"/// Report an error regarding overriding, along with any relevant\n/// overridden methods.\n///\n/// \\param DiagID the primary error to report.\n/// \\param MD the overriding method.\nstatic bool ReportOverrides(Sema &S, unsigned DiagID, const CXXMethodDecl *MD, llvm::function_ref<bool(const CXXMethodDecl *)> Report) {\n  for (const CXXMethodDecl *O : MD->overridden_methods()) {\n    if (Report(O)) {\n      S.Diag(O->getLocation(), diag::note_overridden_virtual_function);"},{y,15397,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{y,15429,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The return types aren\'t either both pointers or references to a class type.\n  if (NewClassTy.isNull()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,15448,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if the new class derives from the old class.\n    if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,15458,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if we the conversion from derived to base is valid.\n    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy, diag::err_covariant_return_inaccessible_base, diag::err_covariant_return_ambiguous_derived_to_base_conv, New->getLocation(), New->getReturnTypeSourceRange(), New->getDeclName(), nullptr)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,15466,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The qualifiers of the return types must be the same.\n  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,15473,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The new class type must have the same or less qualifiers as the old type.\n  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{vc,879,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  return CheckExceptionSpecSubset(PDiag(DiagID), PDiag(diag::err_deep_exception_specs_differ), PDiag(diag::note_overridden_virtual_function), PDiag(diag::ext_override_exception_spec), Old->getType()->castAs<FunctionProtoType>(), Old->getLocation(), New->getType()->castAs<FunctionProtoType>(), New->getLocation());"}}
[j]={{v,19002,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    if (CXXRecord) {\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                Diag(M->first->getLocation(), diag::note_overridden_virtual_function);"},{y,1823,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      } else {\n        if (WrittenVirtual != Method)\n          Diag(WrittenVirtual->getLocation(), diag::note_overridden_virtual_function);"},{y,3310,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) {\n      Diag(OMD->getLocation(), diag::note_overridden_virtual_function);"},{y,3334,"/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member\n/// function overrides a virtual member function marked \'final\', according to\n/// C++11 [class.virtual]p4.\nbool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{y,6892,"/// Report an error regarding overriding, along with any relevant\n/// overridden methods.\n///\n/// \\param DiagID the primary error to report.\n/// \\param MD the overriding method.\nstatic bool ReportOverrides(Sema &S, unsigned DiagID, const CXXMethodDecl *MD, llvm::function_ref<bool(const CXXMethodDecl *)> Report) {\n  for (const CXXMethodDecl *O : MD->overridden_methods()) {\n    if (Report(O)) {\n      S.Diag(O->getLocation(), diag::note_overridden_virtual_function);"},{y,18015,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  Diag(Old->getLocation(), diag::note_overridden_virtual_function);"},{y,18052,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The return types aren\'t either both pointers or references to a class type.\n  if (NewClassTy.isNull()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18077,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if the new class derives from the old class.\n    if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18093,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // Check if we the conversion from derived to base is valid.\n    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy, diag::err_covariant_return_inaccessible_base, diag::err_covariant_return_ambiguous_derived_to_base_conv, New->getLocation(), New->getReturnTypeSourceRange(), New->getDeclName(), nullptr)) {\n      Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18105,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The qualifiers of the return types must be the same.\n  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{y,18117,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // The new class type must have the same or less qualifiers as the old type.\n  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {\n    Diag(Old->getLocation(), diag::note_overridden_virtual_function) << Old->getReturnTypeSourceRange();"},{vc,995,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  return CheckExceptionSpecSubset(PDiag(DiagID), PDiag(diag::err_deep_exception_specs_differ), PDiag(diag::note_overridden_virtual_function), PDiag(diag::ext_override_exception_spec), Old->getType()->castAs<FunctionProtoType>(), Old->getLocation(), New->getType()->castAs<FunctionProtoType>(), New->getLocation());"}}
},
},
["note_ovl_ambiguous_eqeq_reversed_self_non_const"]={
["note_ovl_ambiguous_eqeq_reversed_self_non_const"]={
Line 794: Line 794:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{D,11923,"/// 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]={{D,14067,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n            // Mark member== const or provide matching != to disallow reversed\n            // args. Eg.\n            // struct S { bool operator==(const S&); };\n            // S()==S();\n            if (auto *MD = dyn_cast<CXXMethodDecl>(FnDecl))\n              if (Op == OverloadedOperatorKind::OO_EqualEqual && !MD->isConst() && Context.hasSameUnqualifiedType(MD->getThisObjectType(), MD->getParamDecl(0)->getType().getNonReferenceType()) && Context.hasSameUnqualifiedType(MD->getThisObjectType(), Args[0]->getType()) && Context.hasSameUnqualifiedType(MD->getThisObjectType(), Args[1]->getType()))\n                Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_eqeq_reversed_self_non_const);"}}
},
},
["note_ovl_ambiguous_oper_binary_reversed_candidate"]={
["note_ovl_ambiguous_oper_binary_reversed_candidate"]={
Line 806: Line 806:
[e]=k,
[e]=k,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{D,11927,"/// 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]={{D,14073,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n          } else {\n            for (auto *F : AmbiguousWith)\n              Diag(F->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_candidate);"}}
},
},
["note_ovl_ambiguous_oper_binary_reversed_self"]={
["note_ovl_ambiguous_oper_binary_reversed_self"]={
Line 818: Line 818:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{D,11916,"/// 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]={{D,14051,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n            Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_reversed_self);"}}
},
},
["note_ovl_ambiguous_oper_binary_selected_candidate"]={
["note_ovl_ambiguous_oper_binary_selected_candidate"]={
Line 830: Line 830:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{D,11925,"/// 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]={{D,14070,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_Success: {\n    if (FnDecl) {\n      if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n        if (!AmbiguousWith.empty()) {\n          if (AmbiguousWithSelf) {\n          } else {\n            Diag(FnDecl->getLocation(), diag::note_ovl_ambiguous_oper_binary_selected_candidate);"}}
},
},
["note_ovl_builtin_candidate"]={
["note_ovl_builtin_candidate"]={
Line 842: Line 842:
[e]=k,
[e]=k,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{D,9921,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"},{D,9926,"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]={{D,11681,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"},{D,11686,"static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  if (Cand->Conversions.size() == 1) {\n  } else {\n    S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr;"}}
},
},
["note_ovl_candidate"]={
["note_ovl_candidate"]={
Line 854: Line 854:
[e]=k,
[e]=k,
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[j]={{D,9093,"// Notes the location of an overload candidate.\nvoid Sema::NoteOverloadCandidate(const NamedDecl *Found, const FunctionDecl *Fn, OverloadCandidateRewriteKind RewriteKind, QualType DestType, bool TakingAddress) {\n  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate) << (unsigned)KSPair.first << (unsigned)KSPair.second << Fn << FnDesc;"},{D,10700,"// 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]={{D,10669,"// Notes the location of an overload candidate.\nvoid Sema::NoteOverloadCandidate(const NamedDecl *Found, const FunctionDecl *Fn, OverloadCandidateRewriteKind RewriteKind, QualType DestType, bool TakingAddress) {\n  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate) << (unsigned)KSPair.first << (unsigned)KSPair.second << Fn << FnDesc;"},{D,12565,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  void EliminateAllExceptMostSpecializedTemplate() {\n    UnresolvedSetIterator Result = S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, SourceExpr->getBeginLoc(), S.PDiag(), S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0].second->getDeclName(), S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function << (unsigned)ocs_described_template, Complain, TargetFunctionType);"}}
},
},
["note_ovl_candidate_arity"]={
["note_ovl_candidate_arity"]={
Line 866: Line 866:
[e]=k,
[e]=k,
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[j]={{D,9411,"/// 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]={{D,11072,"/// General arity mismatch diagnosis over a candidate in a candidate set.\nstatic void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, unsigned NumFormalArgs) {\n  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n  else\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << Description << mode << modeCount << NumFormalArgs << Fn->getParametersSourceRange();"}}
},
},
["note_ovl_candidate_arity_one"]={
["note_ovl_candidate_arity_one"]={
Line 878: Line 878:
[e]=k,
[e]=k,
[i]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[i]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[j]={{D,9409,"/// 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]={{D,11067,"/// General arity mismatch diagnosis over a candidate in a candidate set.\nstatic void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, unsigned NumFormalArgs) {\n  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << Description << mode << Fn->getParamDecl(0) << NumFormalArgs << Fn->getParametersSourceRange();"}}
},
},
["note_ovl_candidate_bad_addrspace"]={
["note_ovl_candidate_bad_addrspace"]={
Line 890: Line 890:
[e]=k,
[e]=k,
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[j]={{D,9242,"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]={{D,10841,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n      if (isObjectArgument)\n      else\n        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromQs.getAddressSpace() << ToQs.getAddressSpace() << ToTy->isReferenceType() << I + 1;"}}
},
},
["note_ovl_candidate_bad_addrspace_this"]={
["note_ovl_candidate_bad_addrspace_this"]={
Line 902: Line 902:
[e]=k,
[e]=k,
[i]={kc,1575504770,mc},
[i]={kc,1575504770,mc},
[j]={{D,9240,"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]={{D,10837,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {\n      if (isObjectArgument)\n        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace_this) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << FromQs.getAddressSpace() << ToQs.getAddressSpace();"}}
},
},
["note_ovl_candidate_bad_arc_conv"]={
["note_ovl_candidate_bad_arc_conv"]={
Line 914: Line 914:
[e]=k,
[e]=k,
[i]={"a644f9cb73a1",1311182049,"arc-objc++: Issue an arc specific diagnostic when overload resolution"},
[i]={"a644f9cb73a1",1311182049,"arc-objc++: Issue an arc specific diagnostic when overload resolution"},
[j]={{D,9328,"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]={{D,10970,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (isa<ObjCObjectPointerType>(CFromTy) && isa<PointerType>(CToTy)) {\n    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1;"}}
},
},
["note_ovl_candidate_bad_base_to_derived_conv"]={
["note_ovl_candidate_bad_base_to_derived_conv"]={
Line 926: Line 926:
[e]=k,
[e]=k,
[i]={"fb0c0d37b7f2",1277950485,"Extend the \"cannot convert from base class pointer to derived class"},
[i]={"fb0c0d37b7f2",1277950485,"Extend the \"cannot convert from base class pointer to derived class"},
[j]={{D,9319,"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]={{D,10957,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (BaseToDerivedConversion) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_base_to_derived_conv) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << (BaseToDerivedConversion - 1) << FromTy << ToTy << I + 1;"}}
},
},
["note_ovl_candidate_bad_conv"]={
["note_ovl_candidate_bad_conv"]={
Line 938: Line 938:
[e]=k,
[e]=k,
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[i]={"e1ac8d174220",1263342319,"Improve the reporting of non-viable overload candidates by noting the reason"},
[j]={{D,9338,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);"}}
[j]={{D,10984,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);"}}
},
},
["note_ovl_candidate_bad_conv_incomplete"]={
["note_ovl_candidate_bad_conv_incomplete"]={
Line 950: Line 950:
[e]=k,
[e]=k,
[i]={"6d174646dd1a",1264234249,"Produce a special diagnostic when users call a function with an argument of"},
[i]={"6d174646dd1a",1264234249,"Produce a special diagnostic when users call a function with an argument of"},
[j]={{D,9293,"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]={{D,10916,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (TempFromTy->isIncompleteType()) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 << (unsigned)(Cand->Fix.Kind);"}}
},
},
["note_ovl_candidate_bad_cvr"]={
["note_ovl_candidate_bad_cvr"]={
Line 962: Line 962:
[e]=k,
[e]=k,
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[j]={{D,9265,"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]={{D,10875,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (isObjectArgument) {\n    } else {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << (CVR - 1) << I + 1;"}}
},
},
["note_ovl_candidate_bad_cvr_this"]={
["note_ovl_candidate_bad_cvr_this"]={
Line 974: Line 974:
[e]=k,
[e]=k,
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[i]={"47000997193c",1263439737,"Improve overload diagnostics some more by calling out qualifier mismatches"},
[j]={{D,9263,"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]={{D,10871,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (isObjectArgument) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << FromTy << (CVR - 1);"}}
},
},
["note_ovl_candidate_bad_deduction"]={
["note_ovl_candidate_bad_deduction"]={
Line 986: Line 986:
[e]=k,
[e]=k,
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[j]={{D,9640,"/// 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]={{D,11361,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  // TODO: diagnose these individually, then kill off\n  // note_ovl_candidate_bad_deduction, which is uselessly vague.\n  case Sema::TDK_MiscellaneousDeductionFailure:\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);"}}
},
},
["note_ovl_candidate_bad_gc"]={
["note_ovl_candidate_bad_gc"]={
Line 998: Line 998:
[e]=k,
[e]=k,
[i]={"aec25847606f",1303859806,"When computing Objective-C pointer conversions in C++, retain"},
[i]={"aec25847606f",1303859806,"When computing Objective-C pointer conversions in C++, retain"},
[j]={{D,9254,"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]={{D,10859,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr() << (unsigned)isObjectArgument << I + 1;"}}
},
},
["note_ovl_candidate_bad_list_argument"]={
["note_ovl_candidate_bad_list_argument"]={
Line 1,010: Line 1,010:
[e]=k,
[e]=k,
[i]={"a72462cdf43b",1316886512,"Add a special note for overload resolution when an initializer list argument"},
[i]={"a72462cdf43b",1316886512,"Add a special note for overload resolution when an initializer list argument"},
[j]={{D,9280,"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]={{D,10897,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  // Special diagnostic for failure to convert an initializer list, since\n  // telling the user that it has type void is not useful.\n  if (FromExpr && isa<InitListExpr>(FromExpr)) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 << (Conv.Bad.Kind == BadConversionSequence::too_few_initializers ? 1 : Conv.Bad.Kind == BadConversionSequence::too_many_initializers ? 2 : 0);"}}
},
},
["note_ovl_candidate_bad_overload"]={
["note_ovl_candidate_bad_overload"]={
Line 1,022: Line 1,022:
[e]=k,
[e]=k,
[i]={"fb7ad0f57a0c",1265078572,"Improve the diagnostic used when an incompatible overload set is passed"},
[i]={"fb7ad0f57a0c",1265078572,"Improve the diagnostic used when an incompatible overload set is passed"},
[j]={{D,9214,"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]={{D,10808,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (FromTy == S.Context.OverloadTy) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << ToTy << Name << I + 1;"}}
},
},
["note_ovl_candidate_bad_ownership"]={
["note_ovl_candidate_bad_ownership"]={
Line 1,034: Line 1,034:
[e]=k,
[e]=k,
[i]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[i]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[j]={{D,9248,"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]={{D,10850,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {\n    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << ToParamRange << FromTy << FromQs.getObjCLifetime() << ToQs.getObjCLifetime() << (unsigned)isObjectArgument << I + 1;"}}
},
},
["note_ovl_candidate_bad_target"]={
["note_ovl_candidate_bad_target"]={
Line 1,046: Line 1,046:
[e]=k,
[e]=k,
[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[j]={{D,9670,"/// 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]={{D,11397,"/// CUDA: diagnose an invalid call across targets.\nstatic void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */"}}
},
},
["note_ovl_candidate_bad_value_category"]={
["note_ovl_candidate_bad_value_category"]={
Line 1,058: Line 1,058:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{D,9272,"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]={{D,10885,"static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I, bool TakingCandidateAddress) {\n  if (Conv.Bad.Kind == BadConversionSequence::lvalue_ref_to_rvalue || Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_value_category) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << (unsigned)isObjectArgument << I + 1 << (Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) << ToParamRange;"}}
},
},
["note_ovl_candidate_constraints_not_satisfied"]={
["note_ovl_candidate_constraints_not_satisfied"]={
Line 1,070: Line 1,070:
[e]=k,
[e]=k,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{D,9862,"/// 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]={{D,11615,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_constraints_not_satisfied: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_constraints_not_satisfied) << (unsigned)FnKindPair.first << (unsigned)ocs_non_template << FnDesc /* Ignored */;"}}
},
},
["note_ovl_candidate_deduced_mismatch"]={
["note_ovl_candidate_deduced_mismatch"]={
Line 1,082: Line 1,082:
[e]=k,
[e]=k,
[i]={"9b534547250a",1451527374,"Improve diagnostic for the case where a function template candidate is rejected"},
[i]={"9b534547250a",1451527374,"Improve diagnostic for the case where a function template candidate is rejected"},
[j]={{D,9602,"/// 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]={{D,11311,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_DeducedMismatchNested: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_deduced_mismatch) << (*DeductionFailure.getCallArgIndex() + 1) << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg() << TemplateArgString << (DeductionFailure.Result == Sema::TDK_DeducedMismatchNested);"}}
},
},
["note_ovl_candidate_deleted"]={
["note_ovl_candidate_deleted"]={
Line 1,094: Line 1,094:
[e]=k,
[e]=k,
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[j]={{D,9782,"/// 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]={{D,11523,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  // Note deleted candidates, but only if they\'re viable.\n  if (Cand->Viable) {\n    if (Fn->isDeleted()) {\n      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted) << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);"}}
},
},
["note_ovl_candidate_disabled_by_enable_if"]={
["note_ovl_candidate_disabled_by_enable_if"]={
Line 1,106: Line 1,106:
[e]=k,
[e]=k,
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:"},
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:"},
[j]={{D,9565,"/// 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]={{D,11266,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_enable_if) {\n      S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if) << \"\'enable_if\'\" << TemplateArgString;"}}
},
},
["note_ovl_candidate_disabled_by_function_cond_attr"]={
["note_ovl_candidate_disabled_by_function_cond_attr"]={
Line 1,118: Line 1,118:
[e]=k,
[e]=k,
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[j]={{C,5963,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{D,9717,"static void DiagnoseFailedEnableIfAttr(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{D,12584,"/// 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]={{C,7023,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{D,11448,"static void DiagnoseFailedEnableIfAttr(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"},{D,14906,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // In the case the method to call was not selected by the overloading\n  // resolution process, we still need to handle the enable_if attribute. Do\n  // that here, so it will not hide previous -- and more relevant -- errors.\n  if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) {\n    if (const EnableIfAttr *Attr = CheckEnableIf(Method, LParenLoc, Args, true)) {\n      Diag(Method->getLocation(), diag::note_ovl_candidate_disabled_by_function_cond_attr) << Attr->getCond()->getSourceRange() << Attr->getMessage();"}}
},
},
["note_ovl_candidate_disabled_by_requirement"]={
["note_ovl_candidate_disabled_by_requirement"]={
Line 1,130: Line 1,130:
[e]=k,
[e]=k,
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition."},
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition."},
[j]={{D,9571,"/// 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]={{D,11275,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    // We found a specific requirement that disabled the enable_if.\n    if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_requirement) {\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_disabled_by_requirement) << PDiag->second.getStringArg(0) << TemplateArgString;"}}
},
},
["note_ovl_candidate_explicit"]={
["note_ovl_candidate_explicit"]={
Line 1,142: Line 1,142:
[e]=k,
[e]=k,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{D,9747,"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]={{D,11480,"static void DiagnoseFailedExplicitSpec(Sema &S, OverloadCandidate *Cand) {\n  S.Diag(First->getLocation(), diag::note_ovl_candidate_explicit) << Kind << (ES.getExpr() ? 1 : 0) << (ES.getExpr() ? ES.getExpr()->getSourceRange() : SourceRange());"}}
},
},
["note_ovl_candidate_explicit_arg_mismatch_named"]={
["note_ovl_candidate_explicit_arg_mismatch_named"]={
Line 1,154: Line 1,154:
[e]=k,
[e]=k,
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[j]={{D,9513,"/// 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]={{D,11202,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InvalidExplicitArguments:\n    if (ParamD->getDeclName())\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_named) << ParamD->getDeclName();"}}
},
},
["note_ovl_candidate_explicit_arg_mismatch_unnamed"]={
["note_ovl_candidate_explicit_arg_mismatch_unnamed"]={
Line 1,166: Line 1,166:
[e]=k,
[e]=k,
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[i]={"1d72edd7c55a",1273346154,"Improve overload-candidate diagnostic for a function template that"},
[j]={{D,9522,"/// 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]={{D,11214,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InvalidExplicitArguments:\n    if (ParamD->getDeclName())\n    else {\n      S.Diag(Templated->getLocation(), diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) << (index + 1);"}}
},
},
["note_ovl_candidate_has_pass_object_size_params"]={
["note_ovl_candidate_has_pass_object_size_params"]={
Line 1,178: Line 1,178:
[e]=k,
[e]=k,
[i]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[i]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[j]={{D,9043,"/// 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]={{D,10606,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (Complain) {\n    if (InOverloadResolution)\n      S.Diag(FD->getLocation(), diag::note_ovl_candidate_has_pass_object_size_params) << ParamNo;"}}
},
},
["note_ovl_candidate_illegal_constructor"]={
["note_ovl_candidate_illegal_constructor"]={
Line 1,190: Line 1,190:
[e]=k,
[e]=k,
[i]={"578a1f8c6d27",1418521613,"If a non-template constructor instantiated to X(X),"},
[i]={"578a1f8c6d27",1418521613,"If a non-template constructor instantiated to X(X),"},
[j]={{D,9801,"/// 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]={{D,11545,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_illegal_constructor: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor) << (Fn->getPrimaryTemplate() ? 1 : 0);"}}
},
},
["note_ovl_candidate_illegal_constructor_adrspace_mismatch"]={
["note_ovl_candidate_illegal_constructor_adrspace_mismatch"]={
Line 1,202: Line 1,202:
[e]=k,
[e]=k,
[i]={"c25ea86d4392",1561047808,"[Sema] Diagnose addr space mismatch while constructing objects"},
[i]={"c25ea86d4392",1561047808,"[Sema] Diagnose addr space mismatch while constructing objects"},
[j]={{D,9809,"/// 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]={{D,11555,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_object_addrspace_mismatch: {\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor_adrspace_mismatch) << QualsForPrinting;"}}
},
},
["note_ovl_candidate_incomplete_deduction"]={
["note_ovl_candidate_incomplete_deduction"]={
Line 1,214: Line 1,214:
[e]=k,
[e]=k,
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[i]={"8b9ed55bfbea",1265050406,"Note that an overload candidate was non-viable because template argument"},
[j]={{D,9440,"/// 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]={{D,11111,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Incomplete: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction) << ParamD->getDeclName();"}}
},
},
["note_ovl_candidate_incomplete_deduction_pack"]={
["note_ovl_candidate_incomplete_deduction_pack"]={
Line 1,226: Line 1,226:
[e]=k,
[e]=k,
[i]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value"},
[i]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value"},
[j]={{D,9447,"/// 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]={{D,11120,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_IncompletePack: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_incomplete_deduction_pack) << ParamD->getDeclName() << (DeductionFailure.getFirstArg()->pack_size() + 1) << *DeductionFailure.getFirstArg();"}}
},
},
["note_ovl_candidate_inconsistent_deduction"]={
["note_ovl_candidate_inconsistent_deduction"]={
Line 1,238: Line 1,238:
[e]=k,
[e]=k,
[i]={"3626a5cac2ed",1273340492,"When printing a non-viable overload candidate that failed due to"},
[i]={"3626a5cac2ed",1273340492,"When printing a non-viable overload candidate that failed due to"},
[j]={{D,9505,"/// 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]={{D,11191,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Inconsistent: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction) << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg();"}}
},
},
["note_ovl_candidate_inconsistent_deduction_types"]={
["note_ovl_candidate_inconsistent_deduction_types"]={
Line 1,250: Line 1,250:
[e]=k,
[e]=k,
[i]={"593d6a168f45",1482456639,"When merging two deduced non-type template arguments for the same parameter,"},
[i]={"593d6a168f45",1482456639,"When merging two deduced non-type template arguments for the same parameter,"},
[j]={{D,9488,"/// 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]={{D,11168,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Inconsistent: {\n    if (isa<TemplateTypeParmDecl>(ParamD))\n    else if (isa<NonTypeTemplateParmDecl>(ParamD)) {\n      if (!T1.isNull() && !T2.isNull() && !S.Context.hasSameType(T1, T2)) {\n        S.Diag(Templated->getLocation(), diag::note_ovl_candidate_inconsistent_deduction_types) << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << T1 << *DeductionFailure.getSecondArg() << T2;"}}
},
},
["note_ovl_candidate_inherited_constructor"]={
["note_ovl_candidate_inherited_constructor"]={
Line 1,262: Line 1,262:
[e]=k,
[e]=k,
[i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works..."},
[i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works..."},
[j]={{D,8979,"void MaybeEmitInheritedConstructorNote(Sema &S, const Decl *FoundDecl) {\n  // FIXME: It\'d be nice to only emit a note once per using-decl per overload\n  // set.\n  if (const auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl))\n    S.Diag(FoundDecl->getLocation(), diag::note_ovl_candidate_inherited_constructor) << Shadow->getNominatedBaseClass();"}}
[j]={{D,10527,"void MaybeEmitInheritedConstructorNote(Sema &S, const Decl *FoundDecl) {\n  // FIXME: It\'d be nice to only emit a note once per using-decl per overload\n  // set.\n  if (const auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl))\n    S.Diag(FoundDecl->getLocation(), diag::note_ovl_candidate_inherited_constructor) << Shadow->getNominatedBaseClass();"}}
},
},
["note_ovl_candidate_inherited_constructor_slice"]={
["note_ovl_candidate_inherited_constructor_slice"]={
Line 1,274: Line 1,274:
[e]=k,
[e]=k,
[i]={"f9c59b71220c",1483911944,"PR30305: Implement proposed DR resolution to prevent slicing via inherited constructor."},
[i]={"f9c59b71220c",1483911944,"PR30305: Implement proposed DR resolution to prevent slicing via inherited constructor."},
[j]={{D,9844,"/// 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]={{D,11592,"/// Generates a \'note\' diagnostic for an overload candidate.  We\'ve\n/// already generated a primary error at the call site.\n///\n/// It really does need to be a single diagnostic with its caret\n/// pointed at the candidate declaration.  Yes, this creates some\n/// major challenges of technical writing.  Yes, this makes pointing\n/// out problems with specific arguments quite awkward.  It\'s still\n/// better than generating twenty screens of text for every failed\n/// overload.\n///\n/// It would be great to be able to express per-candidate problems\n/// more richly for those diagnostic clients that cared, but we\'d\n/// still have to be just as careful with the default diagnostics.\n/// \\param CtorDestAS Addr space of object being constructed (for ctor\n/// candidates only).\nstatic void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, unsigned NumArgs, bool TakingCandidateAddress, LangAS CtorDestAS = LangAS::Default) {\n  case ovl_fail_inhctor_slice:\n    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inherited_constructor_slice) << (Fn->getPrimaryTemplate() ? 1 : 0) << Fn->getParamDecl(0)->getType()->isRValueReferenceType();"}}
},
},
["note_ovl_candidate_instantiation_depth"]={
["note_ovl_candidate_instantiation_depth"]={
Line 1,286: Line 1,286:
[e]=k,
[e]=k,
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[j]={{D,9546,"/// 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]={{D,11244,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_InstantiationDepth:\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_instantiation_depth);"}}
},
},
["note_ovl_candidate_non_deduced_mismatch"]={
["note_ovl_candidate_non_deduced_mismatch"]={
Line 1,298: Line 1,298:
[e]=k,
[e]=k,
[i]={"44ecdbdc6134",1359609589,"Improve \'failed template argument deduction\' diagnostic for the case where we"},
[i]={"44ecdbdc6134",1359609589,"Improve \'failed template argument deduction\' diagnostic for the case where we"},
[j]={{D,9634,"/// 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]={{D,11354,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_NonDeducedMismatch: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch) << FirstTA << SecondTA;"}}
},
},
["note_ovl_candidate_non_deduced_mismatch_qualified"]={
["note_ovl_candidate_non_deduced_mismatch_qualified"]={
Line 1,310: Line 1,310:
[e]=k,
[e]=k,
[i]={"e373235c7cf8",1365455500,"Fix PR15634, better error message for template deduction failure."},
[i]={"e373235c7cf8",1365455500,"Fix PR15634, better error message for template deduction failure."},
[j]={{D,9621,"/// 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]={{D,11338,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_NonDeducedMismatch: {\n    if (FirstTA.getKind() == TemplateArgument::Template && SecondTA.getKind() == TemplateArgument::Template) {\n      if (FirstTN.getKind() == TemplateName::Template && SecondTN.getKind() == TemplateName::Template) {\n        if (FirstTN.getAsTemplateDecl()->getName() == SecondTN.getAsTemplateDecl()->getName()) {\n          S.Diag(Templated->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch_qualified) << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();"}}
},
},
["note_ovl_candidate_substitution_failure"]={
["note_ovl_candidate_substitution_failure"]={
Line 1,322: Line 1,322:
[e]=k,
[e]=k,
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[i]={"d09efd43d3f8",1273349246,"When printing an overload candidate that failed due to SFINAE, print a"},
[j]={{D,9586,"/// 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]={{D,11292,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_SubstitutionFailure: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_substitution_failure) << TemplateArgString << SFINAEArgString << R;"}}
},
},
["note_ovl_candidate_underqualified"]={
["note_ovl_candidate_underqualified"]={
Line 1,334: Line 1,334:
[e]=k,
[e]=k,
[i]={"42d7d19710d0",1280999108,"TDK_InconsistentQuals is really totally different from TDK_Inconsistent."},
[i]={"42d7d19710d0",1280999108,"TDK_InconsistentQuals is really totally different from TDK_Inconsistent."},
[j]={{D,9471,"/// 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]={{D,11147,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_Underqualified: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified) << ParamD->getDeclName() << Arg << NonCanonParam;"}}
},
},
["note_ovl_candidate_unsatisfied_constraints"]={
["note_ovl_candidate_unsatisfied_constraints"]={
Line 1,346: Line 1,346:
[e]=k,
[e]=k,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{D,9026,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (FD->getTrailingRequiresClause()) {\n    if (!Satisfaction.IsSatisfied) {\n      if (Complain) {\n        if (InOverloadResolution) {\n          S.Diag(FD->getBeginLoc(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"},{D,9535,"/// 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]={{D,10584,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (FD->getTrailingRequiresClause()) {\n    if (!Satisfaction.IsSatisfied) {\n      if (Complain) {\n        if (InOverloadResolution) {\n          S.Diag(FD->getBeginLoc(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"},{D,11230,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_ConstraintsNotSatisfied: {\n    S.Diag(Templated->getLocation(), diag::note_ovl_candidate_unsatisfied_constraints) << TemplateArgString;"}}
},
},
["note_ovl_surrogate_cand"]={
["note_ovl_surrogate_cand"]={
Line 1,358: Line 1,358:
[e]=k,
[e]=k,
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[i]={"fd0b2f8fe486",1262770994,"Improve the diagnostics used to report implicitly-generated class members"},
[j]={{D,9909,"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]={{D,11666,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n  if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n  } else {\n    S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) << FnType;"}}
},
},
["note_ovl_surrogate_constraints_not_satisfied"]={
["note_ovl_surrogate_constraints_not_satisfied"]={
Line 1,370: Line 1,370:
[e]=k,
[e]=k,
[i]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas."},
[i]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas."},
[j]={{D,9904,"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]={{D,11660,"static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {\n  if (!Cand->Viable && Cand->FailureKind == ovl_fail_constraints_not_satisfied) {\n    S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_constraints_not_satisfied) << Cand->Surrogate;"}}
},
},
["note_ovl_too_many_candidates"]={
["note_ovl_too_many_candidates"]={
Line 1,382: Line 1,382:
[e]=k,
[e]=k,
[i]={"2b99c6fc4f3e",1276235867,"Add an option -fshow-overloads=best|all to limit the number of overload"},
[i]={"2b99c6fc4f3e",1276235867,"Add an option -fshow-overloads=best|all to limit the number of overload"},
[j]={{yc,2302,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  if (SuppressedOverloads)\n    S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) << SuppressedOverloads;"},{D,9179,"/// Diagnoses an ambiguous conversion.  The partial diagnostic is the\n/// \"lead\" diagnostic; it will be given two arguments, the source and\n/// target types of the conversion.\nvoid ImplicitConversionSequence::DiagnoseAmbiguousConversion(Sema &S, SourceLocation CaretLoc, const PartialDiagnostic &PDiag) const {\n  if (I != E)\n    S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);"},{D,10325,"void OverloadCandidateSet::NoteCandidates(Sema &S, ArrayRef<Expr *> Args, ArrayRef<OverloadCandidate *> Cands, StringRef Opc, SourceLocation OpLoc) {\n  if (I != E)\n    S.Diag(OpLoc, diag::note_ovl_too_many_candidates, shouldDeferDiags(S, Args, OpLoc)) << int(E - I);"},{D,10421,"/// NoteCandidates - When no template specialization match is found, prints\n/// diagnostic messages containing the non-matching specializations that form\n/// the candidate set.\n/// This is analoguous to OverloadCandidateSet::NoteCandidates() with\n/// OCD == OCD_AllCandidates and Cand->Viable == false.\nvoid TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {\n  if (I != E)\n    S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);"}}
[j]={{yc,2589,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  if (SuppressedOverloads)\n    S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) << SuppressedOverloads;"},{D,10769,"/// Diagnoses an ambiguous conversion.  The partial diagnostic is the\n/// \"lead\" diagnostic; it will be given two arguments, the source and\n/// target types of the conversion.\nvoid ImplicitConversionSequence::DiagnoseAmbiguousConversion(Sema &S, SourceLocation CaretLoc, const PartialDiagnostic &PDiag) const {\n  if (I != E)\n    S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);"},{D,12124,"void OverloadCandidateSet::NoteCandidates(Sema &S, ArrayRef<Expr *> Args, ArrayRef<OverloadCandidate *> Cands, StringRef Opc, SourceLocation OpLoc) {\n  if (I != E)\n    S.Diag(OpLoc, diag::note_ovl_too_many_candidates, shouldDeferDiags(S, Args, OpLoc)) << int(E - I);"},{D,12230,"/// NoteCandidates - When no template specialization match is found, prints\n/// diagnostic messages containing the non-matching specializations that form\n/// the candidate set.\n/// This is analoguous to OverloadCandidateSet::NoteCandidates() with\n/// OCD == OCD_AllCandidates and Cand->Viable == false.\nvoid TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {\n  if (I != E)\n    S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);"}}
},
},
["note_ownership_returns_index_mismatch"]={
["note_ownership_returns_index_mismatch"]={
Line 1,394: Line 1,394:
[e]=k,
[e]=k,
[i]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar..."},
[i]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar..."},
[j]={{u,1690,"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]={{u,1898,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n      } else if (K == OwnershipAttr::Returns && I->getOwnKind() == OwnershipAttr::Returns) {\n        // A returns attribute conflicts with any other returns attribute using\n        // a different index.\n        if (!llvm::is_contained(I->args(), Idx)) {\n          if (I->args_size())\n            S.Diag(AL.getLoc(), diag::note_ownership_returns_index_mismatch) << Idx.getSourceIndex() << Ex->getSourceRange();"}}
},
},
["note_parameter_here"]={
["note_parameter_here"]={
Line 1,406: Line 1,406:
[e]=k,
[e]=k,
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[j]={{U,5929,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n    else\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here);"}}
[j]={{U,6965,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n    else\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_here);"}}
},
},
["note_parameter_mapping_substitution_here"]={
["note_parameter_mapping_substitution_here"]={
Line 1,418: Line 1,418:
[e]=k,
[e]=k,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{gb,730,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ParameterMappingSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_parameter_mapping_substitution_here) << Active->InstantiationRange;"}}
[j]={{gb,1065,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ParameterMappingSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_parameter_mapping_substitution_here) << Active->InstantiationRange;"}}
},
},
["note_parameter_named_here"]={
["note_parameter_named_here"]={
Line 1,430: Line 1,430:
[e]=k,
[e]=k,
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[i]={"4f4946aaaa19",1271895618,"Whenever we complain about a failed initialization of a function or"},
[j]={{U,5927,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) << Entity.getDecl()->getDeclName();"}}
[j]={{U,6962,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n    if (Entity.getDecl()->getDeclName())\n      S.Diag(Entity.getDecl()->getLocation(), diag::note_parameter_named_here) << Entity.getDecl()->getDeclName();"}}
},
},
["note_parameter_pack_here"]={
["note_parameter_pack_here"]={
Line 1,442: Line 1,442:
[e]=k,
[e]=k,
[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",916,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1032,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}
},
},
["note_parameter_type"]={
["note_parameter_type"]={
Line 1,454: Line 1,454:
[e]=k,
[e]=k,
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[j]={{F,7683,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity.  Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!SecondArgIsLastNamedArgument)\n  else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n    Diag(ParamLoc, diag::note_parameter_type) << Type;"},{Db,1016,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  if (AtIndexGetter) {\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(AtIndexGetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Db,1095,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(AtIndexSetter->parameters()[1]->getLocation(), diag::note_parameter_type) << T;"},{Db,1101,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(AtIndexSetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Db,1112,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      if (!T->isObjCObjectPointerType()) {\n        S.Diag(AtIndexSetter->parameters()[i]->getLocation(), diag::note_parameter_type) << T;"}}
[j]={{F,8172,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity.  Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!SecondArgIsLastNamedArgument)\n  else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n    Diag(ParamLoc, diag::note_parameter_type) << Type;"},{Db,1232,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  if (AtIndexGetter) {\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(AtIndexGetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Db,1348,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(AtIndexSetter->parameters()[1]->getLocation(), diag::note_parameter_type) << T;"},{Db,1356,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(AtIndexSetter->parameters()[0]->getLocation(), diag::note_parameter_type) << T;"},{Db,1371,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  if (AtIndexSetter && arrayRef) {\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      if (!T->isObjCObjectPointerType()) {\n        S.Diag(AtIndexSetter->parameters()[i]->getLocation(), diag::note_parameter_type) << T;"}}
},
},
["note_partial_availability_specified_here"]={
["note_partial_availability_specified_here"]={
Line 1,466: Line 1,466:
[e]=k,
[e]=k,
[i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note"},
[i]={"0535b0f38731",1547493451,"Improve a -Wunguarded-availability note"},
[j]={{Kb,348,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    S.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << S.Context.getTargetInfo().getPlatformMinVersion().getAsString();"},{Kb,665,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    SemaRef.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << SemaRef.Context.getTargetInfo().getPlatformMinVersion().getAsString();"}}
[j]={{Kb,396,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    S.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << S.Context.getTargetInfo().getPlatformMinVersion().getAsString();"},{Kb,781,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    SemaRef.Diag(OffendingDecl->getLocation(), diag::note_partial_availability_specified_here) << OffendingDecl << PlatformName << Introduced.getAsString() << SemaRef.Context.getTargetInfo().getPlatformMinVersion().getAsString();"}}
},
},
["note_partial_spec_match"]={
["note_partial_spec_match"]={
Line 1,478: Line 1,478:
[e]=k,
[e]=k,
[i]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations "},
[i]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations "},
[j]={{x,4053,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  if (AmbiguousPartialSpec) {\n    // Print the matching partial specializations.\n    for (MatchResult P : Matched)\n      Diag(P.Partial->getLocation(), diag::note_partial_spec_match) << getTemplateArgumentBindingsText(P.Partial->getTemplateParameters(), *P.Args);"},{gb,2851,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    if (Matched.size() >= 1) {\n      if (Matched.size() == 1) {\n      } else {\n        if (Ambiguous) {\n          // Print the matching partial specializations.\n          for (SmallVectorImpl<MatchResult>::iterator P = Matched.begin(), PEnd = Matched.end(); P != PEnd; ++P)\n            S.Diag(P->Partial->getLocation(), diag::note_partial_spec_match) << S.getTemplateArgumentBindingsText(P->Partial->getTemplateParameters(), *P->Args);"}}
[j]={{x,4857,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  if (AmbiguousPartialSpec) {\n    // Print the matching partial specializations.\n    for (MatchResult P : Matched)\n      Diag(P.Partial->getLocation(), diag::note_partial_spec_match) << getTemplateArgumentBindingsText(P.Partial->getTemplateParameters(), *P.Args);"},{gb,3698,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    if (Matched.size() >= 1) {\n      if (Matched.size() == 1) {\n      } else {\n        if (Ambiguous) {\n          // Print the matching partial specializations.\n          for (SmallVectorImpl<MatchResult>::iterator P = Matched.begin(), PEnd = Matched.end(); P != PEnd; ++P)\n            S.Diag(P->Partial->getLocation(), diag::note_partial_spec_match) << S.getTemplateArgumentBindingsText(P->Partial->getTemplateParameters(), *P->Args);"}}
},
},
["note_pch_rebuild_required"]={
["note_pch_rebuild_required"]={
Line 1,490: Line 1,490:
[e]="AST Deserialization Issue",
[e]="AST Deserialization Issue",
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[j]={{Qb,2222,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;"}}
[j]={{Qb,2519,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;"}}
},
},
["note_pch_required_by"]={
["note_pch_required_by"]={
Line 1,502: Line 1,502:
[e]="AST Deserialization Issue",
[e]="AST Deserialization Issue",
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[i]={"e82630d5d55d",1389917949,"Improve the error message when a PCH dependency is modified"},
[j]={{Qb,2217,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        Diag(diag::note_pch_required_by) << Filename << ImportStack[0]->FileName;"},{Qb,2219,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        for (unsigned I = 1; I < ImportStack.size(); ++I)\n          Diag(diag::note_pch_required_by) << ImportStack[I - 1]->FileName << ImportStack[I]->FileName;"}}
[j]={{Qb,2512,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        Diag(diag::note_pch_required_by) << Filename << ImportStack[0]->FileName;"},{Qb,2515,"InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {\n  // For an overridden file, there is nothing to validate.\n  if (!Overridden && FileChange.Kind != Change::None) {\n    if (Complain && !Diags.isDiagnosticInFlight()) {\n      // Print the import stack.\n      if (ImportStack.size() > 1) {\n        for (unsigned I = 1; I < ImportStack.size(); ++I)\n          Diag(diag::note_pch_required_by) << ImportStack[I - 1]->FileName << ImportStack[I]->FileName;"}}
},
},
["note_performs_forbidden_arc_conversion"]={
["note_performs_forbidden_arc_conversion"]={
Line 1,514: Line 1,514:
[e]="ARC Restrictions",
[e]="ARC Restrictions",
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics"},
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics"},
[j]={{Kb,415,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCForbiddenConversion:\n          diag_available_here = diag::note_performs_forbidden_arc_conversion;"}}
[j]={{Kb,482,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCForbiddenConversion:\n          diag_available_here = diag::note_performs_forbidden_arc_conversion;"}}
},
},
["note_pointer_declared_here"]={
["note_pointer_declared_here"]={
Line 1,526: Line 1,526:
[e]=k,
[e]=k,
[i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div"},
[i]={"b4806822d2d5",1566123009,"[Diagnostics] Improve -Wsizeof-pointer-div"},
[j]={{C,9783,"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]={{C,11325,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) {\n      if (const ValueDecl *LHSArgDecl = DRE->getDecl())\n        S.Diag(LHSArgDecl->getLocation(), diag::note_pointer_declared_here) << LHSArgDecl;"}}
},
},
["note_possibility"]={
["note_possibility"]={
Line 1,538: Line 1,538:
[e]=l,
[e]=l,
[i]={Ec,1308178962,sc},
[i]={Ec,1308178962,sc},
[j]={{B,2979,"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]={{B,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}}
},
},
["note_possible_target_of_call"]={
["note_possible_target_of_call"]={
Line 1,550: Line 1,550:
[e]=k,
[e]=k,
[i]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion"},
[i]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion"},
[j]={{yc,2295,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  for (UnresolvedSetImpl::iterator It = Overloads.begin(), DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {\n    S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);"}}
[j]={{yc,2582,"/// Give notes for a set of overloads.\n///\n/// A companion to tryExprAsCall. In cases when the name that the programmer\n/// wrote was an overloaded function, we may be able to make some guesses about\n/// plausible overloads based on their return types; such guesses can be handed\n/// off to this method to be emitted as notes.\n///\n/// \\param Overloads - The overloads to note.\n/// \\param FinalNoteLoc - If we\'ve suppressed printing some overloads due to\n///  -fshow-overloads=best, this is the location to attach to the note about too\n///  many candidates. Typically this will be the location of the original\n///  ill-formed expression.\nstatic void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc) {\n  for (UnresolvedSetImpl::iterator It = Overloads.begin(), DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {\n    S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);"}}
},
},
["note_pp_ambiguous_macro_chosen"]={
["note_pp_ambiguous_macro_chosen"]={
Line 1,562: Line 1,562:
[e]=G,
[e]=G,
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[j]={{wc,534,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    Diag(MI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_chosen) << Identifier.getIdentifierInfo();"}}
[j]={{wc,561,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    Diag(MI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_chosen) << Identifier.getIdentifierInfo();"}}
},
},
["note_pp_ambiguous_macro_other"]={
["note_pp_ambiguous_macro_other"]={
Line 1,574: Line 1,574:
[e]=G,
[e]=G,
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"},
[j]={{wc,537,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    M.forAllDefinitions([&](const MacroInfo *OtherMI) {\n      if (OtherMI != MI)\n        Diag(OtherMI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_other) << Identifier.getIdentifierInfo();"}}
[j]={{wc,565,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If the macro definition is ambiguous, complain.\n  if (M.isAmbiguous()) {\n    M.forAllDefinitions([&](const MacroInfo *OtherMI) {\n      if (OtherMI != MI)\n        Diag(OtherMI->getDefinitionLoc(), diag::note_pp_ambiguous_macro_other) << Identifier.getIdentifierInfo();"}}
},
},
["note_pp_framework_without_header"]={
["note_pp_framework_without_header"]={
Line 1,586: Line 1,586:
[e]=G,
[e]=G,
[i]={"421380a10816",1549406095,"[Preprocessor] Add a note with framework location for \"file not found\" error."},
[i]={"421380a10816",1549406095,"[Preprocessor] Add a note with framework location for \"file not found\" error."},
[j]={{S,1914,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  if (IsFrameworkFound) {\n    Diag(FilenameTok, diag::note_pp_framework_without_header) << OriginalFilename.substr(SlashPos + 1) << FrameworkName << CacheEntry.Directory->getName();"}}
[j]={{S,2101,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  if (IsFrameworkFound) {\n    Diag(FilenameTok, diag::note_pp_framework_without_header) << OriginalFilename.substr(SlashPos + 1) << FrameworkName << CacheEntry.Directory->getName();"}}
},
},
["note_pp_macro_annotation"]={
["note_pp_macro_annotation"]={
Line 1,598: Line 1,598:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{"clang/lib/Lex/Preprocessor.cpp",1345,"void Preprocessor::emitMacroDeprecationWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 0;"},{"clang/lib/Lex/Preprocessor.cpp",1356,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 1;"},{"clang/lib/Lex/Preprocessor.cpp",1364,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n  Diag(*A.FinalAnnotationLoc, diag::note_pp_macro_annotation) << 2;"}}
[j]={{"clang/lib/Lex/Preprocessor.cpp",1460,"void Preprocessor::emitMacroDeprecationWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 0;"},{"clang/lib/Lex/Preprocessor.cpp",1475,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n  Diag(Info.Location, diag::note_pp_macro_annotation) << 1;"},{"clang/lib/Lex/Preprocessor.cpp",1487,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n  Diag(*A.FinalAnnotationLoc, diag::note_pp_macro_annotation) << 2;"}}
},
},
["note_pp_module_begin_here"]={
["note_pp_module_begin_here"]={
Line 1,610: Line 1,610:
[e]=G,
[e]=G,
[i]={"51d09c512b95",1496121779,"Diagnose attempts to build a preprocessed module that defines an unavailable submodule."},
[i]={"51d09c512b95",1496121779,"Diagnose attempts to build a preprocessed module that defines an unavailable submodule."},
[j]={{Hb,1647,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // If the module isn\'t available, it doesn\'t make sense to enter it.\n    if (Preprocessor::checkModuleIsAvailable(PP.getLangOpts(), PP.getTargetInfo(), PP.getDiagnostics(), M)) {\n      PP.Diag(BeginLoc, diag::note_pp_module_begin_here) << M->getTopLevelModuleName();"}}
[j]={{Hb,1774,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // If the module isn\'t available, it doesn\'t make sense to enter it.\n    if (Preprocessor::checkModuleIsAvailable(PP.getLangOpts(), PP.getTargetInfo(), PP.getDiagnostics(), M)) {\n      PP.Diag(BeginLoc, diag::note_pp_module_begin_here) << M->getTopLevelModuleName();"}}
},
},
["note_pragma_attribute_applied_decl_here"]={
["note_pragma_attribute_applied_decl_here"]={
Line 1,622: Line 1,622:
[e]=k,
[e]=k,
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[j]={{sb,949,"void Sema::PrintPragmaAttributeInstantiationPoint() {\n  Diags.Report(PragmaAttributeCurrentTargetDecl->getBeginLoc(), diag::note_pragma_attribute_applied_decl_here);"}}
[j]={{sb,1137,"void Sema::PrintPragmaAttributeInstantiationPoint() {\n  Diags.Report(PragmaAttributeCurrentTargetDecl->getBeginLoc(), diag::note_pragma_attribute_applied_decl_here);"}}
},
},
["note_pragma_attribute_namespace_on_attribute"]={
["note_pragma_attribute_namespace_on_attribute"]={
Line 1,634: Line 1,634:
[e]=Q,
[e]=Q,
[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[j]={{"clang/lib/Parse/ParsePragma.cpp",3375,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::note_pragma_attribute_namespace_on_attribute);"}}
[j]={{"clang/lib/Parse/ParsePragma.cpp",3886,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::note_pragma_attribute_namespace_on_attribute);"}}
},
},
["note_pragma_attribute_region_ends_here"]={
["note_pragma_attribute_region_ends_here"]={
Line 1,646: Line 1,646:
[e]=k,
[e]=k,
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[j]={{sb,904,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // Dig back through the stack trying to find the most recently pushed group\n  // that in Namespace. Note that this works fine if no namespace is present,\n  // think of push/pops without namespaces as having an implicit \"nullptr\"\n  // namespace.\n  for (size_t Index = PragmaAttributeStack.size(); Index;) {\n    if (PragmaAttributeStack[Index].Namespace == Namespace) {\n      for (const PragmaAttributeEntry &Entry : PragmaAttributeStack[Index].Entries) {\n        if (!Entry.IsUsed) {\n          Diag(PragmaLoc, diag::note_pragma_attribute_region_ends_here);"}}
[j]={{sb,1092,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // Dig back through the stack trying to find the most recently pushed group\n  // that in Namespace. Note that this works fine if no namespace is present,\n  // think of push/pops without namespaces as having an implicit \"nullptr\"\n  // namespace.\n  for (size_t Index = PragmaAttributeStack.size(); Index;) {\n    if (PragmaAttributeStack[Index].Namespace == Namespace) {\n      for (const PragmaAttributeEntry &Entry : PragmaAttributeStack[Index].Entries) {\n        if (!Entry.IsUsed) {\n          Diag(PragmaLoc, diag::note_pragma_attribute_region_ends_here);"}}
},
},
["note_pragma_attribute_use_attribute_kw"]={
["note_pragma_attribute_use_attribute_kw"]={
Line 1,658: Line 1,658:
[e]=Q,
[e]=Q,
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"},
[j]={{"clang/lib/Parse/ParsePragma.cpp",1645,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    if (Tok.getIdentifierInfo()) {\n      // If we suspect that this is an attribute suggest the use of\n      // \'__attribute__\'.\n      if (ParsedAttr::getParsedKind(Tok.getIdentifierInfo(), /*ScopeName=*/nullptr, ParsedAttr::AS_GNU) != ParsedAttr::UnknownAttribute) {\n        Diag(Tok, diag::note_pragma_attribute_use_attribute_kw) << FixItHint::CreateInsertion(InsertStartLoc, \"__attribute__((\") << FixItHint::CreateInsertion(Tok.getEndLoc(), \"))\");"}}
[j]={{"clang/lib/Parse/ParsePragma.cpp",1887,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    if (Tok.getIdentifierInfo()) {\n      // If we suspect that this is an attribute suggest the use of\n      // \'__attribute__\'.\n      if (ParsedAttr::getParsedKind(Tok.getIdentifierInfo(), /*ScopeName=*/nullptr, ParsedAttr::AS_GNU) != ParsedAttr::UnknownAttribute) {\n        Diag(Tok, diag::note_pragma_attribute_use_attribute_kw) << FixItHint::CreateInsertion(InsertStartLoc, \"__attribute__((\") << FixItHint::CreateInsertion(Tok.getEndLoc(), \"))\");"}}
},
},
["note_pragma_entered_here"]={
["note_pragma_entered_here"]={
Line 1,670: Line 1,670:
[e]=Q,
[e]=Q,
[i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[j]={{S,1952,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here);"},{S,1961,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here);"},{wc,1533,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n  if (II == Ident__LINE__) {\n  } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n  } else if (II == Ident__DATE__) {\n  } else if (II == Ident__TIME__) {\n  } else if (II == Ident__INCLUDE_LEVEL__) {\n  } else if (II == Ident__TIMESTAMP__) {\n  } else if (II == Ident__FLT_EVAL_METHOD__) {\n    if (getLastFPEvalPragmaLocation().isValid()) {\n      Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);"},{Hb,1758,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{Hb,1813,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{sb,591,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (PragmaLocation.isValid())\n    Diag(PragmaLocation, diag::note_pragma_entered_here);"},{sb,593,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (Section.PragmaSectionLocation.isValid())\n    Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"},{sb,608,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      if (Section.PragmaSectionLocation.isValid())\n        Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"}}
[j]={{S,2146,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here);"},{S,2155,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here);"},{wc,1642,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n  if (II == Ident__LINE__) {\n  } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n  } else if (II == Ident__DATE__) {\n  } else if (II == Ident__TIME__) {\n  } else if (II == Ident__INCLUDE_LEVEL__) {\n  } else if (II == Ident__TIMESTAMP__) {\n  } else if (II == Ident__FLT_EVAL_METHOD__) {\n    if (getLastFPEvalPragmaLocation().isValid()) {\n      Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);"},{Hb,1900,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{Hb,1956,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(BeginLoc, diag::note_pragma_entered_here);"},{sb,705,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (PragmaLocation.isValid())\n    Diag(PragmaLocation, diag::note_pragma_entered_here);"},{sb,707,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (Section.PragmaSectionLocation.isValid())\n    Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"},{sb,726,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      if (Section.PragmaSectionLocation.isValid())\n        Diag(Section.PragmaSectionLocation, diag::note_pragma_entered_here);"}}
},
},
["note_pragma_loop_invalid_vectorize_option"]={
["note_pragma_loop_invalid_vectorize_option"]={
Line 1,682: Line 1,682:
[e]=Q,
[e]=Q,
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[j]={{"clang/lib/Parse/ParsePragma.cpp",1265,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (R.isInvalid() && !Tok.is(tok::comma))\n        Diag(Toks[0].getLocation(), diag::note_pragma_loop_invalid_vectorize_option);"}}
[j]={{"clang/lib/Parse/ParsePragma.cpp",1455,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (R.isInvalid() && !Tok.is(tok::comma))\n        Diag(Toks[0].getLocation(), diag::note_pragma_loop_invalid_vectorize_option);"}}
},
},
["note_pragma_pack_here"]={
["note_pragma_pack_here"]={
Line 1,694: Line 1,694:
[e]=k,
[e]=k,
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"},
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"},
[j]={{sb,386,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  if (PrevAlignPackState.ShouldWarnOnInclude) {\n    Diag(PrevAlignPackState.CurrentPragmaLocation, diag::note_pragma_pack_here);"},{sb,391,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // Warn about modified alignment after #includes.\n  if (PrevAlignPackState.CurrentValue != AlignPackStack.CurrentValue) {\n    Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_here);"}}
[j]={{sb,467,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  if (PrevAlignPackState.ShouldWarnOnInclude) {\n    Diag(PrevAlignPackState.CurrentPragmaLocation, diag::note_pragma_pack_here);"},{sb,472,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n  // Warn about modified alignment after #includes.\n  if (PrevAlignPackState.CurrentValue != AlignPackStack.CurrentValue) {\n    Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_here);"}}
},
},
["note_pragma_pack_pop_instead_reset"]={
["note_pragma_pack_pop_instead_reset"]={
Line 1,706: Line 1,706:
[e]=k,
[e]=k,
[i]={"a1479d798870",1501508270,"-Wpragma-pack: add an additional note and fixit when warning"},
[i]={"a1479d798870",1501508270,"-Wpragma-pack: add an additional note and fixit when warning"},
[j]={{sb,408,"void Sema::DiagnoseUnterminatedPragmaAlignPack() {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  for (const auto &StackSlot : llvm::reverse(AlignPackStack.Stack)) {\n    // The user might have already reset the alignment, so suggest replacing\n    // the reset with a pop.\n    if (IsInnermost && AlignPackStack.CurrentValue == AlignPackStack.DefaultValue) {\n      auto DB = Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_pop_instead_reset);"}}
[j]={{sb,491,"void Sema::DiagnoseUnterminatedPragmaAlignPack() {\n  // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n  // information, diagnostics below might not be accurate if we have mixed\n  // pragmas.\n  for (const auto &StackSlot : llvm::reverse(AlignPackStack.Stack)) {\n    // The user might have already reset the alignment, so suggest replacing\n    // the reset with a pop.\n    if (IsInnermost && AlignPackStack.CurrentValue == AlignPackStack.DefaultValue) {\n      auto DB = Diag(AlignPackStack.CurrentPragmaLocation, diag::note_pragma_pack_pop_instead_reset);"}}
},
},
["note_precedence_bitwise_first"]={
["note_precedence_bitwise_first"]={
Line 1,718: Line 1,718:
[e]=k,
[e]=k,
[i]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[i]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[j]={{C,13688,"/// 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]={{C,15778,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_bitwise_first) << BinaryOperator::getOpcodeStr(Opc), ParensRange);"}}
},
},
["note_precedence_conditional_first"]={
["note_precedence_conditional_first"]={
Line 1,730: Line 1,730:
[e]=k,
[e]=k,
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."},
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."},
[j]={{C,8229,"/// 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]={{C,9778,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_conditional_first), SourceRange(CondRHS->getBeginLoc(), RHSExpr->getEndLoc()));"}}
},
},
["note_precedence_silence"]={
["note_precedence_silence"]={
Line 1,742: Line 1,742:
[e]=k,
[e]=k,
[i]={"dac86fd24c56",1349659189,"Use a single note diagnostic for all the precedent/parentheses warnings."},
[i]={"dac86fd24c56",1349659189,"Use a single note diagnostic for all the precedent/parentheses warnings."},
[j]={{C,8227,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << BinaryOperator::getOpcodeStr(CondOpcode), SourceRange(Condition->getBeginLoc(), Condition->getEndLoc()));"},{C,9795,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    S.Diag(Loc, diag::note_precedence_silence) << RHS;"},{C,13687,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << OpStr, (isLeftComp ? LHSExpr : RHSExpr)->getSourceRange());"},{C,13697,"/// It accepts a \'&&\' expr that is inside a \'||\' one.\n/// Emit a diagnostic together with a fixit hint that wraps the \'&&\' expression\n/// in parentheses.\nstatic void EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop) {\n  SuggestParentheses(Self, Bop->getOperatorLoc(), Self.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{C,13738,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{C,13748,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Op, Bop->getSourceRange());"},{C,13767,"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]={{C,9521,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << BinaryOperator::getOpcodeStr(CondOpcode), SourceRange(Condition->getBeginLoc(), Condition->getEndLoc()));"},{C,11346,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    S.Diag(Loc, diag::note_precedence_silence) << RHS;"},{C,15766,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(Self, OpLoc, Self.PDiag(diag::note_precedence_silence) << OpStr, (isLeftComp ? LHSExpr : RHSExpr)->getSourceRange());"},{C,15827,"/// It accepts a \'&&\' expr that is inside a \'||\' one.\n/// Emit a diagnostic together with a fixit hint that wraps the \'&&\' expression\n/// in parentheses.\nstatic void EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop) {\n  SuggestParentheses(Self, Bop->getOperatorLoc(), Self.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{C,15843,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Bop->getOpcodeStr(), Bop->getSourceRange());"},{C,15866,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Op, Bop->getSourceRange());"},{C,15874,"static void DiagnoseShiftCompare(Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(S, OCE->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << (Kind == OO_LessLess ? \"<<\" : \">>\"), OCE->getSourceRange());"}}
},
},
["note_prev_module_declaration"]={
["note_prev_module_declaration"]={
Line 1,754: Line 1,754:
[e]=Rb,
[e]=Rb,
[i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration."},
[i]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration."},
[j]={{jc,217,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(VisibleModules.getImportLoc(ModuleScopes.back().Module), diag::note_prev_module_declaration);"}}
[j]={{jc,238,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(VisibleModules.getImportLoc(ModuleScopes.back().Module), diag::note_prev_module_declaration);"}}
},
},
["note_prev_module_definition"]={
["note_prev_module_definition"]={
Line 1,766: Line 1,766:
[e]=Rb,
[e]=Rb,
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[j]={{jc,280,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition);"}}
[j]={{jc,315,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition);"}}
},
},
["note_prev_module_definition_from_ast_file"]={
["note_prev_module_definition_from_ast_file"]={
Line 1,778: Line 1,778:
[e]=Rb,
[e]=Rb,
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"},
[j]={{jc,282,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n      else if (OptionalFileEntryRef FE = M->getASTFile())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition_from_ast_file) << FE->getName();"}}
[j]={{jc,317,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      if (M->DefinitionLoc.isValid())\n      else if (OptionalFileEntryRef FE = M->getASTFile())\n        Diag(M->DefinitionLoc, diag::note_prev_module_definition_from_ast_file) << FE->getName();"}}
},
},
["note_prev_partial_spec_here"]={
["note_prev_partial_spec_here"]={
Line 1,790: Line 1,790:
[e]=k,
[e]=k,
[i]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of"},
[i]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of"},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3497,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here) << SemaRef.Context.getTypeDeclType(PrevDecl);"}}
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4246,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here) << SemaRef.Context.getTypeDeclType(PrevDecl);"}}
},
},
["note_previous_access_declaration"]={
["note_previous_access_declaration"]={
Line 1,802: Line 1,802:
[e]=k,
[e]=k,
[i]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration."},
[i]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration."},
[j]={{"clang/lib/Sema/SemaAccess.cpp",46,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) << PrevMemberDecl << PrevMemberDecl->getAccess();"},{E,1109,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n    } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n      Diag(Ivar->getLocation(), diag::note_previous_access_declaration) << Ivar << Ivar->getName();"}}
[j]={{"clang/lib/Sema/SemaAccess.cpp",55,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) << PrevMemberDecl << PrevMemberDecl->getAccess();"},{E,1355,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n    } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n      Diag(Ivar->getLocation(), diag::note_previous_access_declaration) << Ivar << Ivar->getName();"}}
},
},
["note_previous_attribute"]={
["note_previous_attribute"]={
Line 1,814: Line 1,814:
[e]=k,
[e]=k,
[i]={"4c3db23d1c93",1335403563,"Reject cases like"},
[i]={"4c3db23d1c93",1335403563,"Reject cases like"},
[j]={{v,6356,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n    } else if (IsMicrosoftABI && IsSpecialization) {\n    } else {\n      S.Diag(OldImportAttr->getLocation(), diag::note_previous_attribute);"},{u,2275,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n        } else {\n          Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,2523,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  if (existingAttr) {\n    S.Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,2890,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,2965,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3413,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n      Diag(EA->getLoc(), diag::note_previous_attribute);"},{u,6773,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{u,6790,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{y,5518,"/// 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]={{v,7150,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n    } else if (IsMicrosoftABI && IsSpecialization) {\n    } else {\n      S.Diag(OldImportAttr->getLocation(), diag::note_previous_attribute);"},{u,2551,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n        } else {\n          Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,2875,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  if (existingAttr) {\n    S.Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3299,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3383,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_attribute);"},{u,3907,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n      Diag(EA->getLoc(), diag::note_previous_attribute);"},{u,7684,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{u,7704,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    Diag(AL.getLoc(), diag::note_previous_attribute);"},{y,6485,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr->isInherited()) {\n    // Diagnose dll attributes on members of class with dll attribute.\n    for (Decl *Member : Class->decls()) {\n      Diag(ClassAttr->getLocation(), diag::note_previous_attribute);"}}
},
},
["note_previous_builtin_declaration"]={
["note_previous_builtin_declaration"]={
Line 1,826: Line 1,826:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,3131,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    if (const auto *FD = dyn_cast<FunctionDecl>(Old)) {\n      if (FD->getBuiltinID())\n        PrevDiag = diag::note_previous_builtin_declaration;"},{v,3308,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(Old->getLocation(), diag::note_previous_builtin_declaration) << Old << Old->getType();"},{v,3849,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    // If it\'s actually a library-defined builtin function like \'malloc\'\n    // or \'printf\', just warn about the incompatible redeclaration.\n    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {\n      Diag(OldLocation, diag::note_previous_builtin_declaration) << Old << Old->getType();"},{v,3853,"/// 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]={{v,3478,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    if (const auto *FD = dyn_cast<FunctionDecl>(Old)) {\n      if (FD->getBuiltinID())\n        PrevDiag = diag::note_previous_builtin_declaration;"},{v,3679,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(Old->getLocation(), diag::note_previous_builtin_declaration) << Old << Old->getType();"},{v,4297,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    // If it\'s actually a library-defined builtin function like \'malloc\'\n    // or \'printf\', just warn about the incompatible redeclaration.\n    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {\n      Diag(OldLocation, diag::note_previous_builtin_declaration) << Old << Old->getType();"},{v,4302,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    PrevDiag = diag::note_previous_builtin_declaration;"}}
},
},
["note_previous_decl"]={
["note_previous_decl"]={
Line 1,839: Line 1,839:
[i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[j]={
[j]={
[1]={"clang/lib/Sema/SemaCUDA.cpp",575,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if
[1]={"clang/lib/Sema/SemaCUDA.cpp",641,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if
}
}
},
},
Line 1,905: Line 1,905:
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={
[j]={
[1]={"clang/lib/Sema/SemaCUDA.cpp",819,"void Sema::checkCUDATargetOverload(FunctionDecl *NewFD, const LookupResult &Previous) {\n  for (NamedDecl *OldND : Previous) {\n    // Don\'t allow HD and global functions to overload other functions with the\n    // same signature.  We allow overloading based on CUDA attributes so that\n
[1]={"clang/lib/Sema/SemaCUDA.cpp",926,"void Sema::checkCUDATargetOverload(FunctionDecl *NewFD, const LookupResult &Previous) {\n  for (NamedDecl *OldND : Previous) {\n    // Don\'t allow HD and global functions to overload other functions with the\n    // same signature.  We allow overloading based on CUDA attributes so that\n
}
}
},
},
Line 2,006: Line 2,006:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{v,3103,"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]={{v,3447,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (OldParamDT && NewParamDT && OldParamDT->getPointeeType() == NewParamDT->getPointeeType()) {\n    if (!EquivalentArrayTypes(OldParamOT, NewParamOT, S.getASTContext())) {\n      S.Diag(OldParam->getLocation(), diag::note_previous_declaration_as) << OldParamOT;"}}
},
},
["note_previous_default_assoc"]={
["note_previous_default_assoc"]={
Line 2,018: Line 2,018:
[e]=Q,
[e]=Q,
[i]={"91147596414d",1302827748,"C1X: implement generic selections"},
[i]={"91147596414d",1302827748,"C1X: implement generic selections"},
[j]={{qc,3049,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n///    generic-selection:\n///          _Generic ( assignment-expression , generic-assoc-list )\n///    generic-assoc-list:\n///          generic-association\n///          generic-assoc-list , generic-association\n///    generic-association:\n///          type-name : assignment-expression\n///          default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n///  generic-selection:\n///          _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n  do {\n    if (Tok.is(tok::kw_default)) {\n      // C11 6.5.1.1p2 \"A generic selection shall have no more than one default\n      // generic association.\"\n      if (!DefaultLoc.isInvalid()) {\n        Diag(DefaultLoc, diag::note_previous_default_assoc);"}}
[j]={{qc,3363,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n///    generic-selection:\n///          _Generic ( assignment-expression , generic-assoc-list )\n///    generic-assoc-list:\n///          generic-association\n///          generic-assoc-list , generic-association\n///    generic-association:\n///          type-name : assignment-expression\n///          default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n///  generic-selection:\n///          _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n  do {\n    if (Tok.is(tok::kw_default)) {\n      // C11 6.5.1.1p2 \"A generic selection shall have no more than one default\n      // generic association.\"\n      if (!DefaultLoc.isInvalid()) {\n        Diag(DefaultLoc, diag::note_previous_default_assoc);"}}
},
},
["note_previous_definition"]={
["note_previous_definition"]={
Line 2,031: Line 2,031:
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={
[j]={
[1]={nc,3806,"/// 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
[1]={nc,4323,"/// GetOrCreateLLVMFunction - If the specified mangled name is not in the\n/// module, create and return an llvm Function with the specified type. If there\n/// is something in the module with the specified name
}
}
},
},
Line 2,102: Line 2,102:
[e]=k,
[e]=k,
[i]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen."},
[i]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen."},
[j]={{O,3914,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n      if (RD->lookupInBases(CTPB, Paths)) {\n        if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n          Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"},{O,3929,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (!R.second) {\n      Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"}}
[j]={{O,4546,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n      if (RD->lookupInBases(CTPB, Paths)) {\n        if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n          Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"},{O,4566,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    if (!R.second) {\n      Diag(Problem->getExceptionDecl()->getTypeSpecStartLoc(), diag::note_previous_exception_handler) << Problem->getCaughtType();"}}
},
},
["note_previous_explicit_instantiation"]={
["note_previous_explicit_instantiation"]={
Line 2,114: Line 2,114:
[e]=k,
[e]=k,
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[j]={{x,7643,"/// 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]={{x,9301,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDefinition:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation), diag::note_previous_explicit_instantiation);"}}
},
},
["note_previous_field_init"]={
["note_previous_field_init"]={
Line 2,126: Line 2,126:
[e]=k,
[e]=k,
[i]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[i]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[j]={{U,2357,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    // C++20 [dcl.init.list]p3:\n    //  The ordered identifiers in the designators of the designated-\n    //  initializer-list shall form a subsequence of the ordered identifiers\n    //  in the direct non-static data members of T.\n    //\n    // Note that this is not a condition on forming the aggregate\n    // initialization, only on actually performing initialization,\n    // so it is not checked in VerifyOnly mode.\n    //\n    // FIXME: This is the only reordering diagnostic we produce, and it only\n    // catches cases where we have a top-level field designator that jumps\n    // backwards. This is the only such case that is reachable in an\n    // otherwise-valid C++20 program, so is the only case that\'s required for\n    // conformance, but for consistency, we should diagnose all the other\n    // cases where a designator takes us backwards too.\n    if (IsFirstDesignator && !VerifyOnly && SemaRef.getLangOpts().CPlusPlus && NextField && (*NextField == RD->field_end() || (*NextField)->getFieldIndex() > Field->getFieldIndex() + 1)) {\n      if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n        if (StructuredList && OldIndex <= StructuredList->getNumInits()) {\n          if (Expr *PrevInit = StructuredList->getInit(OldIndex)) {\n            SemaRef.Diag(PrevInit->getBeginLoc(), diag::note_previous_field_init) << PrevField << PrevInit->getSourceRange();"}}
[j]={{U,2855,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    // C++20 [dcl.init.list]p3:\n    //  The ordered identifiers in the designators of the designated-\n    //  initializer-list shall form a subsequence of the ordered identifiers\n    //  in the direct non-static data members of T.\n    //\n    // Note that this is not a condition on forming the aggregate\n    // initialization, only on actually performing initialization,\n    // so it is not checked in VerifyOnly mode.\n    //\n    // FIXME: This is the only reordering diagnostic we produce, and it only\n    // catches cases where we have a top-level field designator that jumps\n    // backwards. This is the only such case that is reachable in an\n    // otherwise-valid C++20 program, so is the only case that\'s required for\n    // conformance, but for consistency, we should diagnose all the other\n    // cases where a designator takes us backwards too.\n    if (IsFirstDesignator && !VerifyOnly && SemaRef.getLangOpts().CPlusPlus && NextField && (*NextField == RD->field_end() || (*NextField)->getFieldIndex() > Field->getFieldIndex() + 1)) {\n      if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n        if (StructuredList && OldIndex <= StructuredList->getNumInits()) {\n          if (Expr *PrevInit = StructuredList->getInit(OldIndex)) {\n            SemaRef.Diag(PrevInit->getBeginLoc(), diag::note_previous_field_init) << PrevField << PrevInit->getSourceRange();"}}
},
},
["note_previous_implicit_declaration"]={
["note_previous_implicit_declaration"]={
Line 2,138: Line 2,138:
[e]=l,
[e]=l,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,3128,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    PrevDiag = diag::note_previous_implicit_declaration;"},{y,15215,"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]={{v,3475,"// Determine whether the previous declaration was a definition, implicit\n// declaration, or a declaration.\ntemplate <typename T> static std::pair<diag::kind, SourceLocation> getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {\n  if (Old->isThisDeclarationADefinition())\n  else if (Old->isImplicit()) {\n    PrevDiag = diag::note_previous_implicit_declaration;"},{y,17814,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {\n    // Don\'t consider the implicit declaration we generate for explicit\n    // specializations. FIXME: Do not generate these implicit declarations.\n    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization || Prev->getPreviousDecl()) && !Prev->isDefined()) {\n      Diag(Prev->getLocation().isInvalid() ? DelLoc : Prev->getLocation(), Prev->isImplicit() ? diag::note_previous_implicit_declaration : diag::note_previous_declaration);"}}
},
},
["note_previous_initializer"]={
["note_previous_initializer"]={
Line 2,150: Line 2,150:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,4885,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  S.Diag(findDefaultInitializer(Parent), diag::note_previous_initializer) << 0;"},{v,11566,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(VDecl->getCanonicalDecl()->getInit()->getExprLoc(), diag::note_previous_initializer) << 0;"},{y,4781,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer) << 0 << PrevInit->getSourceRange();"},{y,4799,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      if (En.first && En.first != Child) {\n        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer) << 0 << En.second->getSourceRange();"},{U,360,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    if (!VerifyOnly) {\n      SemaRef.Diag(OldInit->getBeginLoc(), diag::note_previous_initializer) << (OldInit->HasSideEffects(SemaRef.Context) && FullyOverwritten) << OldInit->getSourceRange();"}}
[j]={{v,5485,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  S.Diag(findDefaultInitializer(Parent), diag::note_previous_initializer) << 0;"},{v,13252,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(VDecl->getCanonicalDecl()->getInit()->getExprLoc(), diag::note_previous_initializer) << 0;"},{y,5644,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer) << 0 << PrevInit->getSourceRange();"},{y,5668,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      if (En.first && En.first != Child) {\n        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer) << 0 << En.second->getSourceRange();"},{U,460,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    if (!VerifyOnly) {\n      SemaRef.Diag(OldInit->getBeginLoc(), diag::note_previous_initializer) << (OldInit->HasSideEffects(SemaRef.Context) && FullyOverwritten) << OldInit->getSourceRange();"}}
},
},
["note_previous_ms_inheritance"]={
["note_previous_ms_inheritance"]={
Line 2,162: Line 2,162:
[e]=k,
[e]=k,
[i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"},
[i]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"},
[j]={{u,7115,"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]={{u,8070,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    Diag(CI.getLoc(), diag::note_previous_ms_inheritance);"}}
},
},
["note_previous_namespace_alias"]={
["note_previous_namespace_alias"]={
Line 2,174: Line 2,174:
[e]=k,
[e]=k,
[i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[j]={{y,11546,"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]={{y,13437,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      } else if (isVisible(PrevDecl)) {\n        Diag(AD->getLocation(), diag::note_previous_namespace_alias) << AD->getNamespace();"}}
},
},
["note_previous_statement"]={
["note_previous_statement"]={
Line 2,186: Line 2,186:
[e]=Q,
[e]=Q,
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[j]={{"clang/lib/Parse/ParseStmt.cpp",1332,"struct MisleadingIndentationChecker {\n  void Check() {\n    if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != SM.getPresumedLineNumber(Tok.getLocation()) && (Tok.isNot(tok::identifier) || P.getPreprocessor().LookAhead(0).isNot(tok::colon))) {\n      P.Diag(StmtLoc, diag::note_previous_statement);"}}
[j]={{"clang/lib/Parse/ParseStmt.cpp",1443,"struct MisleadingIndentationChecker {\n  void Check() {\n    if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != SM.getPresumedLineNumber(Tok.getLocation()) && (Tok.isNot(tok::identifier) || P.getPreprocessor().LookAhead(0).isNot(tok::colon))) {\n      P.Diag(StmtLoc, diag::note_previous_statement);"}}
},
},
["note_previous_template_specialization"]={
["note_previous_template_specialization"]={
Line 2,198: Line 2,198:
[e]=k,
[e]=k,
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[i]={"f61eca93c05f",1242239300,"Improve the semantic checking for explicit instantiations of"},
[j]={{x,7612,"/// 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]={{x,9266,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDefinition:\n    case TSK_ExplicitSpecialization:\n      Diag(PrevDecl->getLocation(), diag::note_previous_template_specialization);"}}
},
},
["note_previous_use"]={
["note_previous_use"]={
Line 2,210: Line 2,210:
[e]=l,
[e]=l,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,14558,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    Diag(Redecl->getLocation(), diag::note_previous_use);"},{v,15071,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // Make sure that this wasn\'t declared as an enum and now used as a\n        // struct or something similar.\n        if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n          Diag(PrevTagDecl->getLocation(), diag::note_previous_use);"},{E,1254,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{E,1285,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n  } else {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{x,1683,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n      Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);"},{x,3600,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  // Check the tag kind\n  if (const RecordType *RT = Result->getAs<RecordType>()) {\n    if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition, TagLoc, Id)) {\n      Diag(D->getLocation(), diag::note_previous_use);"},{x,7148,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{x,8202,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TD->getLocation(), diag::note_previous_use);"},{x,8208,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, /*isDefinition*/ false, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{gb,1232,"QualType TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc, ElaboratedTypeKeyword Keyword, NestedNameSpecifierLoc QualifierLoc, QualType T) {\n  if (const TagType *TT = T->getAs<TagType>()) {\n    // TODO: should we even warn on struct/class mismatches for this?  Seems\n    // like it\'s likely to produce a lot of spurious errors.\n    if (Id && Keyword != ETK_None && Keyword != ETK_Typename) {\n      if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/ false, TagLocation, Id)) {\n        SemaRef.Diag(TD->getLocation(), diag::note_previous_use);"}}
[j]={{v,16676,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    Diag(Redecl->getLocation(), diag::note_previous_use);"},{v,17247,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // Make sure that this wasn\'t declared as an enum and now used as a\n        // struct or something similar.\n        if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n          Diag(PrevTagDecl->getLocation(), diag::note_previous_use);"},{E,1564,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{E,1603,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n  } else {\n    if (Synthesize)\n      if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplIvarDecl(PropertyIvar)) {\n        Diag(PPIDecl->getLocation(), diag::note_previous_use);"},{x,2009,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n      Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);"},{x,4305,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  // Check the tag kind\n  if (const RecordType *RT = Result->getAs<RecordType>()) {\n    if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition, TagLoc, Id)) {\n      Diag(D->getLocation(), diag::note_previous_use);"},{x,8719,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{x,9964,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TD->getLocation(), diag::note_previous_use);"},{x,9976,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, /*isDefinition*/ false, KWLoc, ClassTemplate->getIdentifier())) {\n    Diag(ClassTemplate->getTemplatedDecl()->getLocation(), diag::note_previous_use);"},{gb,1687,"QualType TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc, ElaboratedTypeKeyword Keyword, NestedNameSpecifierLoc QualifierLoc, QualType T) {\n  if (const TagType *TT = T->getAs<TagType>()) {\n    // TODO: should we even warn on struct/class mismatches for this?  Seems\n    // like it\'s likely to produce a lot of spurious errors.\n    if (Id && Keyword != ETK_None && Keyword != ETK_Typename) {\n      if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/ false, TagLocation, Id)) {\n        SemaRef.Diag(TD->getLocation(), diag::note_previous_use);"}}
},
},
["note_previous_uuid"]={
["note_previous_uuid"]={
Line 2,222: Line 2,222:
[e]=k,
[e]=k,
[i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids."},
[i]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids."},
[j]={{u,6151,"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]={{u,6979,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    if (!UA->getGuid().empty()) {\n      Diag(CI.getLoc(), diag::note_previous_uuid);"}}
},
},
["note_printf_c_str"]={
["note_printf_c_str"]={
Line 2,234: Line 2,234:
[e]=k,
[e]=k,
[i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function"},
[i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function"},
[j]={{F,9716,"// Check if a (w)string was passed when a (w)char* was needed, and offer a\n// better diagnostic if so. AT is assumed to be valid.\n// Returns true when a c_str() conversion method is found.\nbool CheckPrintfHandler::checkForCStrMembers(const analyze_printf::ArgType &AT, const Expr *E) {\n  for (MethodSet::iterator MI = Results.begin(), ME = Results.end(); MI != ME; ++MI) {\n    if (Method->getMinRequiredArguments() == 0 && AT.matchesType(S.Context, Method->getReturnType())) {\n      S.Diag(E->getBeginLoc(), diag::note_printf_c_str) << \"c_str()\" << FixItHint::CreateInsertion(EndLoc, \".c_str()\");"}}
[j]={{F,10730,"// Check if a (w)string was passed when a (w)char* was needed, and offer a\n// better diagnostic if so. AT is assumed to be valid.\n// Returns true when a c_str() conversion method is found.\nbool CheckPrintfHandler::checkForCStrMembers(const analyze_printf::ArgType &AT, const Expr *E) {\n  for (MethodSet::iterator MI = Results.begin(), ME = Results.end(); MI != ME; ++MI) {\n    if (Method->getMinRequiredArguments() == 0 && AT.matchesType(S.Context, Method->getReturnType())) {\n      S.Diag(E->getBeginLoc(), diag::note_printf_c_str) << \"c_str()\" << FixItHint::CreateInsertion(EndLoc, \".c_str()\");"}}
},
},
["note_prior_template_arg_substitution"]={
["note_prior_template_arg_substitution"]={
Line 2,246: Line 2,246:
[e]=k,
[e]=k,
[i]={"e62e6a0191d2",1257966828,"Before checking a template template argument against its corresponding"},
[i]={"e62e6a0191d2",1257966828,"Before checking a template template argument against its corresponding"},
[j]={{gb,617,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::PriorTemplateArgumentSubstitution: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_prior_template_arg_substitution) << isa<TemplateTemplateParmDecl>(Parm) << Name << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[j]={{gb,897,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::PriorTemplateArgumentSubstitution: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_prior_template_arg_substitution) << isa<TemplateTemplateParmDecl>(Parm) << Name << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
},
},
["note_private_extern"]={
["note_private_extern"]={
Line 2,258: Line 2,258:
[e]=k,
[e]=k,
[i]={"f85f33863455",1345239895,"c: privide deprecated warning when __private_extern__ storage"},
[i]={"f85f33863455",1345239895,"c: privide deprecated warning when __private_extern__ storage"},
[j]={{v,12032,"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]={{v,13782,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && !Var->isInvalidDecl() && Var->getStorageClass() == SC_PrivateExtern) {\n        Diag(Var->getLocation(), diag::note_private_extern);"}}
},
},
["note_private_module_fragment"]={
["note_private_module_fragment"]={
Line 2,270: Line 2,270:
[e]=Rb,
[e]=Rb,
[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[j]={{yc,1125,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // C++ standard modules. Diagnose cases where a function is declared inline\n  // in the module purview but has no definition before the end of the TU or\n  // the start of a Private Module Fragment (if one is present).\n  if (!PendingInlineFuncDecls.empty()) {\n    for (auto *D : PendingInlineFuncDecls) {\n      if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n        // If we have a PMF it should be at the end of the ModuleScopes.\n        if (DefInPMF && ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n          Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"},{jc,696,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  // C++2a [module.interface]p1:\n  //  An export-declaration shall appear only [...] in the purview of a module\n  //  interface unit. An export-declaration shall not appear directly or\n  //  indirectly within [...] a private-module-fragment.\n  if (!isCurrentModulePurview()) {\n  } else if (!ModuleScopes.back().ModuleInterface) {\n  } else if (ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"}}
[j]={{yc,1274,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // C++ standard modules. Diagnose cases where a function is declared inline\n  // in the module purview but has no definition before the end of the TU or\n  // the start of a Private Module Fragment (if one is present).\n  if (!PendingInlineFuncDecls.empty()) {\n    for (auto *D : PendingInlineFuncDecls) {\n      if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n        // If we have a PMF it should be at the end of the ModuleScopes.\n        if (DefInPMF && ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n          Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"},{jc,779,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  // C++2a [module.interface]p1:\n  //  An export-declaration shall appear only [...] in the purview of a module\n  //  interface unit. An export-declaration shall not appear directly or\n  //  indirectly within [...] a private-module-fragment.\n  if (!isCurrentModulePurview()) {\n  } else if (!ModuleScopes.back().ModuleInterface) {\n  } else if (ModuleScopes.back().Module->Kind == Module::PrivateModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::note_private_module_fragment);"}}
},
},
["note_private_top_level_defined"]={
["note_private_top_level_defined"]={
Line 2,282: Line 2,282:
[e]=l,
[e]=l,
[i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private"},
[i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private"},
[j]={{gc,1678,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // If the user is requesting Foo.Private and it doesn\'t exist, try to\n    // match Foo_Private and emit a warning asking for the user to write\n    // @import Foo_Private instead. FIXME: remove this when existing clients\n    // migrate off of Foo.Private syntax.\n    if (!Sub && Name == \"Private\" && Module == Module->getTopLevelModule()) {\n      if (Sub) {\n        if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {\n          getDiagnostics().Report(Sub->DefinitionLoc, diag::note_private_top_level_defined);"}}
[j]={{gc,2054,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // If the user is requesting Foo.Private and it doesn\'t exist, try to\n    // match Foo_Private and emit a warning asking for the user to write\n    // @import Foo_Private instead. FIXME: remove this when existing clients\n    // migrate off of Foo.Private syntax.\n    if (!Sub && Name == \"Private\" && Module == Module->getTopLevelModule()) {\n      if (Sub) {\n        if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {\n          getDiagnostics().Report(Sub->DefinitionLoc, diag::note_private_top_level_defined);"}}
},
},
["note_property_attribute"]={
["note_property_attribute"]={
Line 2,294: Line 2,294:
[e]=k,
[e]=k,
[i]={"974c94804986",1348260397,"objective-C: when diagnosing deprecated/unavailable usage of"},
[i]={"974c94804986",1348260397,"objective-C: when diagnosing deprecated/unavailable usage of"},
[j]={{Kb,302,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // Matches \'diag::note_property_attribute\' options."},{Kb,471,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"},{Kb,475,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n  } else if (!UnknownObjCClass) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"}}
[j]={{Kb,340,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // Matches \'diag::note_property_attribute\' options."},{Kb,543,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"},{Kb,548,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n  } else if (!UnknownObjCClass) {\n    if (ObjCProperty)\n      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute) << ObjCProperty->getDeclName() << property_note_select;"}}
},
},
["note_property_declare"]={
["note_property_declare"]={
Line 2,306: Line 2,306:
[e]=k,
[e]=k,
[i]={"de8db16a7daa",1257201915,"Property declared in continuation class can only be used to"},
[i]={"de8db16a7daa",1257201915,"Property declared in continuation class can only be used to"},
[j]={{B,4480,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n  for (const auto *CurMethod : ImplD->instance_methods()) {\n    // Do not issue this warning if backing ivar is used somewhere and accessor\n    // implementation makes a self call. This is to prevent false positive in\n    // cases where the ivar is accessed by another method that the accessor\n    // delegates to.\n    if (!IV->isReferenced() || !Checker.InvokedSelfMethod) {\n      Diag(PDecl->getLocation(), diag::note_property_declare);"},{E,347,"/// Check for a mismatch in the atomicity of the given properties.\nstatic void checkAtomicPropertyMismatch(Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) {\n  S.Diag(OldProperty->getLocation(), diag::note_property_declare);"},{E,373,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // If we found a property in an extension, complain.\n  if (PIDecl && isa<ObjCCategoryDecl>(PIDecl->getDeclContext())) {\n    Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,389,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // A readonly property declared in the primary class can be refined\n    // by adding a readwrite property within an extension.\n    // Anything else is an error.\n    if (!(PIDecl->isReadOnly() && isReadWrite)) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,398,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // Check for consistency of getters.\n    if (PIDecl->getGetterName() != GetterSel) {\n      // If the getter was written explicitly, complain.\n      if (AttributesAsWritten & ObjCPropertyAttribute::kind_getter) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,413,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    if (ExistingOwnership && NewOwnership != ExistingOwnership) {\n      // If the ownership was written explicitly, complain.\n      if (getOwnershipRule(AttributesAsWritten)) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,423,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // If the redeclaration is \'weak\' but the original property is not,\n    if ((Attributes & ObjCPropertyAttribute::kind_weak) && !(PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_weak) && PIDecl->getType()->getAs<ObjCObjectPointerType>() && PIDecl->getType().getObjCLifetime() == Qualifiers::OCL_None) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,451,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,507,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // Class property and instance property can have the same name.\n  if (ObjCPropertyDecl *prevDecl = ObjCPropertyDecl::findPropertyDecl(DC, PropertyId, ObjCPropertyDecl::getQueryKind(isClassProperty))) {\n    Diag(prevDecl->getLocation(), diag::note_property_declare);"},{E,652,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  S.Diag(property->getLocation(), diag::note_property_declare);"},{E,927,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,933,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1006,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1023,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n        if (PropertyIvarType.isObjCGCStrong()) {\n          Diag(property->getLocation(), diag::note_property_declare);"},{E,1035,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(property->getLocation(), diag::note_property_declare);"},{E,1060,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1074,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      // In ARC, give the ivar a lifetime qualifier based on the\n      // property attributes.\n      if ((getLangOpts().ObjCAutoRefCount || isARCWeak) && !PropertyIvarType.getObjCLifetime() && PropertyIvarType->isObjCRetainableType()) {\n        // It\'s an error if we have to do this and the user didn\'t\n        // explicitly write an ownership attribute on the property.\n        if (!hasWrittenStorageAttribute(property, QueryKind) && !(kind & ObjCPropertyAttribute::kind_strong)) {\n          Diag(property->getLocation(), diag::note_property_declare);"},{E,1087,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1196,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n    if (property->hasAttr<NSReturnsNotRetainedAttr>() && !getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1344,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  // Readonly properties from protocols can be implemented as \"readwrite\"\n  // with a custom setter name.\n  if (Property->getSetterName() != SuperProperty->getSetterName() && !(SuperProperty->isReadOnly() && isa<ObjCProtocolDecl>(SuperProperty->getDeclContext()))) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1348,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (Property->getGetterName() != SuperProperty->getGetterName()) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1361,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {\n    if (!isObjCPointerConversion(RHSType, LHSType, ConvertedType, IncompatibleObjC) || IncompatibleObjC) {\n      Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1546,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(Prop->getLocation(), diag::note_property_declare);"},{E,1556,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{E,1559,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{E,1600,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    S.Diag(Prop->getLocation(), diag::note_property_declare);"},{E,1750,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (GetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{E,1754,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{E,1785,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{Db,562,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop->getLocation(), diag::note_property_declare);"},{Db,563,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop1->getLocation(), diag::note_property_declare);"},{Db,582,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(prop->getLocation(), diag::note_property_declare);"}}
[j]={{B,5370,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n  for (const auto *CurMethod : ImplD->instance_methods()) {\n    // Do not issue this warning if backing ivar is used somewhere and accessor\n    // implementation makes a self call. This is to prevent false positive in\n    // cases where the ivar is accessed by another method that the accessor\n    // delegates to.\n    if (!IV->isReferenced() || !Checker.InvokedSelfMethod) {\n      Diag(PDecl->getLocation(), diag::note_property_declare);"},{E,402,"/// Check for a mismatch in the atomicity of the given properties.\nstatic void checkAtomicPropertyMismatch(Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) {\n  S.Diag(OldProperty->getLocation(), diag::note_property_declare);"},{E,445,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // If we found a property in an extension, complain.\n  if (PIDecl && isa<ObjCCategoryDecl>(PIDecl->getDeclContext())) {\n    Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,467,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // A readonly property declared in the primary class can be refined\n    // by adding a readwrite property within an extension.\n    // Anything else is an error.\n    if (!(PIDecl->isReadOnly() && isReadWrite)) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,477,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // Check for consistency of getters.\n    if (PIDecl->getGetterName() != GetterSel) {\n      // If the getter was written explicitly, complain.\n      if (AttributesAsWritten & ObjCPropertyAttribute::kind_getter) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,493,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    if (ExistingOwnership && NewOwnership != ExistingOwnership) {\n      // If the ownership was written explicitly, complain.\n      if (getOwnershipRule(AttributesAsWritten)) {\n        Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,507,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // Check for consistency with the previous declaration, if there is one.\n  if (PIDecl) {\n    // If the redeclaration is \'weak\' but the original property is not,\n    if ((Attributes & ObjCPropertyAttribute::kind_weak) && !(PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_weak) && PIDecl->getType()->getAs<ObjCObjectPointerType>() && PIDecl->getType().getObjCLifetime() == Qualifiers::OCL_None) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,545,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(PIDecl->getLocation(), diag::note_property_declare);"},{E,628,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // Class property and instance property can have the same name.\n  if (ObjCPropertyDecl *prevDecl = ObjCPropertyDecl::findPropertyDecl(DC, PropertyId, ObjCPropertyDecl::getQueryKind(isClassProperty))) {\n    Diag(prevDecl->getLocation(), diag::note_property_declare);"},{E,791,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  S.Diag(property->getLocation(), diag::note_property_declare);"},{E,1128,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1135,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1219,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1239,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n        if (PropertyIvarType.isObjCGCStrong()) {\n          Diag(property->getLocation(), diag::note_property_declare);"},{E,1255,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(property->getLocation(), diag::note_property_declare);"},{E,1289,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1307,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      // In ARC, give the ivar a lifetime qualifier based on the\n      // property attributes.\n      if ((getLangOpts().ObjCAutoRefCount || isARCWeak) && !PropertyIvarType.getObjCLifetime() && PropertyIvarType->isObjCRetainableType()) {\n        // It\'s an error if we have to do this and the user didn\'t\n        // explicitly write an ownership attribute on the property.\n        if (!hasWrittenStorageAttribute(property, QueryKind) && !(kind & ObjCPropertyAttribute::kind_strong)) {\n          Diag(property->getLocation(), diag::note_property_declare);"},{E,1328,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {\n        Diag(property->getLocation(), diag::note_property_declare);"},{E,1483,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n    if (property->hasAttr<NSReturnsNotRetainedAttr>() && !getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n      Diag(property->getLocation(), diag::note_property_declare);"},{E,1681,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  // Readonly properties from protocols can be implemented as \"readwrite\"\n  // with a custom setter name.\n  if (Property->getSetterName() != SuperProperty->getSetterName() && !(SuperProperty->isReadOnly() && isa<ObjCProtocolDecl>(SuperProperty->getDeclContext()))) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1686,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (Property->getGetterName() != SuperProperty->getGetterName()) {\n    Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1704,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {\n    if (!isObjCPointerConversion(RHSType, LHSType, ConvertedType, IncompatibleObjC) || IncompatibleObjC) {\n      Diag(SuperProperty->getLocation(), diag::note_property_declare);"},{E,1937,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(Prop->getLocation(), diag::note_property_declare);"},{E,1955,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{E,1959,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(PropInSuperClass->getLocation(), diag::note_property_declare);"},{E,2021,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    S.Diag(Prop->getLocation(), diag::note_property_declare);"},{E,2200,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (GetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{E,2206,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      if (SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{E,2251,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(Property->getLocation(), diag::note_property_declare);"},{Db,677,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop->getLocation(), diag::note_property_declare);"},{Db,678,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(prop1->getLocation(), diag::note_property_declare);"},{Db,700,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(prop->getLocation(), diag::note_property_declare);"}}
},
},
["note_property_synthesize"]={
["note_property_synthesize"]={
Line 2,318: Line 2,318:
[e]=k,
[e]=k,
[i]={"f5b993f7b149",1355352505,"[objc] For the ARC error that is emitted when a synthesized property implementation"},
[i]={"f5b993f7b149",1355352505,"[objc] For the ARC error that is emitted when a synthesized property implementation"},
[j]={{E,654,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  if (propertyImplLoc.isValid())\n    S.Diag(propertyImplLoc, diag::note_property_synthesize);"},{E,826,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  if (AtLoc.isValid())\n    S.Diag(AtLoc, diag::note_property_synthesize);"},{E,1535,"/// 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]={{E,793,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  if (propertyImplLoc.isValid())\n    S.Diag(propertyImplLoc, diag::note_property_synthesize);"},{E,1009,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  if (AtLoc.isValid())\n    S.Diag(AtLoc, diag::note_property_synthesize);"},{E,1921,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCPropertyImplDecl *PID = IMPDecl->FindPropertyImplIvarDecl(Prop->getIdentifier())) {\n      if (PID->getLocation().isValid())\n        Diag(PID->getLocation(), diag::note_property_synthesize);"}}
},
},
["note_protected_by___block"]={
["note_protected_by___block"]={
Line 2,330: Line 2,330:
[e]=k,
[e]=k,
[i]={"9662cd322760",1248034631,"enhance the goto checker to reject jumps across __block variable definitions."},
[i]={"9662cd322760",1248034631,"enhance the goto checker to reject jumps across __block variable definitions."},
[j]={{N,145,"/// 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]={{N,152,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<BlocksAttr>())\n      return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}}
},
},
["note_protected_by_cleanup"]={
["note_protected_by_cleanup"]={
Line 2,342: Line 2,342:
[e]=k,
[e]=k,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,148,"/// 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]={{N,156,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<CleanupAttr>())\n      return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}}
},
},
["note_protected_by_consteval_if"]={
["note_protected_by_consteval_if"]={
Line 2,354: Line 2,354:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{N,350,"/// 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]={{N,378,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    if (IS->isConstexpr())\n    else if (IS->isConsteval())\n      Diag = diag::note_protected_by_consteval_if;"}}
},
},
["note_protected_by_constexpr_if"]={
["note_protected_by_constexpr_if"]={
Line 2,366: Line 2,366:
[e]=k,
[e]=k,
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."},
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."},
[j]={{N,348,"/// 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]={{N,376,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    if (IS->isConstexpr())\n      Diag = diag::note_protected_by_constexpr_if;"}}
},
},
["note_protected_by_cxx_catch"]={
["note_protected_by_cxx_catch"]={
Line 2,378: Line 2,378:
[e]=k,
[e]=k,
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[j]={{N,387,"/// 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]={{N,419,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    // Jump from the catch into the try is not allowed either.\n    for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}}
},
},
["note_protected_by_cxx_try"]={
["note_protected_by_cxx_try"]={
Line 2,390: Line 2,390:
[e]=k,
[e]=k,
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[i]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[j]={{N,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::CXXTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}}
[j]={{N,407,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}}
},
},
["note_protected_by_if_available"]={
["note_protected_by_if_available"]={
Line 2,402: Line 2,402:
[e]=k,
[e]=k,
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[j]={{N,346,"/// 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]={{N,374,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::IfStmtClass: {\n    unsigned Diag = diag::note_protected_by_if_available;"}}
},
},
["note_protected_by_non_trivial_c_struct_init"]={
["note_protected_by_non_trivial_c_struct_init"]={
Line 2,414: Line 2,414:
[e]=k,
[e]=k,
[i]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[i]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[j]={{N,159,"/// 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]={{N,170,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_nontrivial_c_struct:\n        return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"}}
},
},
["note_protected_by_objc_autoreleasepool"]={
["note_protected_by_objc_autoreleasepool"]={
Line 2,426: Line 2,426:
[e]=k,
[e]=k,
[i]={Ec,1308178962,sc},
[i]={Ec,1308178962,sc},
[j]={{N,493,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAutoreleasePoolStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}
[j]={{N,550,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAutoreleasePoolStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}
},
},
["note_protected_by_objc_catch"]={
["note_protected_by_objc_catch"]={
Line 2,438: Line 2,438:
[e]=k,
[e]=k,
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[j]={{N,456,"/// 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]={{N,504,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the catch to the finally or try is not valid.\n    for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}}
},
},
["note_protected_by_objc_fast_enumeration"]={
["note_protected_by_objc_fast_enumeration"]={
Line 2,450: Line 2,450:
[e]=k,
[e]=k,
[i]={"3901377c2297",1492624448,"[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops."},
[i]={"3901377c2297",1492624448,"[Sema][ObjC] Disallow jumping into ObjC fast enumeration loops."},
[j]={{N,295,"/// 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]={{N,322,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCForCollectionStmtClass: {\n    unsigned Diag = diag::note_protected_by_objc_fast_enumeration;"}}
},
},
["note_protected_by_objc_finally"]={
["note_protected_by_objc_finally"]={
Line 2,462: Line 2,462:
[e]=k,
[e]=k,
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[i]={"5c926f366019",1240090132,"reject invalid jumps among pieces of @try blocks.  This seems to work"},
[j]={{N,464,"/// 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]={{N,515,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the finally to the try or catch is not valid.\n    if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}}
},
},
["note_protected_by_objc_strong_init"]={
["note_protected_by_objc_strong_init"]={
Line 2,474: Line 2,474:
[e]=k,
[e]=k,
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[j]={{N,153,"/// 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]={{N,162,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_strong_lifetime:\n        return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}}
},
},
["note_protected_by_objc_synchronized"]={
["note_protected_by_objc_synchronized"]={
Line 2,486: Line 2,486:
[e]=k,
[e]=k,
[i]={"c70dd5647701",1240293660,"add support for goto checking and @synchronized blocks,"},
[i]={"c70dd5647701",1240293660,"add support for goto checking and @synchronized blocks,"},
[j]={{N,482,"/// 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]={{N,536,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtSynchronizedStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}}
},
},
["note_protected_by_objc_try"]={
["note_protected_by_objc_try"]={
Line 2,498: Line 2,498:
[e]=k,
[e]=k,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,448,"/// 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]={{N,493,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Recursively walk the AST for the @try part.\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}}
},
},
["note_protected_by_objc_weak_init"]={
["note_protected_by_objc_weak_init"]={
Line 2,510: Line 2,510:
[e]=k,
[e]=k,
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[i]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[j]={{N,156,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_weak_lifetime:\n        return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}
[j]={{N,166,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_weak_lifetime:\n        return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}
},
},
["note_protected_by_seh_except"]={
["note_protected_by_seh_except"]={
Line 2,522: Line 2,522:
[e]=k,
[e]=k,
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[j]={{N,405,"/// 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]={{N,443,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}}
},
},
["note_protected_by_seh_finally"]={
["note_protected_by_seh_finally"]={
Line 2,534: Line 2,534:
[e]=k,
[e]=k,
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[j]={{N,409,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n    } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"},{N,854,"/// 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]={{N,450,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n    } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"},{N,940,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_protected_by_seh_finally) {"}}
},
},
["note_protected_by_seh_try"]={
["note_protected_by_seh_try"]={
Line 2,546: Line 2,546:
[e]=k,
[e]=k,
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[i]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[j]={{N,397,"/// 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]={{N,432,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}}
},
},
["note_protected_by_variable_init"]={
["note_protected_by_variable_init"]={
Line 2,558: Line 2,558:
[e]=k,
[e]=k,
[i]={"30d0cfda354e",1267477193,"Implement jump checking for initialized c++ variables, implementing"},
[i]={"30d0cfda354e",1267477193,"Implement jump checking for initialized c++ variables, implementing"},
[j]={{N,186,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      InDiag = diag::note_protected_by_variable_init;"},{N,774,"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]={{N,198,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      InDiag = diag::note_protected_by_variable_init;"},{N,846,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}}
},
},
["note_protected_by_variable_non_pod"]={
["note_protected_by_variable_non_pod"]={
Line 2,570: Line 2,570:
[e]=k,
[e]=k,
[i]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[i]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[j]={{N,197,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n          else if (!Ctor->getParent()->isPOD())\n            InDiag = diag::note_protected_by_variable_non_pod;"},{N,778,"static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) { return S.getLangOpts().CPlusPlus11 && InDiagNote == diag::note_protected_by_variable_non_pod; }"}}
[j]={{N,210,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n          else if (!Ctor->getParent()->isPOD())\n            InDiag = diag::note_protected_by_variable_non_pod;"},{N,854,"static bool IsCXX98CompatWarning(Sema &S, unsigned InDiagNote) { return S.getLangOpts().CPlusPlus11 && InDiagNote == diag::note_protected_by_variable_non_pod; }"}}
},
},
["note_protected_by_variable_nontriv_destructor"]={
["note_protected_by_variable_nontriv_destructor"]={
Line 2,582: Line 2,582:
[e]=k,
[e]=k,
[i]={"1778b030c0dc",1308108214,"Properly implement C++0x [stmt.dcl]p3, which requires a scope to be"},
[i]={"1778b030c0dc",1308108214,"Properly implement C++0x [stmt.dcl]p3, which requires a scope to be"},
[j]={{N,195,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n            InDiag = diag::note_protected_by_variable_nontriv_destructor;"},{N,774,"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]={{N,208,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (S.Context.getLangOpts().CPlusPlus && VD->hasLocalStorage() && Init) {\n      // For a variable of (array of) class type declared without an\n      // initializer, we will have call-style initialization and the initializer\n      // will be the CXXConstructExpr with no intervening nodes.\n      if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n        if (Ctor->isTrivial() && Ctor->isDefaultConstructor() && VD->getInitStyle() == VarDecl::CallInit) {\n          if (OutDiag)\n            InDiag = diag::note_protected_by_variable_nontriv_destructor;"},{N,847,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"}}
},
},
["note_protected_by_vla"]={
["note_protected_by_vla"]={
Line 2,594: Line 2,594:
[e]=k,
[e]=k,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,142,"/// 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]={{N,149,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->getType()->isVariablyModifiedType())\n      InDiag = diag::note_protected_by_vla;"}}
},
},
["note_protected_by_vla_type_alias"]={
["note_protected_by_vla_type_alias"]={
Line 2,606: Line 2,606:
[e]=k,
[e]=k,
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."},
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."},
[j]={{N,209,"/// 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]={{N,224,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (TD->getUnderlyingType()->isVariablyModifiedType())\n      return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}}
},
},
["note_protected_by_vla_typedef"]={
["note_protected_by_vla_typedef"]={
Line 2,618: Line 2,618:
[e]=k,
[e]=k,
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[i]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,"},
[j]={{N,209,"/// 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]={{N,223,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (TD->getUnderlyingType()->isVariablyModifiedType())\n      return ScopePair(isa<TypedefDecl>(TD) ? diag::note_protected_by_vla_typedef : diag::note_protected_by_vla_type_alias, 0);"}}
},
},
["note_protocol_decl"]={
["note_protocol_decl"]={
Line 2,630: Line 2,630:
[e]=k,
[e]=k,
[i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method"},
[i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method"},
[j]={{u,5391,"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]={{u,6133,"static void handleObjCRequiresSuperAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (const auto *PDecl = dyn_cast_or_null<ObjCProtocolDecl>(DC)) {\n    S.Diag(PDecl->getLocation(), diag::note_protocol_decl);"}}
},
},
["note_protocol_decl_undefined"]={
["note_protocol_decl_undefined"]={
Line 2,642: Line 2,642:
[e]=k,
[e]=k,
[i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols"},
[i]={"bf678e82e12d",1394557851,"Objective-C. Diagose use of undefined protocols"},
[j]={{B,1077,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n  for (const IdentifierLocPair &Pair : ProtocolId) {\n    if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n      Diag(UndefinedProtocol->getLocation(), diag::note_protocol_decl_undefined) << UndefinedProtocol;"},{B,1182,"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]={{B,1352,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n  for (const IdentifierLocPair &Pair : ProtocolId) {\n    if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n      Diag(UndefinedProtocol->getLocation(), diag::note_protocol_decl_undefined) << UndefinedProtocol;"},{B,1489,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n  auto resolvedAsProtocols = [&] {\n    for (unsigned i = 0, n = protocols.size(); i != n; ++i) {\n      if (warnOnIncompleteProtocols && NestedProtocolHasNoDefinition(proto, forwardDecl)) {\n        Diag(forwardDecl->getLocation(), diag::note_protocol_decl_undefined) << forwardDecl;"}}
},
},
["note_protocol_method"]={
["note_protocol_method"]={
Line 2,654: Line 2,654:
[e]=k,
[e]=k,
[i]={"d2a713e41bd3",1443648462,"Don\'t inherit availability information when implementing a protocol requirement."},
[i]={"d2a713e41bd3",1443648462,"Don\'t inherit availability information when implementing a protocol requirement."},
[j]={{u,2272,"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]={{u,2548,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  if (D->hasAttrs()) {\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          if (AMK == AMK_Override)\n          else\n            Diag(CI.getLoc(), diag::note_protocol_method);"}}
},
},
["note_protocol_property_declare"]={
["note_protocol_property_declare"]={
Line 2,666: Line 2,666:
[e]=k,
[e]=k,
[i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple"},
[i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple"},
[j]={{E,808,"/// 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]={{E,990,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  for (const auto &Note : Mismatches) {\n    auto Diag = S.Diag(Note.Prop->getLocation(), diag::note_protocol_property_declare) << Note.Kind;"}}
},
},
["note_pure_qualified_call_kext"]={
["note_pure_qualified_call_kext"]={
Line 2,678: Line 2,678:
[e]=k,
[e]=k,
[i]={"ccb373852758",1436916970,"[Sema] Don\'t emit \"pure virtual\" warning for fully qualified calls."},
[i]={"ccb373852758",1436916970,"[Sema] Don\'t emit \"pure virtual\" warning for fully qualified calls."},
[j]={{D,12597,"/// 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]={{D,14926,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      if (getLangOpts().AppleKext)\n        Diag(MemExpr->getBeginLoc(), diag::note_pure_qualified_call_kext) << MD->getParent() << MD->getDeclName();"}}
},
},
["note_pure_virtual_function"]={
["note_pure_virtual_function"]={
Line 2,690: Line 2,690:
[e]=k,
[e]=k,
[i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."},
[i]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate."},
[j]={{y,5081,"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]={{y,5985,"void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {\n  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n    for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n      Diag(SO->second.front().Method->getLocation(), diag::note_pure_virtual_function) << SO->second.front().Method->getDeclName() << RD->getDeclName();"}}
},
},
["note_raii_guard_add_name"]={
["note_raii_guard_add_name"]={
Line 2,702: Line 2,702:
[e]=k,
[e]=k,
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[j]={{hb,3530,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  if (!RD || !RD->hasDefinition() || RD->hasNonTrivialDestructor())\n    S.Diag(Paren.Loc, diag::note_raii_guard_add_name) << FixItHint::CreateInsertion(Paren.Loc, \" varname\") << T << D.getIdentifier();"}}
[j]={{hb,4026,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  if (!RD || !RD->hasDefinition() || RD->hasNonTrivialDestructor())\n    S.Diag(Paren.Loc, diag::note_raii_guard_add_name) << FixItHint::CreateInsertion(Paren.Loc, \" varname\") << T << D.getIdentifier();"}}
},
},
["note_receiver_class_declared"]={
["note_receiver_class_declared"]={
Line 2,714: Line 2,714:
[e]=k,
[e]=k,
[i]={"773df4a11fab",1368573857,"Objective-C [diagnostics] [QOI], when method is not"},
[i]={"773df4a11fab",1368573857,"Objective-C [diagnostics] [QOI], when method is not"},
[j]={{nb,1434,"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]={{nb,1771,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  if (!Method) {\n    if (!getLangOpts().DebuggerSupport) {\n      // Find the class to which we are sending this message.\n      if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n        if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n          Diag(ThisClass->getLocation(), diag::note_receiver_class_declared);"}}
},
},
["note_receiver_expr_here"]={
["note_receiver_expr_here"]={
Line 2,726: Line 2,726:
[e]=k,
[e]=k,
[i]={"19c2e2fab2e9",1408491557,"Objective-C [qoi]. Provide fix-it hint when sending"},
[i]={"19c2e2fab2e9",1408491557,"Objective-C [qoi]. Provide fix-it hint when sending"},
[j]={{nb,1437,"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]={{nb,1774,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  if (!Method) {\n    if (!getLangOpts().DebuggerSupport) {\n      // Find the class to which we are sending this message.\n      if (auto *ObjPT = ReceiverType->getAs<ObjCObjectPointerType>()) {\n        if (ObjCInterfaceDecl *ThisClass = ObjPT->getInterfaceDecl()) {\n          if (!RecRange.isInvalid())\n            if (ThisClass->lookupClassMethod(Sel))\n              Diag(RecRange.getBegin(), diag::note_receiver_expr_here) << FixItHint::CreateReplacement(RecRange, ThisClass->getNameAsString());"}}
},
},
["note_receiver_is_id"]={
["note_receiver_is_id"]={
Line 2,738: Line 2,738:
[e]=k,
[e]=k,
[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and"},
[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and"},
[j]={{nb,2466,"/// 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]={{nb,3074,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {\n          Diag(Receiver ? Receiver->getBeginLoc() : SuperLoc, diag::note_receiver_is_id);"}}
},
},
["note_recursive_default_argument_used_here"]={
["note_recursive_default_argument_used_here"]={
Line 2,750: Line 2,750:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,5238,"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]={{C,6032,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(CallLoc, diag::note_recursive_default_argument_used_here);"}}
},
},
["note_redefinition_include_same_file"]={
["note_redefinition_include_same_file"]={
Line 2,762: Line 2,762:
[e]=Rb,
[e]=Rb,
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[j]={{v,4281,"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]={{v,4786,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n      } else {\n        Diag(IncLoc, diag::note_redefinition_include_same_file) << HdrFilename.str();"}}
},
},
["note_redefinition_modules_same_file"]={
["note_redefinition_modules_same_file"]={
Line 2,774: Line 2,774:
[e]=Rb,
[e]=Rb,
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[j]={{v,4277,"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]={{v,4780,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n        Diag(IncLoc, diag::note_redefinition_modules_same_file) << HdrFilename.str() << Mod->getFullModuleName();"}}
},
},
["note_ref_or_ptr_member_declared_here"]={
["note_ref_or_ptr_member_declared_here"]={
Line 2,786: Line 2,786:
[e]=k,
[e]=k,
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[j]={{U,6966,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          if (IsGslPtrInitWithGslTempOwner) {\n            Diag(ExtendingDecl->getLocation(), diag::note_ref_or_ptr_member_declared_here) << true;"},{U,7009,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here) << (unsigned)IsPointer;"}}
[j]={{U,8174,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          if (IsGslPtrInitWithGslTempOwner) {\n            Diag(ExtendingDecl->getLocation(), diag::note_ref_or_ptr_member_declared_here) << true;"},{U,8229,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here) << (unsigned)IsPointer;"}}
},
},
["note_refconst_member_not_initialized"]={
["note_refconst_member_not_initialized"]={
Line 2,798: Line 2,798:
[e]=k,
[e]=k,
[i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors"},
[i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors"},
[j]={{y,5924,"/// 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]={{y,6933,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // If this is not an aggregate type and has no user-declared constructor,\n  // complain about any non-static data members of reference or const scalar\n  // type, since they will never get initializers.\n  if (!Record->isInvalidDecl() && !Record->isDependentType() && !Record->isAggregate() && !Record->hasUserDeclaredConstructor() && !Record->isLambda()) {\n    for (const auto *F : Record->fields()) {\n      if (F->getType()->isReferenceType() || (F->getType().isConstQualified() && F->getType()->isScalarType())) {\n        Diag(F->getLocation(), diag::note_refconst_member_not_initialized) << F->getType()->isReferenceType() << F->getDeclName();"}}
},
},
["note_reference_is_return_value"]={
["note_reference_is_return_value"]={
Line 2,810: Line 2,810:
[e]=k,
[e]=k,
[i]={"c1888e0c6e62",1403997937,"Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to"},
[i]={"c1888e0c6e62",1403997937,"Extend -Wtautological-undefined-compare and -Wundefined-bool-conversion to"},
[j]={{F,13711,"// Helper function for Sema::DiagnoseAlwaysNonNullPointer.\n// Returns true when emitting a warning about taking the address of a reference.\nstatic bool CheckForReference(Sema &SemaRef, const Expr *E, const PartialDiagnostic &PD) {\n  // If possible, point to location of function.\n  if (FD) {\n    SemaRef.Diag(FD->getLocation(), diag::note_reference_is_return_value) << FD;"}}
[j]={{F,15412,"// Helper function for Sema::DiagnoseAlwaysNonNullPointer.\n// Returns true when emitting a warning about taking the address of a reference.\nstatic bool CheckForReference(Sema &SemaRef, const Expr *E, const PartialDiagnostic &PD) {\n  // If possible, point to location of function.\n  if (FD) {\n    SemaRef.Diag(FD->getLocation(), diag::note_reference_is_return_value) << FD;"}}
},
},
["note_referenced_type_template"]={
["note_referenced_type_template"]={
Line 2,822: Line 2,822:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{x,4181,"// 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]={{x,5045,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n    Diag(Temp->getLocation(), diag::note_referenced_type_template) << 0;"}}
},
},
["note_reinterpret_updowncast_use_static"]={
["note_reinterpret_updowncast_use_static"]={
Line 2,834: Line 2,834:
[e]=k,
[e]=k,
[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are"},
[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are"},
[j]={{mb,906,"/// 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]={{mb,1076,"/// Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is not used as upcast\n/// or downcast between respective pointers or references.\nstatic void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr, QualType DestType, SourceRange OpRange) {\n  Self.Diag(BeginLoc, diag::note_reinterpret_updowncast_use_static) << int(ReinterpretKind) << FixItHint::CreateReplacement(BeginLoc, \"static_cast\");"}}
},
},
["note_related_result_type_explicit"]={
["note_related_result_type_explicit"]={
Line 2,846: Line 2,846:
[e]="Related Result Type Issue",
[e]="Related Result Type Issue",
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[j]={{nb,1354,"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]={{nb,1672,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n  // Look for a method overridden by this method which explicitly uses\n  // \'instancetype\'.\n  if (const ObjCMethodDecl *overridden = findExplicitInstancetypeDeclarer(MD, Context.getObjCInstanceType())) {\n    Diag(loc, diag::note_related_result_type_explicit) << /*current method*/ 1 << range;"}}
},
},
["note_related_result_type_family"]={
["note_related_result_type_family"]={
Line 2,858: Line 2,858:
[e]="Related Result Type Issue",
[e]="Related Result Type Issue",
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[i]={"5ec7e7def3a1",1363676665,"Add a clarifying note when a return statement is rejected because"},
[j]={{B,155,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n      Diag(Overridden->getLocation(), diag::note_related_result_type_family) << /*overridden method*/ 0 << Family;"},{nb,1361,"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]={{B,177,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n      Diag(Overridden->getLocation(), diag::note_related_result_type_family) << /*overridden method*/ 0 << Family;"},{nb,1680,"void Sema::EmitRelatedResultTypeNoteForReturn(QualType destType) {\n  // Otherwise, if we have an interesting method family, note that.\n  // This should always trigger if the above didn\'t.\n  if (ObjCMethodFamily family = MD->getMethodFamily())\n    Diag(MD->getLocation(), diag::note_related_result_type_family) << /*current method*/ 1 << family;"}}
},
},
["note_related_result_type_inferred"]={
["note_related_result_type_inferred"]={
Line 2,870: Line 2,870:
[e]="Related Result Type Issue",
[e]="Related Result Type Issue",
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[j]={{nb,1383,"void Sema::EmitRelatedResultTypeNote(const Expr *E) {\n  Diag(Method->getLocation(), diag::note_related_result_type_inferred) << Method->isInstanceMethod() << Method->getSelector() << MsgSend->getType();"}}
[j]={{nb,1706,"void Sema::EmitRelatedResultTypeNote(const Expr *E) {\n  Diag(Method->getLocation(), diag::note_related_result_type_inferred) << Method->isInstanceMethod() << Method->getSelector() << MsgSend->getType();"}}
},
},
["note_related_result_type_overridden"]={
["note_related_result_type_overridden"]={
Line 2,882: Line 2,882:
[e]="Related Result Type Issue",
[e]="Related Result Type Issue",
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."},
[j]={{B,157,"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]={{B,182,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    if (ObjCMethodFamily Family = Overridden->getMethodFamily())\n    else\n      Diag(Overridden->getLocation(), diag::note_related_result_type_overridden);"}}
},
},
["note_remove_abs"]={
["note_remove_abs"]={
Line 2,894: Line 2,894:
[e]=k,
[e]=k,
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[j]={{F,10788,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // Unsigned types cannot be negative.  Suggest removing the absolute value\n  // function call.\n  if (ArgType->isUnsignedIntegerType()) {\n    Diag(Call->getExprLoc(), diag::note_remove_abs) << FunctionName << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange());"}}
[j]={{F,12026,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // Unsigned types cannot be negative.  Suggest removing the absolute value\n  // function call.\n  if (ArgType->isUnsignedIntegerType()) {\n    Diag(Call->getExprLoc(), diag::note_remove_abs) << FunctionName << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange());"}}
},
},
["note_remove_max_call"]={
["note_remove_max_call"]={
Line 2,906: Line 2,906:
[e]=k,
[e]=k,
[i]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max"},
[i]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max"},
[j]={{F,10909,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n  Diag(Call->getExprLoc(), diag::note_remove_max_call) << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange()) << FixItHint::CreateRemoval(RemovalRange);"}}
[j]={{F,12144,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n  Diag(Call->getExprLoc(), diag::note_remove_max_call) << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange()) << FixItHint::CreateRemoval(RemovalRange);"}}
},
},
["note_remove_move"]={
["note_remove_move"]={
Line 2,918: Line 2,918:
[e]=k,
[e]=k,
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."},
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."},
[j]={{U,7194,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n  S.Diag(CE->getBeginLoc(), diag::note_remove_move) << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) << FixItHint::CreateRemoval(SourceRange(RParen, RParen));"}}
[j]={{U,8439,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n  S.Diag(CE->getBeginLoc(), diag::note_remove_move) << FixItHint::CreateRemoval(SourceRange(CallBegin, LParen)) << FixItHint::CreateRemoval(SourceRange(RParen, RParen));"}}
},
},
["note_remove_parens_for_variable_declaration"]={
["note_remove_parens_for_variable_declaration"]={
Line 2,930: Line 2,930:
[e]=k,
[e]=k,
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[j]={{hb,3534,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  S.Diag(Paren.Loc, diag::note_remove_parens_for_variable_declaration) << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}}
[j]={{hb,4034,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  S.Diag(Paren.Loc, diag::note_remove_parens_for_variable_declaration) << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}}
},
},
["note_replace_abs_function"]={
["note_replace_abs_function"]={
Line 2,942: Line 2,942:
[e]=k,
[e]=k,
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[j]={{F,10748,"// If the replacement is valid, emit a note with replacement function.\n// Additionally, suggest including the proper header if not already included.\nstatic void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) {\n  S.Diag(Loc, diag::note_replace_abs_function) << FunctionName << FixItHint::CreateReplacement(Range, FunctionName);"}}
[j]={{F,11980,"// If the replacement is valid, emit a note with replacement function.\n// Additionally, suggest including the proper header if not already included.\nstatic void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) {\n  S.Diag(Loc, diag::note_replace_abs_function) << FunctionName << FixItHint::CreateReplacement(Range, FunctionName);"}}
},
},
["note_replace_equals_default_to_delete"]={
["note_replace_equals_default_to_delete"]={
Line 2,954: Line 2,954:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{y,6643,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        if (ShouldDeleteForTypeMismatch) {\n        } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr,\n          Diag(DefaultLoc, diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(DefaultLoc, \"delete\");"},{y,7594,"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]={{y,7778,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        if (ShouldDeleteForTypeMismatch) {\n        } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr,\n          Diag(DefaultLoc, diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(DefaultLoc, \"delete\");"},{y,8919,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // If we want to delete the function, then do so; there\'s nothing else to\n  // check in that case.\n  if (Info.Deleted) {\n    if (!inTemplateInstantiation() && !FD->isImplicit()) {\n      if (FD->getDefaultLoc().isValid())\n        Diag(FD->getDefaultLoc(), diag::note_replace_equals_default_to_delete) << FixItHint::CreateReplacement(FD->getDefaultLoc(), \"delete\");"}}
},
},
["note_rewriting_operator_as_spaceship"]={
["note_rewriting_operator_as_spaceship"]={
Line 2,966: Line 2,966:
[e]=l,
[e]=l,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{gb,675,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RewritingOperatorAsSpaceship:\n      Diags.Report(Active->Entity->getLocation(), diag::note_rewriting_operator_as_spaceship);"}}
[j]={{gb,992,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RewritingOperatorAsSpaceship:\n      Diags.Report(Active->Entity->getLocation(), diag::note_rewriting_operator_as_spaceship);"}}
},
},
["note_riscv_repeated_interrupt_attribute"]={
["note_riscv_repeated_interrupt_attribute"]={
Line 2,978: Line 2,978:
[e]=k,
[e]=k,
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"},
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"},
[j]={{u,6834,"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]={{u,7754,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn about repeated attributes.\n  if (const auto *A = D->getAttr<RISCVInterruptAttr>()) {\n    S.Diag(A->getLocation(), diag::note_riscv_repeated_interrupt_attribute);"}}
},
},
["note_safe_buffer_usage_suggestions_disabled"]={
["note_safe_buffer_usage_suggestions_disabled"]={
Line 2,990: Line 2,990:
[e]=l,
[e]=l,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{I,1895,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n    } else {\n      if (SuggestSuggestions) {\n        S.Diag(Loc, diag::note_safe_buffer_usage_suggestions_disabled);"}}
[j]={{I,2217,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n    } else {\n      if (SuggestSuggestions) {\n        S.Diag(Loc, diag::note_safe_buffer_usage_suggestions_disabled);"}}
},
},
["note_second_module_difference"]={
["note_second_module_difference"]={
Line 3,002: Line 3,002:
[e]=l,
[e]=l,
[i]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted."},
[i]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted."},
[j]={{"clang/lib/AST/ODRDiagsEmitter.cpp",506,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  if (DR.SecondDecl) {\n    Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference) << DR.SecondDecl->getSourceRange();"}}
[j]={{"clang/lib/AST/ODRDiagsEmitter.cpp",666,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  if (DR.SecondDecl) {\n    Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference) << DR.SecondDecl->getSourceRange();"}}
},
},
["note_sentinel_here"]={
["note_sentinel_here"]={
Line 3,014: Line 3,014:
[e]=k,
[e]=k,
[i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"},
[i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"},
[j]={{C,431,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // If there aren\'t enough arguments for all the formal parameters,\n  // the sentinel, and the args after the sentinel, complain.\n  if (Args.size() < numFormalParams + numArgsAfterSentinel + 1) {\n    Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"},{C,463,"/// 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]={{C,474,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // If there aren\'t enough arguments for all the formal parameters,\n  // the sentinel, and the args after the sentinel, complain.\n  if (Args.size() < numFormalParams + numArgsAfterSentinel + 1) {\n    Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"},{C,505,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  Diag(D->getLocation(), diag::note_sentinel_here) << int(calleeType);"}}
},
},
["note_shadow_field"]={
["note_shadow_field"]={
Line 3,026: Line 3,026:
[e]=l,
[e]=l,
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"},
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"},
[j]={{y,2884,"// 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]={{y,3393,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n  for (const auto &P : Paths) {\n    if (AS_none != CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {\n      Diag(BaseField->getLocation(), diag::note_shadow_field);"}}
},
},
["note_silence_aligned_allocation_unavailable"]={
["note_silence_aligned_allocation_unavailable"]={
Line 3,038: Line 3,038:
[e]=k,
[e]=k,
[i]={"751381db5a39",1534866864,"[clang][NFC] Fix typo in the name of a note"},
[i]={"751381db5a39",1534866864,"[clang][NFC] Fix typo in the name of a note"},
[j]={{Ub,1721,"// Emit a diagnostic if an aligned allocation/deallocation function that is not\n// implemented in the standard library is selected.\nvoid Sema::diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, SourceLocation Loc) {\n  if (isUnavailableAlignedAllocationFunction(FD)) {\n    Diag(Loc, diag::note_silence_aligned_allocation_unavailable);"}}
[j]={{Ub,1971,"// Emit a diagnostic if an aligned allocation/deallocation function that is not\n// implemented in the standard library is selected.\nvoid Sema::diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, SourceLocation Loc) {\n  if (isUnavailableAlignedAllocationFunction(FD)) {\n    Diag(Loc, diag::note_silence_aligned_allocation_unavailable);"}}
},
},
["note_single_arg_concept_specialization_constraint_evaluated_to_false"]={
["note_single_arg_concept_specialization_constraint_evaluated_to_false"]={
Line 3,050: Line 3,050:
[e]=k,
[e]=k,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",879,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n  } else if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(SubstExpr)) {\n    if (CSE->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n      S.Diag(CSE->getSourceRange().getBegin(), diag::note_single_arg_concept_specialization_constraint_evaluated_to_false) << (int)First << CSE->getTemplateArgsAsWritten()->arguments()[0].getArgument() << CSE->getNamedConcept();"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",1102,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n  } else if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(SubstExpr)) {\n    if (CSE->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n      S.Diag(CSE->getSourceRange().getBegin(), diag::note_single_arg_concept_specialization_constraint_evaluated_to_false) << (int)First << CSE->getTemplateArgsAsWritten()->arguments()[0].getArgument() << CSE->getNamedConcept();"}}
},
},
["note_specialized_decl"]={
["note_specialized_decl"]={
Line 3,062: Line 3,062:
[e]=k,
[e]=k,
[i]={"5c0405d48454",1254954940,"Type checking for specializations of member functions of class"},
[i]={"5c0405d48454",1254954940,"Type checking for specializations of member functions of class"},
[j]={{x,8001,"/// 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]={{x,9717,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Instantiation->getLocation(), diag::note_specialized_decl);"}}
},
},
["note_specialized_entity"]={
["note_specialized_entity"]={
Line 3,074: Line 3,074:
[e]=k,
[e]=k,
[i]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[i]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[j]={{x,6904,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"},{x,6935,"/// 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]={{x,8420,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"},{x,8456,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);"}}
},
},
["note_static_for_internal_linkage"]={
["note_static_for_internal_linkage"]={
Line 3,086: Line 3,086:
[e]=k,
[e]=k,
[i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}"},
[i]={"df195d8aedff",1560898628,"Suggestions to fix -Wmissing-{prototypes,variable-declarations}"},
[j]={{v,12296,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Warn about externally-visible variables being defined without a\n  // prior declaration.  We only want to do this for global\n  // declarations, but we also specifically need to avoid doing it for\n  // class members because the linkage of an anonymous class can\n  // change if it\'s later given a typedef name.\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {\n    if (!prev) {\n      Diag(var->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* variable */ 0;"},{v,13725,"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]={{v,14079,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Warn about externally-visible variables being defined without a\n  // prior declaration.  We only want to do this for global\n  // declarations, but we also specifically need to avoid doing it for\n  // class members because the linkage of an anonymous class can\n  // change if it\'s later given a typedef name.\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {\n    if (!prev) {\n      Diag(var->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* variable */ 0;"},{v,15717,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        if (PossiblePrototype) {\n        } else {\n          Diag(FD->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage) << /* function */ 1 << (FD->getStorageClass() == SC_None ? FixItHint::CreateInsertion(findBeginLoc(), \"static \") : FixItHint{});"}}
},
},
["note_string_plus_scalar_silence"]={
["note_string_plus_scalar_silence"]={
Line 3,098: Line 3,098:
[e]=k,
[e]=k,
[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings."},
[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings."},
[j]={{C,10048,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{C,10050,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n  } else\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"},{C,10089,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{C,10091,"/// 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]={{C,11642,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{C,11677,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for \"str\" + int, not for int + \"str\".\n  if (IndexExpr == RHSExpr) {\n  } else\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"},{C,11692,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence) << FixItHint::CreateInsertion(LHSExpr->getBeginLoc(), \"&\") << FixItHint::CreateReplacement(SourceRange(OpLoc), \"[\") << FixItHint::CreateInsertion(EndLoc, \"]\");"},{C,11701,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Only print a fixit for str + char, not for char + str.\n  if (isa<CharacterLiteral>(RHSExpr->IgnoreImpCasts())) {\n  } else {\n    Self.Diag(OpLoc, diag::note_string_plus_scalar_silence);"}}
},
},
["note_strlcpycat_wrong_size"]={
["note_strlcpycat_wrong_size"]={
Line 3,110: Line 3,110:
[e]=k,
[e]=k,
[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i..."},
[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i..."},
[j]={{F,11373,"// Warn if the user has made the \'size\' argument to strlcpy or strlcat\n// be the size of the source, instead of the destination.\nvoid Sema::CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName) {\n  Diag(OriginalSizeArg->getBeginLoc(), diag::note_strlcpycat_wrong_size) << FixItHint::CreateReplacement(OriginalSizeArg->getSourceRange(), OS.str());"}}
[j]={{F,12712,"// Warn if the user has made the \'size\' argument to strlcpy or strlcat\n// be the size of the source, instead of the destination.\nvoid Sema::CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName) {\n  Diag(OriginalSizeArg->getBeginLoc(), diag::note_strlcpycat_wrong_size) << FixItHint::CreateReplacement(OriginalSizeArg->getSourceRange(), OS.str());"}}
},
},
["note_strncat_wrong_size"]={
["note_strncat_wrong_size"]={
Line 3,122: Line 3,122:
[e]=k,
[e]=k,
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"},
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"},
[j]={{F,11470,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//  strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  Diag(SL, diag::note_strncat_wrong_size) << FixItHint::CreateReplacement(SR, OS.str());"}}
[j]={{F,12816,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//  strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  Diag(SL, diag::note_strncat_wrong_size) << FixItHint::CreateReplacement(SR, OS.str());"}}
},
},
["note_struct_class_suggestion"]={
["note_struct_class_suggestion"]={
Line 3,134: Line 3,134:
[e]=k,
[e]=k,
[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."},
[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."},
[j]={{v,14543,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (isDefinition) {\n    for (const TagDecl *I : Previous->redecls()) {\n      if (I->getTagKind() != NewTag) {\n        Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(NewTag) << FixItHint::CreateReplacement(I->getInnerLocStart(), TypeWithKeyword::getTagTypeKindName(NewTag));"},{v,14562,"/// 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]={{v,16656,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (isDefinition) {\n    for (const TagDecl *I : Previous->redecls()) {\n      if (I->getTagKind() != NewTag) {\n        Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(NewTag) << FixItHint::CreateReplacement(I->getInnerLocStart(), TypeWithKeyword::getTagTypeKindName(NewTag));"},{v,16680,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  if (Redecl->getTagKind() != NewTag) {\n    // If there is a previous definition, suggest a fix-it.\n    if (PrevDef) {\n      Diag(NewTagLoc, diag::note_struct_class_suggestion) << getRedeclDiagFromTagKind(Redecl->getTagKind()) << FixItHint::CreateReplacement(SourceRange(NewTagLoc), TypeWithKeyword::getTagTypeKindName(Redecl->getTagKind()));"}}
},
},
["note_substituted_constraint_expr_is_ill_formed"]={
["note_substituted_constraint_expr_is_ill_formed"]={
Line 3,146: Line 3,146:
[e]=k,
[e]=k,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",905,"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;"}}
},
},
["note_suggest_disabling_all_checkers"]={
["note_suggest_disabling_all_checkers"]={
Line 3,158: Line 3,158:
[e]=l,
[e]=l,
[i]={"d5478fdd8f05",1409342498,"Add an option to silence all analyzer warnings."},
[i]={"d5478fdd8f05",1409342498,"Add an option to silence all analyzer warnings."},
[j]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",154,"#endif\n  // Parse \'-analyzer-checker\' and \'-analyzer-disable-checker\' options from the\n  // command line.\n  for (const std::pair<std::string, bool> &Opt : AnOpts.CheckersAndPackages) {\n    if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n      Diags.Report(diag::note_suggest_disabling_all_checkers);"}}
[j]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",179,"#endif\n  // Parse \'-analyzer-checker\' and \'-analyzer-disable-checker\' options from the\n  // command line.\n  for (const std::pair<std::string, bool> &Opt : AnOpts.CheckersAndPackages) {\n    if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n      Diags.Report(diag::note_suggest_disabling_all_checkers);"}}
},
},
["note_suggest_parens_for_macro"]={
["note_suggest_parens_for_macro"]={
Line 3,170: Line 3,170:
[e]=G,
[e]=G,
[i]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a"},
[i]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a"},
[j]={{wc,896,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    DiagnosticBuilder DB = Diag(MacroName, diag::note_suggest_parens_for_macro);"}}
[j]={{wc,955,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    DiagnosticBuilder DB = Diag(MacroName, diag::note_suggest_parens_for_macro);"}}
},
},
["note_suppress_ctad_maybe_unsupported"]={
["note_suppress_ctad_maybe_unsupported"]={
Line 3,182: Line 3,182:
[e]=k,
[e]=k,
[i]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."},
[i]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."},
[j]={{U,9220,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // Warn if CTAD was used on a type that does not have any user-defined\n  // deduction guides.\n  if (!FoundDeductionGuide) {\n    Diag(Template->getLocation(), diag::note_suppress_ctad_maybe_unsupported);"}}
[j]={{U,10919,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // Warn if CTAD was used on a type that does not have any user-defined\n  // deduction guides.\n  if (!FoundDeductionGuide) {\n    Diag(Template->getLocation(), diag::note_suppress_ctad_maybe_unsupported);"}}
},
},
["note_suppressed_class_declare"]={
["note_suppressed_class_declare"]={
Line 3,194: Line 3,194:
[e]=k,
[e]=k,
[i]={"783ffde6d3f0",1325718973,"objc: When issuing warning for missing synthesis for"},
[i]={"783ffde6d3f0",1325718973,"objc: When issuing warning for missing synthesis for"},
[j]={{E,1604,"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]={{E,2026,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    if (S.LangOpts.ObjCDefaultSynthProperties && S.LangOpts.ObjCRuntime.isNonFragile())\n      if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CDecl))\n        if (const ObjCInterfaceDecl *RID = ID->isObjCRequiresPropertyDefs())\n          S.Diag(RID->getLocation(), diag::note_suppressed_class_declare);"}}
},
},
["note_surrounding_namespace_ends_here"]={
["note_surrounding_namespace_ends_here"]={
Line 3,206: Line 3,206:
[e]=k,
[e]=k,
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[j]={{sb,1178,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(EndLoc, diag::note_surrounding_namespace_ends_here);"}}
[j]={{sb,1380,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(EndLoc, diag::note_surrounding_namespace_ends_here);"}}
},
},
["note_surrounding_namespace_starts_here"]={
["note_surrounding_namespace_starts_here"]={
Line 3,218: Line 3,218:
[e]=k,
[e]=k,
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[j]={{sb,1188,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(Back->second, diag::note_surrounding_namespace_starts_here);"}}
[j]={{sb,1,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(Back->second, diag::note_surrounding_namespace_starts_here);"}}
},
},
["note_suspicious_bzero_size_silence"]={
["note_suspicious_bzero_size_silence"]={
Line 3,230: Line 3,230:
[e]=k,
[e]=k,
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[j]={{F,11107,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n      S.Diag(DiagLoc, diag::note_suspicious_bzero_size_silence);"}}
[j]={{F,12394,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n      S.Diag(DiagLoc, diag::note_suspicious_bzero_size_silence);"}}
},
},
["note_suspicious_sizeof_memset_silence"]={
["note_suspicious_sizeof_memset_silence"]={
Line 3,242: Line 3,242:
[e]=k,
[e]=k,
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"},
[j]={{F,11110,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n    } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n      S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 0;"},{F,11121,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // If the second argument to a memset is a sizeof expression and the third\n  // isn\'t, this is also likely an error. This should catch\n  // \'memset(buf, sizeof(buf), 0xff)\'.\n  if (BId == Builtin::BImemset && doesExprLikelyComputeSize(Call->getArg(1)) && !doesExprLikelyComputeSize(Call->getArg(2))) {\n    S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 1;"}}
[j]={{F,12397,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n    } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n      S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 0;"},{F,12410,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // If the second argument to a memset is a sizeof expression and the third\n  // isn\'t, this is also likely an error. This should catch\n  // \'memset(buf, sizeof(buf), 0xff)\'.\n  if (BId == Builtin::BImemset && doesExprLikelyComputeSize(Call->getArg(1)) && !doesExprLikelyComputeSize(Call->getArg(2))) {\n    S.Diag(DiagLoc, diag::note_suspicious_sizeof_memset_silence) << 1;"}}
},
},
["note_switch_conversion"]={
["note_switch_conversion"]={
Line 3,254: Line 3,254:
[e]=k,
[e]=k,
[i]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[i]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[j]={{O,900,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{O,904,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}}
[j]={{O,1056,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{O,1067,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_switch_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}}
},
},
["note_tail_call_required"]={
["note_tail_call_required"]={
Line 3,266: Line 3,266:
[e]=k,
[e]=k,
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[j]={{O,617,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,669,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,700,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,716,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,767,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"}}
[j]={{O,687,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,745,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,781,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,801,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"},{O,859,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    Diag(MTA.getLocation(), diag::note_tail_call_required) << &MTA;"}}
},
},
["note_template_arg_internal_object"]={
["note_template_arg_internal_object"]={
Line 3,278: Line 3,278:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,5630,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"},{x,5633,"/// 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]={{x,6875,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"},{x,6880,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object) << !Func;"}}
},
},
["note_template_arg_refers_here"]={
["note_template_arg_refers_here"]={
Line 3,290: Line 3,290:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,5623,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_refers_here);"},{x,5648,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Var->getLocation(), diag::note_template_arg_refers_here);"},{x,5810,"/// 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]={{x,6864,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Entity->getLocation(), diag::note_template_arg_refers_here);"},{x,6898,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Var->getLocation(), diag::note_template_arg_refers_here);"},{x,7099,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  S.Diag(DRE->getDecl()->getLocation(), diag::note_template_arg_refers_here);"}}
},
},
["note_template_arg_refers_here_func"]={
["note_template_arg_refers_here_func"]={
Line 3,302: Line 3,302:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,6375,"/// 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]={{x,7774,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++0x [temp.arg.template]p1:\n  //  A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //  id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    Diag(Template->getLocation(), diag::note_template_arg_refers_here_func) << Template;"}}
},
},
["note_template_class_explicit_specialization_was_here"]={
["note_template_class_explicit_specialization_was_here"]={
Line 3,314: Line 3,314:
[e]=k,
[e]=k,
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[j]={{y,5672,"/// 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]={{y,6661,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  if (BaseTemplateSpec->isExplicitSpecialization()) {\n    Diag(BaseTemplateSpec->getLocation(), diag::note_template_class_explicit_specialization_was_here) << BaseTemplateSpec;"}}
},
},
["note_template_class_instantiation_here"]={
["note_template_class_instantiation_here"]={
Line 3,326: Line 3,326:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{gb,534,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        if (isa<ClassTemplateSpecializationDecl>(Record))\n          DiagID = diag::note_template_class_instantiation_here;"}}
[j]={{gb,766,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        if (isa<ClassTemplateSpecializationDecl>(Record))\n          DiagID = diag::note_template_class_instantiation_here;"}}
},
},
["note_template_class_instantiation_was_here"]={
["note_template_class_instantiation_was_here"]={
Line 3,338: Line 3,338:
[e]=k,
[e]=k,
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[j]={{y,5674,"/// 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]={{y,6665,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  if (BaseTemplateSpec->isExplicitSpecialization()) {\n  } else {\n    Diag(BaseTemplateSpec->getPointOfInstantiation(), diag::note_template_class_instantiation_was_here) << BaseTemplateSpec;"}}
},
},
["note_template_decl_here"]={
["note_template_decl_here"]={
Line 3,350: Line 3,350:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{v,5208,"/// Retrieves the declaration name from a parsed unqualified-id.\nDeclarationNameInfo Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {\n  case UnqualifiedIdKind::IK_DeductionGuideName: {\n    if (!Template || !isa<ClassTemplateDecl>(Template)) {\n      if (Template)\n        Diag(Template->getLocation(), diag::note_template_decl_here);"},{y,9656,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [temp.deduct.guide]p3:\n  //  A deduction-gide shall be declared in the same scope as the\n  //  corresponding class template.\n  if (!CurContext->getRedeclContext()->Equals(GuidedTemplateDecl->getDeclContext()->getRedeclContext())) {\n    Diag(GuidedTemplateDecl->getLocation(), diag::note_template_decl_here);"},{U,8932,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  if (!Template) {\n    if (auto *TD = TemplateName.getAsTemplateDecl())\n      Diag(TD->getLocation(), diag::note_template_decl_here);"},{x,722,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Note = diag::note_template_decl_here;"},{x,3703,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n  S.Diag(Template->getLocation(), diag::note_template_decl_here);"},{x,4087,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  if (TemplateDecl *TD = Name.getAsTemplateDecl()) {\n    Diag(TD->getLocation(), diag::note_template_decl_here) << TD->getTemplateParameters()->getSourceRange();"},{x,4873,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(TD->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,4925,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,5105,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,9151,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::Found:\n    // C++ [dcl.type.simple]p2:\n    //  A type-specifier of the form\n    //    typename[opt] nested-name-specifier[opt] template-name\n    //  is a placeholder for a deduced class type [...].\n    if (getLangOpts().CPlusPlus17) {\n      if (auto *TD = getAsTypeTemplateDecl(Result.getFoundDecl())) {\n        if (!DeducedTSTContext) {\n          Diag(TD->getLocation(), diag::note_template_decl_here);"},{hb,3279,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    if (Error != -1) {\n      if (auto *TD = TN.getAsTemplateDecl())\n        SemaRef.Diag(TD->getLocation(), diag::note_template_decl_here);"}}
[j]={{v,5863,"/// Retrieves the declaration name from a parsed unqualified-id.\nDeclarationNameInfo Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {\n  case UnqualifiedIdKind::IK_DeductionGuideName: {\n    if (!Template || !isa<ClassTemplateDecl>(Template)) {\n      if (Template)\n        Diag(Template->getLocation(), diag::note_template_decl_here);"},{y,11238,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [temp.deduct.guide]p3:\n  //  A deduction-gide shall be declared in the same scope as the\n  //  corresponding class template.\n  if (!CurContext->getRedeclContext()->Equals(GuidedTemplateDecl->getDeclContext()->getRedeclContext())) {\n    Diag(GuidedTemplateDecl->getLocation(), diag::note_template_decl_here);"},{U,10578,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  if (!Template) {\n    if (auto *TD = TemplateName.getAsTemplateDecl())\n      Diag(TD->getLocation(), diag::note_template_decl_here);"},{x,857,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Note = diag::note_template_decl_here;"},{x,4426,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n  S.Diag(Template->getLocation(), diag::note_template_decl_here);"},{x,4902,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  if (TemplateDecl *TD = Name.getAsTemplateDecl()) {\n    Diag(TD->getLocation(), diag::note_template_decl_here) << TD->getTemplateParameters()->getSourceRange();"},{x,5874,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(TD->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,5941,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,6170,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(Template->getLocation(), diag::note_template_decl_here) << Params->getSourceRange();"},{x,11135,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::Found:\n    // C++ [dcl.type.simple]p2:\n    //  A type-specifier of the form\n    //    typename[opt] nested-name-specifier[opt] template-name\n    //  is a placeholder for a deduced class type [...].\n    if (getLangOpts().CPlusPlus17) {\n      if (auto *TD = getAsTypeTemplateDecl(Result.getFoundDecl())) {\n        if (!DeducedTSTContext) {\n          Diag(TD->getLocation(), diag::note_template_decl_here);"},{hb,3739,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    if (Error != -1) {\n      if (auto *TD = TN.getAsTemplateDecl())\n        SemaRef.Diag(TD->getLocation(), diag::note_template_decl_here);"}}
},
},
["note_template_declared_here"]={
["note_template_declared_here"]={
Line 3,362: Line 3,362:
[e]=k,
[e]=k,
[i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[i]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[j]={{x,3043,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (TemplateDecl *Template = Name.getAsTemplateDecl()) {\n    Diag(Template->getLocation(), diag::note_template_declared_here) << (isa<FunctionTemplateDecl>(Template) ? 0 : isa<ClassTemplateDecl>(Template) ? 1 : isa<VarTemplateDecl>(Template) ? 2 : isa<TypeAliasTemplateDecl>(Template) ? 3 : 4) << Template->getDeclName();"},{x,3049,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (OverloadedTemplateStorage *OST = Name.getAsOverloadedTemplate()) {\n    for (OverloadedTemplateStorage::iterator I = OST->begin(), IEnd = OST->end(); I != IEnd; ++I)\n      Diag((*I)->getLocation(), diag::note_template_declared_here) << 0 << (*I)->getDeclName();"},{x,8699,"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]={{x,3620,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (TemplateDecl *Template = Name.getAsTemplateDecl()) {\n    Diag(Template->getLocation(), diag::note_template_declared_here) << (isa<FunctionTemplateDecl>(Template) ? 0 : isa<ClassTemplateDecl>(Template) ? 1 : isa<VarTemplateDecl>(Template) ? 2 : isa<TypeAliasTemplateDecl>(Template) ? 3 : 4) << Template->getDeclName();"},{x,3636,"void Sema::NoteAllFoundTemplates(TemplateName Name) {\n  if (OverloadedTemplateStorage *OST = Name.getAsOverloadedTemplate()) {\n    for (OverloadedTemplateStorage::iterator I = OST->begin(), IEnd = OST->end(); I != IEnd; ++I)\n      Diag((*I)->getLocation(), diag::note_template_declared_here) << 0 << (*I)->getDeclName();"},{x,10559,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    // Check the new variable specialization against the parsed input.\n    if (PrevTemplate && !Context.hasSameType(Prev->getType(), R)) {\n      Diag(PrevTemplate->getLocation(), diag::note_template_declared_here) << 2 << PrevTemplate->getDeclName();"}}
},
},
["note_template_default_arg_checking"]={
["note_template_default_arg_checking"]={
Line 3,374: Line 3,374:
[e]=k,
[e]=k,
[i]={"84d49a2085bb",1257976463,"Improve diagnostics when a default template argument does not match"},
[i]={"84d49a2085bb",1257976463,"Improve diagnostics when a default template argument does not match"},
[j]={{gb,628,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultTemplateArgumentChecking: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_default_arg_checking) << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[j]={{gb,917,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultTemplateArgumentChecking: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_default_arg_checking) << getTemplateArgumentBindingsText(TemplateParams, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
},
},
["note_template_enum_def_here"]={
["note_template_enum_def_here"]={
Line 3,386: Line 3,386:
[e]=k,
[e]=k,
[i]={"4b38ded66a55",1331766790,"Instantiating a class template should not instantiate the definition of any"},
[i]={"4b38ded66a55",1331766790,"Instantiating a class template should not instantiate the definition of any"},
[j]={{gb,546,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_enum_def_here) << ED << Active->InstantiationRange;"}}
[j]={{gb,787,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_enum_def_here) << ED << Active->InstantiationRange;"}}
},
},
["note_template_exception_spec_instantiation_here"]={
["note_template_exception_spec_instantiation_here"]={
Line 3,398: Line 3,398:
[e]=k,
[e]=k,
[i]={"f623c962600b",1334624280,"Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it."},
[i]={"f623c962600b",1334624280,"Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it."},
[j]={{gb,637,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExceptionSpecInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_exception_spec_instantiation_here) << cast<FunctionDecl>(Active->Entity) << Active->InstantiationRange;"}}
[j]={{gb,933,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExceptionSpecInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_exception_spec_instantiation_here) << cast<FunctionDecl>(Active->Entity) << Active->InstantiationRange;"}}
},
},
["note_template_kw_refers_to_non_template"]={
["note_template_kw_refers_to_non_template"]={
Line 3,410: Line 3,410:
[e]=k,
[e]=k,
[i]={"7981004eb7bd",1526006588,"Improve diagnostics and error recovery for template name lookup."},
[i]={"7981004eb7bd",1526006588,"Improve diagnostics and error recovery for template name lookup."},
[j]={{x,492,"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]={{x,562,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (Found.empty()) {\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n    if (ExampleLookupResult && RequiredTemplate) {\n      Diag(ExampleLookupResult->getUnderlyingDecl()->getLocation(), diag::note_template_kw_refers_to_non_template) << Found.getLookupName();"}}
},
},
["note_template_member_class_here"]={
["note_template_member_class_here"]={
Line 3,422: Line 3,422:
[e]=k,
[e]=k,
[i]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only"},
[i]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only"},
[j]={{gb,532,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        unsigned DiagID = diag::note_template_member_class_here;"}}
[j]={{gb,764,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n        unsigned DiagID = diag::note_template_member_class_here;"}}
},
},
["note_template_member_function_here"]={
["note_template_member_function_here"]={
Line 3,434: Line 3,434:
[e]=k,
[e]=k,
[i]={"8567358cc9e0",1242666117,"When instantiating the definition of a member function of a class"},
[i]={"8567358cc9e0",1242666117,"When instantiating the definition of a member function of a class"},
[j]={{gb,541,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n        if (Function->getPrimaryTemplate())\n        else\n          DiagID = diag::note_template_member_function_here;"}}
[j]={{gb,774,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n        if (Function->getPrimaryTemplate())\n        else\n          DiagID = diag::note_template_member_function_here;"}}
},
},
["note_template_nontype_parm_different_type"]={
["note_template_nontype_parm_different_type"]={
Line 3,446: Line 3,446:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,6622,"/// 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]={{x,8081,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            NextDiag = diag::note_template_nontype_parm_different_type;"}}
},
},
["note_template_nontype_parm_prev_declaration"]={
["note_template_nontype_parm_prev_declaration"]={
Line 3,458: Line 3,458:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,6625,"/// 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]={{x,8087,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          S.Diag(OldNTTP->getLocation(), diag::note_template_nontype_parm_prev_declaration) << OldNTTP->getType();"}}
},
},
["note_template_nsdmi_here"]={
["note_template_nsdmi_here"]={
Line 3,470: Line 3,470:
[e]=k,
[e]=k,
[i]={"d60b82f93eee",1416267405,"Handle use of default member initializers before end of outermost class"},
[i]={"d60b82f93eee",1416267405,"Handle use of default member initializers before end of outermost class"},
[j]={{gb,548,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_nsdmi_here) << FD << Active->InstantiationRange;"}}
[j]={{gb,792,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_nsdmi_here) << FD << Active->InstantiationRange;"}}
},
},
["note_template_param_different_kind"]={
["note_template_param_different_kind"]={
Line 3,482: Line 3,482:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,6573,"/// 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]={{x,8019,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        NextDiag = diag::note_template_param_different_kind;"}}
},
},
["note_template_param_here"]={
["note_template_param_here"]={
Line 3,494: Line 3,494:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{"clang/lib/Sema/SemaLambda.cpp",1198,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(TP->getLocation(), diag::note_template_param_here);"},{x,759,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  Diag(PrevDecl->getLocation(), diag::note_template_param_here);"},{x,4353,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,4380,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{x,4752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,4772,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,4945,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag((*Param)->getLocation(), diag::note_template_param_here);"},{x,5378,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5399,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5408,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5417,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5451,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5466,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5595,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5602,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5610,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5641,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5659,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5664,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5685,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5691,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5785,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5871,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    } else {\n      if (Result == TDK_AlreadyDiagnosed) {\n      } else if (Result != TDK_Success) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5881,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (ParamType.isNull()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5908,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // FIXME: When Param is a reference, should we check that Arg is an lvalue?\n  if (CTAK == CTAK_Deduced && (ParamType->isReferenceType() ? !Context.hasSameType(ParamType.getNonReferenceType(), Arg->getType()) : !Context.hasSameUnqualifiedType(ParamType, Arg->getType()))) {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6127,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6160,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6200,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      // Complain if an unsigned parameter received a negative value.\n      if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6213,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      if (RequiredBits > AllowedBits) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6316,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7031,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    if (ParamUseRange.isValid()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here) << (IsDefaultArgument ? ParamUseRange : SourceRange()) << ParamUseRange;"}}
[j]={{"clang/lib/Sema/SemaLambda.cpp",1382,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(TP->getLocation(), diag::note_template_param_here);"},{x,900,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  Diag(PrevDecl->getLocation(), diag::note_template_param_here);"},{x,5257,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5286,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5733,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5753,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,5974,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag((*Param)->getLocation(), diag::note_template_param_here);"},{x,6583,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6609,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6619,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6631,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6672,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6690,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6833,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6841,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6850,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6890,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6911,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6918,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6940,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,6947,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7063,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7174,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    } else {\n      if (Result == TDK_AlreadyDiagnosed) {\n      } else if (Result != TDK_Success) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7184,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    if (ParamType.isNull()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7220,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // FIXME: When Param is a reference, should we check that Arg is an lvalue?\n  if (CTAK == CTAK_Deduced && (ParamType->isReferenceType() ? !Context.hasSameType(ParamType.getNonReferenceType(), Arg->getType()) : !Context.hasSameUnqualifiedType(ParamType, Arg->getType()))) {\n    Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7485,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7523,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7569,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      // Complain if an unsigned parameter received a negative value.\n      if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7584,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (ParamType->isBooleanType()) {\n    } else {\n      if (RequiredBits > AllowedBits) {\n        Diag(Param->getLocation(), diag::note_template_param_here);"},{x,7706,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Param->getLocation(), diag::note_template_param_here);"},{x,8565,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    if (ParamUseRange.isValid()) {\n      S.Diag(Param->getLocation(), diag::note_template_param_here) << (IsDefaultArgument ? ParamUseRange : SourceRange()) << ParamUseRange;"}}
},
},
["note_template_param_list_different_arity"]={
["note_template_param_list_different_arity"]={
Line 3,506: Line 3,506:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,6686,"/// 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]={{x,8168,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (TemplateArgLoc.isValid()) {\n    NextDiag = diag::note_template_param_list_different_arity;"}}
},
},
["note_template_param_prev_default_arg"]={
["note_template_param_prev_default_arg"]={
Line 3,518: Line 3,518:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,2538,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);"},{x,2553,"/// 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]={{x,3042,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);"},{x,3061,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n    } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n      Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);"}}
},
},
["note_template_param_prev_default_arg_in_other_module"]={
["note_template_param_prev_default_arg_in_other_module"]={
Line 3,530: Line 3,530:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{x,2544,"/// 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]={{x,3050,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg_in_other_module) << PrevModuleName;"}}
},
},
["note_template_parameter_pack_here"]={
["note_template_parameter_pack_here"]={
Line 3,542: Line 3,542:
[e]=k,
[e]=k,
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[j]={{x,6596,"/// 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]={{x,8050,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_parameter_pack_here) << ParamKind << Old->isParameterPack();"}}
},
},
["note_template_parameter_pack_non_pack"]={
["note_template_parameter_pack_non_pack"]={
Line 3,554: Line 3,554:
[e]=k,
[e]=k,
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[i]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[j]={{x,6591,"/// 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]={{x,8042,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        NextDiag = diag::note_template_parameter_pack_non_pack;"}}
},
},
["note_template_prev_declaration"]={
["note_template_prev_declaration"]={
Line 3,566: Line 3,566:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{y,548,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n        Diag(PrevForDefaultArgs->getLocation(), diag::note_template_prev_declaration) << false;"},{x,6576,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch);"},{x,6659,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(OldC ? OldC->getBeginLoc() : Old->getBeginLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"},{x,6689,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  S.Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch) << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());"},{x,6774,"/// 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]={{y,604,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n        Diag(PrevForDefaultArgs->getLocation(), diag::note_template_prev_declaration) << false;"},{x,8023,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      S.Diag(Old->getLocation(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch);"},{x,8135,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(OldC ? OldC->getBeginLoc() : Old->getBeginLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"},{x,8174,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  S.Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration) << (Kind != Sema::TPL_TemplateMatch) << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());"},{x,8277,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    auto Diagnose = [&] {\n      Diag(OldRC ? OldRC->getBeginLoc() : Old->getTemplateLoc(), diag::note_template_prev_declaration) << /*declaration*/ 0;"}}
},
},
["note_template_recursion_depth"]={
["note_template_recursion_depth"]={
Line 3,578: Line 3,578:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{gb,501,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth) << SemaRef.getLangOpts().InstantiationDepth;"}}
[j]={{gb,726,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth) << SemaRef.getLangOpts().InstantiationDepth;"}}
},
},
["note_template_requirement_instantiation_here"]={
["note_template_requirement_instantiation_here"]={
Line 3,590: Line 3,590:
[e]=k,
[e]=k,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{gb,641,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_instantiation_here) << Active->InstantiationRange;"}}
[j]={{gb,940,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_instantiation_here) << Active->InstantiationRange;"}}
},
},
["note_template_requirement_params_instantiation_here"]={
["note_template_requirement_params_instantiation_here"]={
Line 3,602: Line 3,602:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{gb,644,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementParameterInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_params_instantiation_here) << Active->InstantiationRange;"}}
[j]={{gb,945,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::RequirementParameterInstantiation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_template_requirement_params_instantiation_here) << Active->InstantiationRange;"}}
},
},
["note_template_static_data_member_def_here"]={
["note_template_static_data_member_def_here"]={
Line 3,614: Line 3,614:
[e]=k,
[e]=k,
[i]={"a6ef8f0813d5",1248467683,"Template instantiation for static data members that are defined out-of-line."},
[i]={"a6ef8f0813d5",1248467683,"Template instantiation for static data members that are defined out-of-line."},
[j]={{gb,544,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}}
[j]={{gb,781,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}}
},
},
["note_template_type_alias_instantiation_here"]={
["note_template_type_alias_instantiation_here"]={
Line 3,626: Line 3,626:
[e]=k,
[e]=k,
[i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[i]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[j]={{gb,550,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n      } else {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_type_alias_instantiation_here) << cast<TypeAliasTemplateDecl>(D) << Active->InstantiationRange;"}}
[j]={{gb,796,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n      } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {\n      } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {\n      } else {\n        Diags.Report(Active->PointOfInstantiation, diag::note_template_type_alias_instantiation_here) << cast<TypeAliasTemplateDecl>(D) << Active->InstantiationRange;"}}
},
},
["note_template_unnamed_type_here"]={
["note_template_unnamed_type_here"]={
Line 3,638: Line 3,638:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{x,5276,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);"}}
[j]={{x,6469,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);"}}
},
},
["note_template_variable_def_here"]={
["note_template_variable_def_here"]={
Line 3,650: Line 3,650:
[e]=k,
[e]=k,
[i]={"dbd65779649e",1376511302,"Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static da..."},
[i]={"dbd65779649e",1376511302,"Bug fix: note diagnosis on expression narrowing should say \"variable template\" instead of \"static da..."},
[j]={{gb,544,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}}
[j]={{gb,782,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n      } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {\n        Diags.Report(Active->PointOfInstantiation, VD->isStaticDataMember() ? diag::note_template_static_data_member_def_here : diag::note_template_variable_def_here) << VD << Active->InstantiationRange;"}}
},
},
["note_thread_warning_in_fun"]={
["note_thread_warning_in_fun"]={
Line 3,662: Line 3,662:
[e]=k,
[e]=k,
[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."},
[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."},
[j]={{I,1569,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes() const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{I,1578,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{I,1589,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note1, const PartialDiagnosticAt &Note2) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"}}
[j]={{I,1796,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes() const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{I,1807,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"},{I,1821,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes getNotes(const PartialDiagnosticAt &Note1, const PartialDiagnosticAt &Note2) const {\n    if (Verbose && CurrentFunction) {\n      PartialDiagnosticAt FNote(CurrentFunction->getBody()->getBeginLoc(), S.PDiag(diag::note_thread_warning_in_fun) << CurrentFunction);"}}
},
},
["note_throw_in_dtor"]={
["note_throw_in_dtor"]={
Line 3,674: Line 3,674:
[e]=k,
[e]=k,
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[j]={{I,333,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n      if (const auto *Ty = FD->getTypeSourceInfo()->getType()->getAs<FunctionProtoType>())\n        S.Diag(FD->getLocation(), diag::note_throw_in_dtor) << !isa<CXXDestructorDecl>(FD) << !Ty->hasExceptionSpec() << FD->getExceptionSpecSourceRange();"}}
[j]={{I,365,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n      if (const auto *Ty = FD->getTypeSourceInfo()->getType()->getAs<FunctionProtoType>())\n        S.Diag(FD->getLocation(), diag::note_throw_in_dtor) << !isa<CXXDestructorDecl>(FD) << !Ty->hasExceptionSpec() << FD->getExceptionSpecSourceRange();"}}
},
},
["note_throw_in_function"]={
["note_throw_in_function"]={
Line 3,686: Line 3,686:
[e]=k,
[e]=k,
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "},
[j]={{I,335,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n    } else\n      S.Diag(FD->getLocation(), diag::note_throw_in_function) << FD->getExceptionSpecSourceRange();"}}
[j]={{I,369,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    if (S.getLangOpts().CPlusPlus11 && (isa<CXXDestructorDecl>(FD) || FD->getDeclName().getCXXOverloadedOperator() == OO_Delete || FD->getDeclName().getCXXOverloadedOperator() == OO_Array_Delete)) {\n    } else\n      S.Diag(FD->getLocation(), diag::note_throw_in_function) << FD->getExceptionSpecSourceRange();"}}
},
},
["note_throw_underaligned_obj"]={
["note_throw_underaligned_obj"]={
Line 3,698: Line 3,698:
[e]=k,
[e]=k,
[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on"},
[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on"},
[j]={{Ub,983,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // Under the Itanium C++ ABI, memory for the exception object is allocated by\n  // the runtime with no ability for the compiler to request additional\n  // alignment. Warn if the exception type requires alignment beyond the minimum\n  // guaranteed by the target C++ runtime.\n  if (Context.getTargetInfo().getCXXABI().isItaniumFamily()) {\n    if (ExnObjAlign < TypeAlign) {\n      Diag(ThrowLoc, diag::note_throw_underaligned_obj) << Ty << (unsigned)TypeAlign.getQuantity() << (unsigned)ExnObjAlign.getQuantity();"}}
[j]={{Ub,1092,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // Under the Itanium C++ ABI, memory for the exception object is allocated by\n  // the runtime with no ability for the compiler to request additional\n  // alignment. Warn if the exception type requires alignment beyond the minimum\n  // guaranteed by the target C++ runtime.\n  if (Context.getTargetInfo().getCXXABI().isItaniumFamily()) {\n    if (ExnObjAlign < TypeAlign) {\n      Diag(ThrowLoc, diag::note_throw_underaligned_obj) << Ty << (unsigned)TypeAlign.getQuantity() << (unsigned)ExnObjAlign.getQuantity();"}}
},
},
["note_total_sloc_usage"]={
["note_total_sloc_usage"]={
Line 3,710: Line 3,710:
[e]=l,
[e]=l,
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[j]={{"clang/lib/Basic/SourceManager.cpp",2080,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  Diag.Report(SourceLocation(), diag::note_total_sloc_usage) << LocalUsage << LoadedUsage << (LocalUsage + LoadedUsage) << UsagePercent;"}}
[j]={{"clang/lib/Basic/SourceManager.cpp",2305,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  Diag.Report(SourceLocation(), diag::note_total_sloc_usage) << LocalUsage << LoadedUsage << (LocalUsage + LoadedUsage) << UsagePercent;"}}
},
},
["note_transparent_union_first_field_size_align"]={
["note_transparent_union_first_field_size_align"]={
Line 3,722: Line 3,722:
[e]=k,
[e]=k,
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"},
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"},
[j]={{u,3732,"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]={{u,4270,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (; Field != FieldEnd; ++Field) {\n    // FIXME: this isn\'t fully correct; we also need to test whether the\n    // members of the union would all have the same calling convention as the\n    // first member of the union. Checking just the size and alignment isn\'t\n    // sufficient (consider structs passed on the stack instead of in registers\n    // as an example).\n    if (S.Context.getTypeSize(FieldType) != FirstSize || S.Context.getTypeAlign(FieldType) > FirstAlign) {\n      S.Diag(FirstField->getLocation(), diag::note_transparent_union_first_field_size_align) << isSize << FirstBits;"}}
},
},
["note_type_being_defined"]={
["note_type_being_defined"]={
Line 3,734: Line 3,734:
[e]=l,
[e]=l,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{hb,8175,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the type was a forward declaration of a class/struct/union\n  // type, produce a note.\n  if (Tag && !Tag->isInvalidDecl() && !Tag->getLocation().isInvalid())\n    Diag(Tag->getLocation(), Tag->isBeingDefined() ? diag::note_type_being_defined : diag::note_forward_declaration) << Context.getTagDeclType(Tag);"}}
[j]={{hb,9247,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the type was a forward declaration of a class/struct/union\n  // type, produce a note.\n  if (Tag && !Tag->isInvalidDecl() && !Tag->getLocation().isInvalid())\n    Diag(Tag->getLocation(), Tag->isBeingDefined() ? diag::note_type_being_defined : diag::note_forward_declaration) << Context.getTagDeclType(Tag);"}}
},
},
["note_type_incomplete"]={
["note_type_incomplete"]={
Line 3,746: Line 3,746:
[e]=k,
[e]=k,
[i]={"ffa7dc379f2e",1422480686,"PR 17456"},
[i]={"ffa7dc379f2e",1422480686,"PR 17456"},
[j]={{mb,432,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclFrom->isCompleteDefinition())\n        S.Diag(DeclFrom->getLocation(), diag::note_type_incomplete) << DeclFrom;"},{mb,435,"/// 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]={{mb,547,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclFrom->isCompleteDefinition())\n        S.Diag(DeclFrom->getLocation(), diag::note_type_incomplete) << DeclFrom;"},{mb,550,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (!DifferentPtrness) {\n    if (RecFrom && RecTo) {\n      if (!DeclTo->isCompleteDefinition())\n        S.Diag(DeclTo->getLocation(), diag::note_type_incomplete) << DeclTo;"}}
},
},
["note_type_requirement_substitution_error"]={
["note_type_requirement_substitution_error"]={
Line 3,758: Line 3,758:
[e]=k,
[e]=k,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",801,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",994,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
},
},
["note_type_requirement_unknown_substitution_error"]={
["note_type_requirement_unknown_substitution_error"]={
Line 3,770: Line 3,770:
[e]=k,
[e]=k,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",803,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
[j]={{"clang/lib/Sema/SemaConcept.cpp",998,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::TypeRequirement *Req, bool First) {\n  case concepts::TypeRequirement::SS_SubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_type_requirement_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
},
},
["note_typecheck_assign_const"]={
["note_typecheck_assign_const"]={
Line 3,782: Line 3,782:
[e]=k,
[e]=k,
[i]={"af7d76c7204c",1428717193,"Improve the error message for assigning to read-only variables."},
[i]={"af7d76c7204c",1428717193,"Improve the error message for assigning to read-only variables."},
[j]={{C,12153,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << false /*static*/ << Field << Field->getType() << Field->getSourceRange();"},{C,12163,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << true /*static*/ << VDecl << VDecl->getType() << VDecl->getSourceRange();"},{C,12187,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      S.Diag(FD->getReturnTypeSourceRange().getBegin(), diag::note_typecheck_assign_const) << ConstFunction << FD << FD->getReturnType() << FD->getReturnTypeSourceRange();"},{C,12197,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstVariable << VD << VD->getType() << VD->getSourceRange();"},{C,12208,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          S.Diag(MD->getLocation(), diag::note_typecheck_assign_const) << ConstMethod << MD << MD->getSourceRange();"},{C,12239,"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]={{C,14114,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << false /*static*/ << Field << Field->getType() << Field->getSourceRange();"},{C,14144,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstMember << true /*static*/ << VDecl << VDecl->getType() << VDecl->getSourceRange();"},{C,14158,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      S.Diag(FD->getReturnTypeSourceRange().getBegin(), diag::note_typecheck_assign_const) << ConstFunction << FD << FD->getReturnType() << FD->getReturnTypeSourceRange();"},{C,14171,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        S.Diag(VD->getLocation(), diag::note_typecheck_assign_const) << ConstVariable << VD << VD->getType() << VD->getSourceRange();"},{C,14186,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          S.Diag(MD->getLocation(), diag::note_typecheck_assign_const) << ConstMethod << MD << MD->getSourceRange();"},{C,14280,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      if (FieldTy.isConstQualified()) {\n        S.Diag(Field->getLocation(), diag::note_typecheck_assign_const) << NestedConstMember << IsNested << Field << FieldTy << Field->getSourceRange();"}}
},
},
["note_typecheck_invalid_operands_converted"]={
["note_typecheck_invalid_operands_converted"]={
Line 3,794: Line 3,794:
[e]=k,
[e]=k,
[i]={"1ef7554efd1a",1530131434,"DR1687: When overload resolution selects a built-in operator, implicit"},
[i]={"1ef7554efd1a",1530131434,"DR1687: When overload resolution selects a built-in operator, implicit"},
[j]={{C,9213,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // If a user-defined conversion was applied to either of the operands prior\n  // to applying the built-in operator rules, tell the user about it.\n  if (OrigLHS.Conversion) {\n    Diag(OrigLHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 0 << LHS.get()->getType();"},{C,9216,"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]={{C,10637,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // If a user-defined conversion was applied to either of the operands prior\n  // to applying the built-in operator rules, tell the user about it.\n  if (OrigLHS.Conversion) {\n    Diag(OrigLHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 0 << LHS.get()->getType();"},{C,10658,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (OrigRHS.Conversion) {\n    Diag(OrigRHS.Conversion->getLocation(), diag::note_typecheck_invalid_operands_converted) << 1 << RHS.get()->getType();"}}
},
},
["note_typecheck_member_reference_suggestion"]={
["note_typecheck_member_reference_suggestion"]={
Line 3,806: Line 3,806:
[e]=k,
[e]=k,
[i]={"bad7fb09b2d1",1373918094,"Move the \"->\" to \".\" fixit from r186128 into a separate note since"},
[i]={"bad7fb09b2d1",1373918094,"Move the \"->\" to \".\" fixit from r186128 into a separate note since"},
[j]={{D,12886,"/// 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]={{D,15278,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  case OR_No_Viable_Function: {\n    if (CandidateSet.empty()) {\n      if (BaseType->isRecordType() && !BaseType->isPointerType()) {\n        Diag(OpLoc, diag::note_typecheck_member_reference_suggestion) << FixItHint::CreateReplacement(OpLoc, \".\");"}}
},
},
["note_typedef_for_linkage_here"]={
["note_typedef_for_linkage_here"]={
Line 3,818: Line 3,818:
[e]=k,
[e]=k,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{v,4493,"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]={{v,5033,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    Diag(NewTD->getLocation(), diag::note_typedef_for_linkage_here) << NewTD << isa<TypeAliasDecl>(NewTD);"}}
},
},
["note_typename_member_refers_here"]={
["note_typename_member_refers_here"]={
Line 3,830: Line 3,830:
[e]=k,
[e]=k,
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[j]={{x,9179,"/// 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]={{x,11170,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  if (Referenced)\n    Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}}
},
},
["note_typename_refers_here"]={
["note_typename_refers_here"]={
Line 3,842: Line 3,842:
[e]=k,
[e]=k,
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"},
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"},
[j]={{x,9179,"/// 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]={{x,11171,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  if (Referenced)\n    Diag(Referenced->getLocation(), Ctx ? diag::note_typename_member_refers_here : diag::note_typename_refers_here) << Name;"}}
},
},
["note_ucn_four_not_eight"]={
["note_ucn_four_not_eight"]={
Line 3,854: Line 3,854:
[e]=G,
[e]=G,
[i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234."},
[i]={"62db5066e91e",1359060652,"Add a fixit for \\U1234 -> \\u1234."},
[j]={{kb,3092,"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]={{kb,3344,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!Delimited && Count != NumHexDigits) {\n    if (Diagnose) {\n      // If the user wrote \\U1234, suggest a fixit to \\u.\n      if (Count == 4 && NumHexDigits == 8) {\n        Diag(KindLoc, diag::note_ucn_four_not_eight) << FixItHint::CreateReplacement(URange, \"u\");"}}
},
},
["note_unguarded_available_silence"]={
["note_unguarded_available_silence"]={
Line 3,866: Line 3,866:
[e]=k,
[e]=k,
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"},
[j]={{Kb,667,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    auto FixitDiag = SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence) << Range << D << (SemaRef.getLangOpts().ObjC ? /*@available*/ 0 : /*__builtin_available*/ 1);"}}
[j]={{Kb,788,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  if (Result != AR_Available) {\n    auto FixitDiag = SemaRef.Diag(Range.getBegin(), diag::note_unguarded_available_silence) << Range << D << (SemaRef.getLangOpts().ObjC ? /*@available*/ 0 : /*__builtin_available*/ 1);"}}
},
},
["note_unimplemented_constexpr_lambda_feature_ast"]={
["note_unimplemented_constexpr_lambda_feature_ast"]={
Line 3,878: Line 3,878:
[e]=l,
[e]=l,
[i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb..."},
[i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb..."},
[j]={{"clang/lib/AST/ExprConstant.cpp",2898,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // If this is a local variable, dig out its value.\n  if (Frame) {\n    if (!isa<ParmVarDecl>(VD)) {\n      Info.FFDiag(E->getBeginLoc(), diag::note_unimplemented_constexpr_lambda_feature_ast) << \"captures not currently allowed\";"}}
[j]={{"clang/lib/AST/ExprConstant.cpp",3303,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // If this is a local variable, dig out its value.\n  if (Frame) {\n    if (!isa<ParmVarDecl>(VD)) {\n      Info.FFDiag(E->getBeginLoc(), diag::note_unimplemented_constexpr_lambda_feature_ast) << \"captures not currently allowed\";"}}
},
},
["note_uninit_fixit_remove_cond"]={
["note_uninit_fixit_remove_cond"]={
Line 3,890: Line 3,890:
[e]=k,
[e]=k,
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[j]={{I,877,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    if (RemoveDiagKind != -1)\n      S.Diag(Fixit1.RemoveRange.getBegin(), diag::note_uninit_fixit_remove_cond) << RemoveDiagKind << Str << I->Output << Fixit1 << Fixit2;"}}
[j]={{I,983,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    if (RemoveDiagKind != -1)\n      S.Diag(Fixit1.RemoveRange.getBegin(), diag::note_uninit_fixit_remove_cond) << RemoveDiagKind << Str << I->Output << Fixit1 << Fixit2;"}}
},
},
["note_uninit_in_this_constructor"]={
["note_uninit_in_this_constructor"]={
Line 3,902: Line 3,902:
[e]=k,
[e]=k,
[i]={"406e65c8d175",1379646186,"Modify the uninitialized field visitor to detect uninitialized use across the"},
[i]={"406e65c8d175",1379646186,"Modify the uninitialized field visitor to detect uninitialized use across the"},
[j]={{y,3291,"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]={{y,3864,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    if (Constructor)\n      S.Diag(Constructor->getLocation(), diag::note_uninit_in_this_constructor) << (Constructor->isDefaultConstructor() && Constructor->isImplicit());"}}
},
},
["note_uninit_reference_member"]={
["note_uninit_reference_member"]={
Line 3,914: Line 3,914:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{U,568,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n  if (Init >= NumInits || !ILE->getInit(Init)) {\n    if (Field->getType()->isReferenceType()) {\n      if (!VerifyOnly) {\n        SemaRef.Diag(Field->getLocation(), diag::note_uninit_reference_member);"},{U,4757,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (EntityIndexToProcess < Args.size()) {\n      } else {\n        // We\'ve processed all of the args, but there are still members that\n        // have to be initialized.\n        if (FD->hasInClassInitializer()) {\n        } else {\n          // C++ [dcl.init]p17.6.2.2\n          //  The remaining elements...otherwise are value initialzed\n          if (FD->getType()->isReferenceType()) {\n            if (!VerifyOnly) {\n              S.Diag(FD->getLocation(), diag::note_uninit_reference_member);"}}
[j]={{U,739,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n  if (Init >= NumInits || !ILE->getInit(Init)) {\n    if (Field->getType()->isReferenceType()) {\n      if (!VerifyOnly) {\n        SemaRef.Diag(Field->getLocation(), diag::note_uninit_reference_member);"},{U,5614,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (EntityIndexToProcess < Args.size()) {\n      } else {\n        // We\'ve processed all of the args, but there are still members that\n        // have to be initialized.\n        if (FD->hasInClassInitializer()) {\n        } else {\n          // C++ [dcl.init]p17.6.2.2\n          //  The remaining elements...otherwise are value initialzed\n          if (FD->getType()->isReferenceType()) {\n            if (!VerifyOnly) {\n              S.Diag(FD->getLocation(), diag::note_uninit_reference_member);"}}
},
},
["note_uninit_var_use"]={
["note_uninit_var_use"]={
Line 3,926: Line 3,926:
[e]=k,
[e]=k,
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[i]={"1bb8edb8acc0",1338013246,"In response to some discussions on IRC, tweak the wording of the new"},
[j]={{I,751,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  case UninitUse::AfterCall:\n    S.Diag(Use.getUser()->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{I,875,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    S.Diag(User->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << User->getSourceRange();"}}
[j]={{I,846,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  case UninitUse::AfterCall:\n    S.Diag(Use.getUser()->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{I,980,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    S.Diag(User->getBeginLoc(), diag::note_uninit_var_use) << IsCapturedByBlock << User->getSourceRange();"}}
},
},
["note_unlocked_here"]={
["note_unlocked_here"]={
Line 3,938: Line 3,938:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{I,1597,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes makeUnlockedHereNote(SourceLocation LocUnlocked, StringRef Kind) { return LocUnlocked.isValid() ? getNotes(PartialDiagnosticAt(LocUnlocked, S.PDiag(diag::note_unlocked_here) << Kind)) : getNotes(); }"}}
[j]={{I,1839,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes makeUnlockedHereNote(SourceLocation LocUnlocked, StringRef Kind) { return LocUnlocked.isValid() ? getNotes(PartialDiagnosticAt(LocUnlocked, S.PDiag(diag::note_unlocked_here) << Kind)) : getNotes(); }"}}
},
},
["note_unofficial_macro_backtrace_limit"]={
["note_unofficial_macro_backtrace_limit"]={
Line 3,980: Line 3,980:
[e]=Q,
[e]=Q,
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[j]={{qc,257,"/// \\brief Parse a constraint-logical-and-expression.\n///\n/// \\verbatim\n///      C++2a[temp.constr.decl]p1\n///      constraint-logical-and-expression:\n///        primary-expression\n///        constraint-logical-and-expression \'&&\' primary-expression\n///\n/// \\endverbatim\nExprResult Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {\n  auto ParsePrimary = [&]() {\n    auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n      if (!E.isInvalid())\n        Diag(E.get()->getExprLoc(), Note ? diag::note_unparenthesized_non_primary_expr_in_requires_clause : diag::err_unparenthesized_non_primary_expr_in_requires_clause) << FixItHint::CreateInsertion(E.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(E.get()->getEndLoc()), \")\") << E.get()->getSourceRange();"}}
[j]={{qc,280,"/// \\brief Parse a constraint-logical-and-expression.\n///\n/// \\verbatim\n///      C++2a[temp.constr.decl]p1\n///      constraint-logical-and-expression:\n///        primary-expression\n///        constraint-logical-and-expression \'&&\' primary-expression\n///\n/// \\endverbatim\nExprResult Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {\n  auto ParsePrimary = [&]() {\n    auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n      if (!E.isInvalid())\n        Diag(E.get()->getExprLoc(), Note ? diag::note_unparenthesized_non_primary_expr_in_requires_clause : diag::err_unparenthesized_non_primary_expr_in_requires_clause) << FixItHint::CreateInsertion(E.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(E.get()->getEndLoc()), \")\") << E.get()->getSourceRange();"}}
},
},
["note_unreachable_entity"]={
["note_unreachable_entity"]={
Line 3,992: Line 3,992:
[e]=Rb,
[e]=Rb,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5156,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  auto NotePrevious = [&] {\n    Diag(DeclLoc, diag::note_unreachable_entity) << (int)MIK;"}}
[j]={{"clang/lib/Sema/SemaLookup.cpp",5698,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  auto NotePrevious = [&] {\n    Diag(DeclLoc, diag::note_unreachable_entity) << (int)MIK;"}}
},
},
["note_unreachable_silence"]={
["note_unreachable_silence"]={
Line 4,004: Line 4,004:
[e]=k,
[e]=k,
[i]={"ec3bbf4933d7",1396053320,"Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((..."},
[i]={"ec3bbf4933d7",1396053320,"Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((..."},
[j]={{I,108,"class UnreachableCodeHandler : public reachable_code::Callback {\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    if (Open.isValid()) {\n      if (Close.isValid()) {\n        S.Diag(Open, diag::note_unreachable_silence) << FixItHint::CreateInsertion(Open, \"/* DISABLES CODE */ (\") << FixItHint::CreateInsertion(Close, \")\");"}}
[j]={{I,116,"class UnreachableCodeHandler : public reachable_code::Callback {\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    if (Open.isValid()) {\n      if (Close.isValid()) {\n        S.Diag(Open, diag::note_unreachable_silence) << FixItHint::CreateInsertion(Open, \"/* DISABLES CODE */ (\") << FixItHint::CreateInsertion(Close, \")\");"}}
},
},
["note_unsafe_buffer_operation"]={
["note_unsafe_buffer_operation"]={
Line 4,016: Line 4,016:
[e]=l,
[e]=l,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{I,1891,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n      S.Diag(Loc, diag::note_unsafe_buffer_operation) << MsgParam << Range;"}}
[j]={{I,2213,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    if (IsRelatedToDecl) {\n      S.Diag(Loc, diag::note_unsafe_buffer_operation) << MsgParam << Range;"}}
},
},
["note_unsafe_buffer_variable_fixit_group"]={
["note_unsafe_buffer_variable_fixit_group"]={
Line 4,028: Line 4,028:
[e]=l,
[e]=l,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{I,1906,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n    if (!Fixes.empty()) {\n      const auto &FD = S.Diag(Variable->getLocation(), diag::note_unsafe_buffer_variable_fixit_group);"}}
[j]={{I,2234,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n    if (!Fixes.empty()) {\n      const auto &FD = S.Diag(Variable->getLocation(), diag::note_unsafe_buffer_variable_fixit_group);"}}
},
},
["note_use_dashdash"]={
["note_use_dashdash"]={
Line 4,040: Line 4,040:
[e]=l,
[e]=l,
[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)"},
[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)"},
[j]={{"clang/lib/Driver/Driver.cpp",2504,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n    } else if (A->getOption().hasFlag(options::LinkerInput)) {\n    } else if (A->getOption().matches(options::OPT_x)) {\n    } else if (A->getOption().getID() == options::OPT_U) {\n      if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n        Diag(diag::note_use_dashdash);"}}
[j]={{"clang/lib/Driver/Driver.cpp",2794,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n    } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n    } else if (A->getOption().hasFlag(options::LinkerInput)) {\n    } else if (A->getOption().matches(options::OPT_x)) {\n    } else if (A->getOption().getID() == options::OPT_U) {\n      if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n        Diag(diag::note_use_dashdash);"}}
},
},
["note_use_ifdef_guards"]={
["note_use_ifdef_guards"]={
Line 4,052: Line 4,052:
[e]=k,
[e]=k,
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[i]={"0ad318217917",1494483607,"[Sema] Improve redefinition errors pointing to the same header"},
[j]={{v,4299,"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]={{v,4806,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  // Is it the same file and same offset? Provide more information on why\n  // this leads to a redefinition error.\n  if (FNew == FOld && FNewDecLoc.second == FOldDecLoc.second) {\n    // If the header has no guards, emit a note suggesting one.\n    if (FOld && !HSI.isFileMultipleIncludeGuarded(FOld))\n      Diag(Old->getLocation(), diag::note_use_ifdef_guards);"}}
},
},
["note_use_non_reference_type"]={
["note_use_non_reference_type"]={
Line 4,064: Line 4,064:
[e]=k,
[e]=k,
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[j]={{O,2712,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n  } else if (!VariableType->isRValueReferenceType()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_non_reference_type) << NonReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}
[j]={{O,3159,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n  } else if (!VariableType->isRValueReferenceType()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_non_reference_type) << NonReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}
},
},
["note_use_reference_type"]={
["note_use_reference_type"]={
Line 4,076: Line 4,076:
[e]=k,
[e]=k,
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[j]={{O,2755,"// Warns when the loop variable can be changed to a reference type to\n// prevent a copy.  For instance, if given \"for (const Foo x : Range)\" suggest\n// \"for (const Foo &x : Range)\" if this form does not make a copy.\nstatic void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, const VarDecl *VD) {\n  SemaRef.Diag(VD->getBeginLoc(), diag::note_use_reference_type) << SemaRef.Context.getLValueReferenceType(VariableType) << VD->getSourceRange() << FixItHint::CreateInsertion(VD->getLocation(), \"&\");"}}
[j]={{O,3208,"// Warns when the loop variable can be changed to a reference type to\n// prevent a copy.  For instance, if given \"for (const Foo x : Range)\" suggest\n// \"for (const Foo &x : Range)\" if this form does not make a copy.\nstatic void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, const VarDecl *VD) {\n  SemaRef.Diag(VD->getBeginLoc(), diag::note_use_reference_type) << SemaRef.Context.getLValueReferenceType(VariableType) << VD->getSourceRange() << FixItHint::CreateInsertion(VD->getLocation(), \"&\");"}}
},
},
["note_use_thread_local"]={
["note_use_thread_local"]={
Line 4,088: Line 4,088:
[e]=k,
[e]=k,
[i]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[i]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[j]={{v,12316,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      if (getLangOpts().CPlusPlus11)\n        Diag(var->getLocation(), diag::note_use_thread_local);"},{v,12325,"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]={{v,14101,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      if (getLangOpts().CPlusPlus11)\n        Diag(var->getLocation(), diag::note_use_thread_local);"},{v,14111,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(var->getLocation(), diag::note_use_thread_local);"}}
},
},
["note_use_type_or_non_reference"]={
["note_use_type_or_non_reference"]={
Line 4,100: Line 4,100:
[e]=k,
[e]=k,
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[i]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[j]={{O,2703,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_type_or_non_reference) << NonReferenceType << NewReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}
[j]={{O,3147,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  if (!ReferenceReturnType.isNull()) {\n    SemaRef.Diag(VD->getBeginLoc(), diag::note_use_type_or_non_reference) << NonReferenceType << NewReferenceType << VD->getSourceRange() << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc());"}}
},
},
["note_used_here"]={
["note_used_here"]={
Line 4,112: Line 4,112:
[e]=k,
[e]=k,
[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage"},
[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage"},
[j]={{yc,816,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n  for (const auto &Undef : Undefined) {\n    if (UseLoc.isValid())\n      S.Diag(UseLoc, diag::note_used_here);"},{nb,2660,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n        } else {\n          Diag(Args[0]->getExprLoc(), diag::note_used_here);"},{w,2390,"void Sema::EndOpenMPDSABlock(Stmt *CurDirective) {\n  // OpenMP [2.14.3.5, Restrictions, C/C++, p.1]\n  //  A variable of class type (or array thereof) that appears in a lastprivate\n  //  clause requires an accessible, unambiguous default constructor for the\n  //  class type, unless the list item is also specified in a firstprivate\n  //  clause.\n  if (const auto *D = dyn_cast_or_null<OMPExecutableDirective>(CurDirective)) {\n    for (OMPClause *C : D->clauses()) {\n      if (auto *Clause = dyn_cast<OMPUsesAllocatorsClause>(C)) {\n        for (unsigned I = 0, E = Clause->getNumberOfAllocators(); I < E; ++I) {\n          if (DVar.RefExpr || DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [VD, &MapExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef MapExprComponents, OpenMPClauseKind C) {\n            if (DVar.RefExpr)\n            else\n              Diag(MapExpr->getExprLoc(), diag::note_used_here) << MapExpr->getSourceRange();"},{w,17619,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    for (; CI != CE && SI != SE; ++CI, ++SI) {\n      // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.3]\n      //  At most one list item can be an array item derived from a given\n      //  variable in map clauses of the same construct.\n      if (CurrentRegionOnly && (isa<ArraySubscriptExpr>(CI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(CI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(CI->getAssociatedExpression())) && (isa<ArraySubscriptExpr>(SI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(SI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(SI->getAssociatedExpression()))) {\n        SemaRef.Diag(SI->getAssociatedExpression()->getExprLoc(), diag::note_used_here) << SI->getAssociatedExpression()->getSourceRange();"},{w,17662,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // If the expressions are exactly the same or one is a subset of the\n    // other, it means they are sharing storage.\n    if (CI == CE && SI == SE) {\n      if (CurrentRegionOnly) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,17693,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI == CE || SI == SE) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,17699,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI->getAssociatedExpression()->getStmtClass() != SI->getAssociatedExpression()->getStmtClass() || CI->getAssociatedDeclaration()->getCanonicalDecl() == SI->getAssociatedDeclaration()->getCanonicalDecl()) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,17731,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // An expression is a subset of the other.\n    if (CurrentRegionOnly && (CI == CE || SI == SE)) {\n      SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,17763,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n  //  If any part of the original storage of a list item has corresponding\n  //  storage in the device data environment, all of the original storage must\n  //  have corresponding storage in the device data environment.\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.6]\n  //  If a list item is an element of a structure, and a different element of\n  //  the structure has a corresponding list item in the device data environment\n  //  prior to a task encountering the construct associated with the map clause,\n  //  then the list item must also have a corresponding list item in the device\n  //  data environment prior to the task encountering the construct.\n  //\n  if (EnclosingExpr && !IsEnclosedByDataEnvironmentExpr) {\n    SemaRef.Diag(EnclosingExpr->getExprLoc(), diag::note_used_here) << EnclosingExpr->getSourceRange();"},{w,18931,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  SemaRef.Diag(SL, diag::note_used_here) << SR;"},{w,19256,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"},{w,19315,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"}}
[j]={{yc,918,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n  for (const auto &Undef : Undefined) {\n    if (UseLoc.isValid())\n      S.Diag(UseLoc, diag::note_used_here);"},{nb,3317,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n        } else {\n          Diag(Args[0]->getExprLoc(), diag::note_used_here);"},{w,2962,"void Sema::EndOpenMPDSABlock(Stmt *CurDirective) {\n  // OpenMP [2.14.3.5, Restrictions, C/C++, p.1]\n  //  A variable of class type (or array thereof) that appears in a lastprivate\n  //  clause requires an accessible, unambiguous default constructor for the\n  //  class type, unless the list item is also specified in a firstprivate\n  //  clause.\n  if (const auto *D = dyn_cast_or_null<OMPExecutableDirective>(CurDirective)) {\n    for (OMPClause *C : D->clauses()) {\n      if (auto *Clause = dyn_cast<OMPUsesAllocatorsClause>(C)) {\n        for (unsigned I = 0, E = Clause->getNumberOfAllocators(); I < E; ++I) {\n          if (DVar.RefExpr || DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [VD, &MapExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef MapExprComponents, OpenMPClauseKind C) {\n            if (DVar.RefExpr)\n            else\n              Diag(MapExpr->getExprLoc(), diag::note_used_here) << MapExpr->getSourceRange();"},{w,21511,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    for (; CI != CE && SI != SE; ++CI, ++SI) {\n      // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.3]\n      //  At most one list item can be an array item derived from a given\n      //  variable in map clauses of the same construct.\n      if (CurrentRegionOnly && (isa<ArraySubscriptExpr>(CI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(CI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(CI->getAssociatedExpression())) && (isa<ArraySubscriptExpr>(SI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(SI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(SI->getAssociatedExpression()))) {\n        SemaRef.Diag(SI->getAssociatedExpression()->getExprLoc(), diag::note_used_here) << SI->getAssociatedExpression()->getSourceRange();"},{w,21563,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // If the expressions are exactly the same or one is a subset of the\n    // other, it means they are sharing storage.\n    if (CI == CE && SI == SE) {\n      if (CurrentRegionOnly) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21600,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI == CE || SI == SE) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21611,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n    //  A variable for which the type is pointer and an array section\n    //  derived from that variable must not appear as list items of map\n    //  clauses of the same construct.\n    //\n    // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n    //  If any part of the original storage of a list item has corresponding\n    //  storage in the device data environment, all of the original storage\n    //  must have corresponding storage in the device data environment.\n    //\n    if (DerivedType->isAnyPointerType()) {\n      if (CI->getAssociatedExpression()->getStmtClass() != SI->getAssociatedExpression()->getStmtClass() || CI->getAssociatedDeclaration()->getCanonicalDecl() == SI->getAssociatedDeclaration()->getCanonicalDecl()) {\n        SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21650,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4]\n    //  List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // An expression is a subset of the other.\n    if (CurrentRegionOnly && (CI == CE || SI == SE)) {\n      SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) << RE->getSourceRange();"},{w,21686,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n  //  If any part of the original storage of a list item has corresponding\n  //  storage in the device data environment, all of the original storage must\n  //  have corresponding storage in the device data environment.\n  // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.6]\n  //  If a list item is an element of a structure, and a different element of\n  //  the structure has a corresponding list item in the device data environment\n  //  prior to a task encountering the construct associated with the map clause,\n  //  then the list item must also have a corresponding list item in the device\n  //  data environment prior to the task encountering the construct.\n  //\n  if (EnclosingExpr && !IsEnclosedByDataEnvironmentExpr) {\n    SemaRef.Diag(EnclosingExpr->getExprLoc(), diag::note_used_here) << EnclosingExpr->getSourceRange();"},{w,23134,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  SemaRef.Diag(SL, diag::note_used_here) << SR;"},{w,23524,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"},{w,23599,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  for (Expr *RefExpr : VarList) {\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      Diag(ConflictExpr->getExprLoc(), diag::note_used_here) << ConflictExpr->getSourceRange();"}}
},
},
["note_used_in_initialization_here"]={
["note_used_in_initialization_here"]={
Line 4,124: Line 4,124:
[e]=k,
[e]=k,
[i]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091."},
[i]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091."},
[j]={{U,464,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n            SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_used_in_initialization_here);"},{U,466,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n          else if (Entity.getKind() == InitializedEntity::EK_ArrayElement)\n            SemaRef.Diag(Loc, diag::note_used_in_initialization_here);"}}
[j]={{U,608,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n            SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_used_in_initialization_here);"},{U,610,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          if (Entity.getKind() == InitializedEntity::EK_Member)\n          else if (Entity.getKind() == InitializedEntity::EK_ArrayElement)\n            SemaRef.Diag(Loc, diag::note_used_in_initialization_here);"}}
},
},
["note_user_declared_ctor"]={
["note_user_declared_ctor"]={
Line 4,136: Line 4,136:
[e]=k,
[e]=k,
[i]={"92f241f18812",1354935182,"Properly compute triviality for explicitly-defaulted or deleted special members."},
[i]={"92f241f18812",1354935182,"Properly compute triviality for explicitly-defaulted or deleted special members."},
[j]={{y,8466,"/// 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]={{y,9916,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n      if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))\n        S.Diag(CD->getLocation(), diag::note_user_declared_ctor);"}}
},
},
["note_using"]={
["note_using"]={
Line 4,148: Line 4,148:
[e]=l,
[e]=l,
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"},
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"},
[j]={{B,2979,"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]={{B,3642,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    Diag(Methods[0]->getBeginLoc(), issueError ? diag::note_possibility : diag::note_using) << Methods[0]->getSourceRange();"}}
},
},
["note_using_decl"]={
["note_using_decl"]={
Line 4,160: Line 4,160:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,3197,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{v,3275,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{v,15051,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{y,11177,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n    Diag(D->getLocation(), diag::note_using_decl) << 1;"},{x,1661,"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]={{v,3556,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{v,3641,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{v,17217,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"},{y,12989,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n    Diag(D->getLocation(), diag::note_using_decl) << 1;"},{x,1981,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getIntroducer()->getLocation(), diag::note_using_decl) << 0;"}}
},
},
["note_using_decl_class_member_workaround"]={
["note_using_decl_class_member_workaround"]={
Line 4,172: Line 4,172:
[e]=k,
[e]=k,
[i]={"7ad0b8839652",1396475075,"If a using-declaration names a class member, but appears outside a class, try"},
[i]={"7ad0b8839652",1396475075,"If a using-declaration names a class member, but appears outside a class, try"},
[j]={{y,11247,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n          Diag(SS.getBeginLoc(), diag::note_using_decl_class_member_workaround) << 0 // alias declaration"},{y,11252,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n        } else {\n          Diag(InsertLoc, diag::note_using_decl_class_member_workaround) << 1 // typedef declaration"},{y,11264,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << 2 // reference declaration"},{y,11276,"/// 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]={{y,13075,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n          Diag(SS.getBeginLoc(), diag::note_using_decl_class_member_workaround) << 0 // alias declaration"},{y,13083,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n        if (getLangOpts().CPlusPlus11) {\n        } else {\n          Diag(InsertLoc, diag::note_using_decl_class_member_workaround) << 1 // typedef declaration"},{y,13099,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << 2 // reference declaration"},{y,13114,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  if (!CurContext->isRecord()) {\n    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {\n      if (!R) {\n      } else if (R->getAsSingle<TypeDecl>()) {\n      } else if (R->getAsSingle<VarDecl>()) {\n      } else if (R->getAsSingle<EnumConstantDecl>()) {\n        Diag(UsingLoc, diag::note_using_decl_class_member_workaround) << (getLangOpts().CPlusPlus11 ? 4 : 3) // const[expr] variable"}}
},
},
["note_using_decl_conflict"]={
["note_using_decl_conflict"]={
Line 4,184: Line 4,184:
[e]=k,
[e]=k,
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations.  There"},
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations.  There"},
[j]={{y,10554,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag((NonTag ? NonTag : Tag)->getLocation(), diag::note_using_decl_conflict);"},{y,10584,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);"},{y,10598,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Tag->getLocation(), diag::note_using_decl_conflict);"},{y,10609,"/// 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]={{y,12279,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag((NonTag ? NonTag : Tag)->getLocation(), diag::note_using_decl_conflict);"},{y,12309,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);"},{y,12322,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Tag->getLocation(), diag::note_using_decl_conflict);"},{y,12332,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);"}}
},
},
["note_using_decl_target"]={
["note_using_decl_target"]={
Line 4,196: Line 4,196:
[e]=k,
[e]=k,
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations.  Split UnresolvedUsingDecl into"},
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations.  Split UnresolvedUsingDecl into"},
[j]={{v,3196,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{v,3274,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{v,15050,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{y,10488,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        if (OrigDC == CurContext) {\n          Diag(Orig->getLocation(), diag::note_using_decl_target);"},{y,10494,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        Diag(Orig->getLocation(), diag::note_using_decl_target);"},{y,10553,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,10583,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,10597,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,10608,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,10995,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n    // If we asked for a typename and got a non-type decl, error out.\n    if (!R.getAsSingle<TypeDecl>() && !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) {\n      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)\n        Diag((*I)->getUnderlyingDecl()->getLocation(), diag::note_using_decl_target);"},{y,11004,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n  } else {\n    // If we asked for a non-typename and we got a type, error out,\n    // but only if this is an instantiation of an unresolved using\n    // decl.  Otherwise just silently find the type name.\n    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {\n      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);"},{jc,773,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // C++2a [module.interface]p5:\n  //  all entities to which all of the using-declarators ultimately refer\n  //  shall have been introduced with a name having external linkage\n  if (auto *USD = dyn_cast<UsingShadowDecl>(D)) {\n    if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n      S.Diag(Target->getLocation(), diag::note_using_decl_target);"},{x,1660,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"}}
[j]={{v,3555,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n  if (!Old) {\n    S.Diag(OldS->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{v,3640,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n      if (New->getFriendObjectKind()) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{v,17216,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    // If this is a redeclaration of a using shadow declaration, it must\n    // declare a tag in the same context. In MSVC mode, we allow a\n    // redefinition if either context is within the other.\n    if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n      if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n        Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"},{y,12203,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        if (OrigDC == CurContext) {\n          Diag(Orig->getLocation(), diag::note_using_decl_target);"},{y,12212,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Diagnose finding a decl which is not from a base class of the\n  // current class.  We do this now because there are cases where this\n  // function will silently decide not to build a shadow decl, which\n  // will pre-empt further diagnostics.\n  //\n  // We don\'t need to do this in C++11 because we do the check once on\n  // the qualifier.\n  //\n  // FIXME: diagnose the following if we care enough:\n  //  struct A { int foo; };\n  //  struct B : A { using A::foo; };\n  //  template <class T> struct C : A {};\n  //  template <class T> struct D : C<T> { using B::foo; } // <---\n  // This is invalid (during instantiation) in C++03 because B::foo\n  // resolves to the using decl in B, which is not a base class of D<T>.\n  // We can\'t diagnose it immediately because C<T> is an unknown\n  // specialization. The UsingShadowDecl in D<T> then points directly\n  // to A::foo, which will look well-formed when we instantiate.\n  // The right solution is to not collapse the shadow-decl chain.\n  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n        Diag(Orig->getLocation(), diag::note_using_decl_target);"},{y,12277,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  // Always emit a diagnostic for a mismatch between an unresolved\n  // using_if_exists and a resolved using declaration in either direction.\n  if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12308,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (FunctionDecl *FD = Target->getAsFunction()) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12321,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  if (isa<TagDecl>(Target)) {\n    Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12331,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n  Diag(Target->getLocation(), diag::note_using_decl_target);"},{y,12778,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n    // If we asked for a typename and got a non-type decl, error out.\n    if (!R.getAsSingle<TypeDecl>() && !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) {\n      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)\n        Diag((*I)->getUnderlyingDecl()->getLocation(), diag::note_using_decl_target);"},{y,12787,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  if (HasTypenameKeyword) {\n  } else {\n    // If we asked for a non-typename and we got a type, error out,\n    // but only if this is an instantiation of an unresolved using\n    // decl.  Otherwise just silently find the type name.\n    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {\n      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);"},{jc,858,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // C++2a [module.interface]p5:\n  //  all entities to which all of the using-declarators ultimately refer\n  //  shall have been introduced with a name having external linkage\n  if (auto *USD = dyn_cast<UsingShadowDecl>(D)) {\n    if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n      S.Diag(Target->getLocation(), diag::note_using_decl_target);"},{x,1980,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n    if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n      Diag(Shadow->getTargetDecl()->getLocation(), diag::note_using_decl_target);"}}
},
},
["note_using_enum_decl"]={
["note_using_enum_decl"]={
Line 4,208: Line 4,208:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{y,11050,"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]={{y,12842,"NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation NameLoc, TypeSourceInfo *EnumType, EnumDecl *ED) {\n  if (CurContext->getRedeclContext()->isRecord()) {\n    for (NamedDecl *D : Previous)\n      if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D))\n        if (UED->getEnumDecl() == ED) {\n          Diag(D->getLocation(), diag::note_using_enum_decl) << 1;"}}
},
},
["note_using_value_decl_missing_typename"]={
["note_using_value_decl_missing_typename"]={
Line 4,220: Line 4,220:
[e]=k,
[e]=k,
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using"},
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using"},
[j]={{x,9101,"/// 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]={{x,11073,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  case LookupResult::FoundUnresolvedValue: {\n    if (UnresolvedUsingValueDecl *Using = dyn_cast<UnresolvedUsingValueDecl>(Result.getRepresentativeDecl())) {\n      Diag(Loc, diag::note_using_value_decl_missing_typename) << FixItHint::CreateInsertion(Loc, \"typename \");"}}
},
},
["note_valid_options"]={
["note_valid_options"]={
Line 4,232: Line 4,232:
[e]=l,
[e]=l,
[i]={"3ec1743d0d77",1518131655,"Make march/target-cpu print a note with the list of valid values for ARM"},
[i]={"3ec1743d0d77",1518131655,"Make march/target-cpu print a note with the list of valid values for ARM"},
[j]={{"clang/lib/Basic/Targets.cpp",726,"/// 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",736,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"}}
[j]={{"clang/lib/Basic/Targets.cpp",792,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"},{"clang/lib/Basic/Targets.cpp",803,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    if (!ValidList.empty())\n      Diags.Report(diag::note_valid_options) << llvm::join(ValidList, \", \");"}}
},
},
["note_value_initialization_here"]={
["note_value_initialization_here"]={
Line 4,244: Line 4,244:
[e]=k,
[e]=k,
[i]={"593f993a6855",1354932077,"Implement C++03 [dcl.init]p5\'s checking for value-initialization of references"},
[i]={"593f993a6855",1354932077,"Implement C++03 [dcl.init]p5\'s checking for value-initialization of references"},
[j]={{U,8015,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto *FI : RD->fields()) {\n    if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"},{U,8022,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto &BI : RD->bases()) {\n    if (DiagnoseUninitializedReference(S, BI.getBeginLoc(), BI.getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"}}
[j]={{U,9445,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto *FI : RD->fields()) {\n    if (DiagnoseUninitializedReference(S, FI->getLocation(), FI->getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"},{U,9452,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  for (const auto &BI : RD->bases()) {\n    if (DiagnoseUninitializedReference(S, BI.getBeginLoc(), BI.getType())) {\n      S.Diag(Loc, diag::note_value_initialization_here) << RD;"}}
},
},
["note_var_declared_here"]={
["note_var_declared_here"]={
Line 4,256: Line 4,256:
[e]=k,
[e]=k,
[i]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[i]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[j]={{I,935,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n  // Report where the variable was declared when the use wasn\'t within\n  // the initializer of that declaration & we didn\'t already suggest\n  // an initialization fixit.\n  if (!SuggestInitializationFixit(S, VD))\n    S.Diag(VD->getBeginLoc(), diag::note_var_declared_here) << VD->getDeclName();"},{v,7399,"/// Check if \'E\', which is an expression that is about to be modified, refers\n/// to a constructor parameter that shadows a field.\nvoid Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {\n  Diag(D->getLocation(), diag::note_var_declared_here) << D;"},{y,9965,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    if (Sel == USS_InvalidMember) {\n      S.Diag(VD->getLocation(), diag::note_var_declared_here) << VD << VD->getSourceRange();"}}
[j]={{I,1052,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n  // Report where the variable was declared when the use wasn\'t within\n  // the initializer of that declaration & we didn\'t already suggest\n  // an initialization fixit.\n  if (!SuggestInitializationFixit(S, VD))\n    S.Diag(VD->getBeginLoc(), diag::note_var_declared_here) << VD->getDeclName();"},{v,8386,"/// Check if \'E\', which is an expression that is about to be modified, refers\n/// to a constructor parameter that shadows a field.\nvoid Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {\n  Diag(D->getLocation(), diag::note_var_declared_here) << D;"},{y,11599,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    if (Sel == USS_InvalidMember) {\n      S.Diag(VD->getLocation(), diag::note_var_declared_here) << VD << VD->getSourceRange();"}}
},
},
["note_var_explicitly_captured_here"]={
["note_var_explicitly_captured_here"]={
Line 4,268: Line 4,268:
[e]="Lambda Issue",
[e]="Lambda Issue",
[i]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"},
[i]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"},
[j]={{v,7352,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  if (!CaptureLoc.isInvalid())\n    Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Name << /*explicitly*/ 1;"},{v,7366,"/// 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",1170,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n      if (Capture.Id == Param->getIdentifier()) {\n        Diag(Capture.Loc, diag::note_var_explicitly_captured_here) << Capture.Id << true;"},{w,18924,"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]={{v,8332,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  if (!CaptureLoc.isInvalid())\n    Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Name << /*explicitly*/ 1;"},{v,8351,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    if (!CaptureLoc.isInvalid())\n      Diag(CaptureLoc, diag::note_var_explicitly_captured_here) << Shadow.VD->getDeclName() << /*explicitly*/ 0;"},{"clang/lib/Sema/SemaLambda.cpp",1352,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n      if (Capture.Id == Param->getIdentifier()) {\n        Diag(Capture.Loc, diag::note_var_explicitly_captured_here) << Capture.Id << true;"},{w,23126,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  if (SemaRef.LangOpts.OpenMP >= 50 && (SemaRef.getCurLambda(/*IgnoreNonLambdaCapturingScope=*/true) || SemaRef.getCurBlock() || SemaRef.getCurCapturedRegion()) && VD->hasGlobalStorage()) {\n    if (!MapTy || (*MapTy != OMPDeclareTargetDeclAttr::MT_To && *MapTy != OMPDeclareTargetDeclAttr::MT_Enter)) {\n      SemaRef.Diag(SL, diag::note_var_explicitly_captured_here) << VD << 0 << SR;"}}
},
},
["note_var_fixit_add_initialization"]={
["note_var_fixit_add_initialization"]={
Line 4,280: Line 4,280:
[e]=k,
[e]=k,
[i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental"},
[i]={"2959fdd087e7",1295638906,"Add basic fixits for -Wuninitialized-experimental"},
[j]={{I,715,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n  S.Diag(Loc, diag::note_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(Loc, Init);"}}
[j]={{I,797,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n  S.Diag(Loc, diag::note_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(Loc, Init);"}}
},
},
["note_var_prev_partial_spec_here"]={
["note_var_prev_partial_spec_here"]={
Line 4,292: Line 4,292:
[e]=k,
[e]=k,
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3597,"/// Instantiate the declaration of a variable template partial\n/// specialization.\n///\n/// \\param VarTemplate the (instantiated) variable template that is partially\n/// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) variable template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nVarTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_var_prev_partial_spec_here);"}}
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4370,"/// Instantiate the declaration of a variable template partial\n/// specialization.\n///\n/// \\param VarTemplate the (instantiated) variable template that is partially\n/// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) variable template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nVarTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) {\n  if (PrevDecl) {\n    SemaRef.Diag(PrevDecl->getLocation(), diag::note_var_prev_partial_spec_here);"}}
},
},
["note_vbase_moved_here"]={
["note_vbase_moved_here"]={
Line 4,304: Line 4,304:
[e]=k,
[e]=k,
[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move"},
[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move"},
[j]={{y,12938,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << Existing->getType() << Existing->getSourceRange();"},{y,12939,"/// 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]={{y,15085,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << Existing->getType() << Existing->getSourceRange();"},{y,15089,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  for (auto &BI : Class->bases()) {\n    while (!Worklist.empty()) {\n      if (BaseSpec->isVirtual()) {\n        if (Existing && Existing != &BI) {\n          S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here) << (Base->getCanonicalDecl() == BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) << Base << BI.getType() << BaseSpec->getSourceRange();"}}
},
},
["note_verify_ambiguous_marker"]={
["note_verify_ambiguous_marker"]={
Line 4,316: Line 4,316:
[e]=l,
[e]=l,
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."},
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."},
[j]={{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",352,"// 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",353,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.RedefLoc, diag::note_verify_ambiguous_marker) << Name;"}}
[j]={{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",387,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.DefLoc, diag::note_verify_ambiguous_marker) << Name;"},{"clang/lib/Frontend/VerifyDiagnosticConsumer.cpp",388,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n//  n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n//  // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n  // Ensure we have no remaining deferred directives, and no\n  // multiply-defined-and-used markers.\n  void finalize() {\n    for (auto &MarkerInfo : Markers) {\n      if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n        Diags.Report(M.RedefLoc, diag::note_verify_ambiguous_marker) << Name;"}}
},
},
["note_vla_unsupported"]={
["note_vla_unsupported"]={
Line 4,328: Line 4,328:
[e]=k,
[e]=k,
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported"},
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported"},
[j]={{w,16008,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n          S.Diag(ELoc, diag::note_vla_unsupported);"},{w,16012,"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]={{w,19504,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n          S.Diag(ELoc, diag::note_vla_unsupported);"},{w,19508,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n        } else {\n          S.targetDiag(ELoc, diag::note_vla_unsupported);"}}
},
},
["note_which_delegates_to"]={
["note_which_delegates_to"]={
Line 4,340: Line 4,340:
[e]=k,
[e]=k,
[i]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection."},
[i]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection."},
[j]={{y,15860,"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]={{y,18554,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      while (C->getCanonicalDecl() != Canonical) {\n        S.Diag(C->getLocation(), diag::note_which_delegates_to);"}}
},
},
["note_while_in_implementation"]={
["note_while_in_implementation"]={
Line 4,352: Line 4,352:
[e]=k,
[e]=k,
[i]={"d6886e7fad5e",1336500219,"Fixes a typo. note_xxx not not_xxx."},
[i]={"d6886e7fad5e",1336500219,"Fixes a typo. note_xxx not not_xxx."},
[j]={{E,1560,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"},{E,1573,"/// 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]={{E,1960,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"},{E,1976,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (PIDecl && !Prop->isUnavailable()) {\n      Diag(IMPDecl->getLocation(), diag::note_while_in_implementation);"}}
},
},
["note_widen_bitfield"]={
["note_widen_bitfield"]={
Line 4,364: Line 4,364:
[e]=k,
[e]=k,
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[j]={{F,12617,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield) << BitsNeeded << ED << WidthExpr->getSourceRange();"}}
[j]={{F,14111,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield) << BitsNeeded << ED << WidthExpr->getSourceRange();"}}
},
},
["note_within_field_of_type"]={
["note_within_field_of_type"]={
Line 4,376: Line 4,376:
[e]=k,
[e]=k,
[i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[j]={{v,8425,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      S.Diag(OrigRecDecl->getLocation(), diag::note_within_field_of_type) << OrigRecDecl->getDeclName();"},{v,8431,"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",89,"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]={{v,9585,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      S.Diag(OrigRecDecl->getLocation(), diag::note_within_field_of_type) << OrigRecDecl->getDeclName();"},{v,9595,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      // We have an error, now let\'s go back up through history and show where\n      // the offending field came from\n      for (ArrayRef<const FieldDecl *>::const_iterator I = HistoryStack.begin() + 1, E = HistoryStack.end(); I != E; ++I) {\n        S.Diag(OuterField->getLocation(), diag::note_within_field_of_type) << OuterField->getType();"},{"clang/lib/Sema/SemaSYCL.cpp",98,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  do {\n    auto EmitHistory = [&]() {\n      // The first element is always nullptr.\n      for (uint64_t Index = 1; Index < History.size(); ++Index) {\n        SYCLDiagIfDeviceCode(History[Index]->getLocation(), diag::note_within_field_of_type) << History[Index]->getType();"}}
},
},
["note_xor_used_as_pow_silence"]={
["note_xor_used_as_pow_silence"]={
Line 4,388: Line 4,388:
[e]=k,
[e]=k,
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"},
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"},
[j]={{C,11782,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0x2 ^ \" + RHSStr) << SuggestXor;"},{C,11786,"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]={{C,13691,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0x2 ^ \" + RHSStr) << SuggestXor;"},{C,13903,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n  } else if (LeftSideValue == 10) {\n    S.Diag(Loc, diag::note_xor_used_as_pow_silence) << (\"0xA ^ \" + RHSStr) << SuggestXor;"}}
},
},
["null_in_char_or_string"]={
["null_in_char_or_string"]={
Line 4,402: Line 4,402:
[e]=G,
[e]=G,
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"},
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"},
[j]={{kb,1925,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{kb,2046,"/// LexAngledStringLiteral - Lex the remainder of an angled string literal,\n/// after having lexed the \'<\' character.  This is used for #include filenames.\nbool Lexer::LexAngledStringLiteral(Token &Result, const char *CurPtr) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{kb,2134,"/// 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]={{kb,2127,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{kb,2251,"/// LexAngledStringLiteral - Lex the remainder of an angled string literal,\n/// after having lexed the \'<\' character.  This is used for #include filenames.\nbool Lexer::LexAngledStringLiteral(Token &Result, const char *CurPtr) {\n  // If a nul character existed in the string, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 1;"},{kb,2349,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If a nul character existed in the character, warn about it.\n  if (NulCharacter && !isLexingRawMode())\n    Diag(NulCharacter, diag::null_in_char_or_string) << 0;"}}
},
},
["null_in_file"]={
["null_in_file"]={
Line 4,416: Line 4,416:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{kb,3368,"LexStart:\n  case 0: // Null.\n    if (!isLexingRawMode())\n      Diag(CurPtr - 1, diag::null_in_file);"}}
[j]={{kb,3641,"LexStart:\n  case 0: // Null.\n    if (!isLexingRawMode())\n      Diag(CurPtr - 1, diag::null_in_file);"}}
},
},
["override_keyword_hides_virtual_member_function"]={
["override_keyword_hides_virtual_member_function"]={
Line 4,428: Line 4,428:
[e]=k,
[e]=k,
[i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func."},
[i]={"af65120bd382",1378425063,"Improve error for \"override\" + non-virtual func."},
[j]={{y,2763,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n        Diag(OA->getLocation(), diag::override_keyword_hides_virtual_member_function) << \"override\" << (OverloadedMethods.size() > 1);"},{y,2765,"/// 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]={{y,3244,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n        Diag(OA->getLocation(), diag::override_keyword_hides_virtual_member_function) << \"override\" << (OverloadedMethods.size() > 1);"},{y,3248,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (MD && !MD->isVirtual()) {\n    if (!OverloadedMethods.empty()) {\n      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      } else if (FinalAttr *FA = D->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::override_keyword_hides_virtual_member_function) << (FA->isSpelledAsSealed() ? \"sealed\" : \"final\") << (OverloadedMethods.size() > 1);"}}
},
},
["override_keyword_only_allowed_on_virtual_member_functions"]={
["override_keyword_only_allowed_on_virtual_member_functions"]={
Line 4,440: Line 4,440:
[e]=k,
[e]=k,
[i]={"13a69102d779",1295498062,"Only allow virtual member functions to be marked \'override\' and \'final\'."},
[i]={"13a69102d779",1295498062,"Only allow virtual member functions to be marked \'override\' and \'final\'."},
[j]={{y,2777,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      Diag(OA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << \"override\" << FixItHint::CreateRemoval(OA->getLocation());"},{y,2781,"/// 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]={{y,3263,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {\n      Diag(OA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << \"override\" << FixItHint::CreateRemoval(OA->getLocation());"},{y,3269,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  if (!MD || !MD->isVirtual()) {\n    if (FinalAttr *FA = D->getAttr<FinalAttr>()) {\n      Diag(FA->getLocation(), diag::override_keyword_only_allowed_on_virtual_member_functions) << (FA->isSpelledAsSealed() ? \"sealed\" : \"final\") << FixItHint::CreateRemoval(FA->getLocation());"}}
},
},
["pp_disabled_macro_expansion"]={
["pp_disabled_macro_expansion"]={
Line 4,455: Line 4,455:
[e]=G,
[e]=G,
[i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning."},
[i]={"123bec89ab8f",1325455264,"Added -Wdisabled-macro-expansion warning."},
[j]={{wc,591,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If this macro expands to no tokens, don\'t bother to push it onto the\n  // expansion stack, only to take it right back off.\n  if (MI->getNumTokens() == 0) {\n  } else if (MI->getNumTokens() == 1 && isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(), *this)) {\n    // If this is a disabled macro or #define X X, we must mark the result as\n    // unexpandable.\n    if (IdentifierInfo *NewII = Identifier.getIdentifierInfo()) {\n      if (MacroInfo *NewMI = getMacroInfo(NewII))\n        if (!NewMI->isEnabled() || NewMI == MI) {\n          // Don\'t warn for \"#define X X\" like \"#define bool bool\" from\n          // stdbool.h.\n          if (NewMI != MI || MI->isFunctionLike())\n            Diag(Identifier, diag::pp_disabled_macro_expansion);"},{"clang/lib/Lex/Preprocessor.cpp",742,"/// HandleIdentifier - This callback is invoked when the lexer reads an\n/// identifier.  This callback looks up the identifier in the map and/or\n/// potentially macro expands it or turns it into a named token (like \'for\').\n///\n/// Note that callers of this method are guarded by checking the\n/// IdentifierInfo\'s \'isHandleIdentifierCase\' bit.  If this method changes, the\n/// IdentifierInfo methods that compute these properties will need to change to\n/// match.\nbool Preprocessor::HandleIdentifier(Token &Identifier) {\n  // If this is a macro to be expanded, do it.\n  if (MacroDefinition MD = getMacroDefinition(&II)) {\n    if (!DisableMacroExpansion) {\n      if (!Identifier.isExpandDisabled() && MI->isEnabled()) {\n      } else {\n        if (MI->isObjectLike() || isNextPPTokenLParen())\n          Diag(Identifier, diag::pp_disabled_macro_expansion);"}}
[j]={{wc,622,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n  // If this macro expands to no tokens, don\'t bother to push it onto the\n  // expansion stack, only to take it right back off.\n  if (MI->getNumTokens() == 0) {\n  } else if (MI->getNumTokens() == 1 && isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(), *this)) {\n    // If this is a disabled macro or #define X X, we must mark the result as\n    // unexpandable.\n    if (IdentifierInfo *NewII = Identifier.getIdentifierInfo()) {\n      if (MacroInfo *NewMI = getMacroInfo(NewII))\n        if (!NewMI->isEnabled() || NewMI == MI) {\n          // Don\'t warn for \"#define X X\" like \"#define bool bool\" from\n          // stdbool.h.\n          if (NewMI != MI || MI->isFunctionLike())\n            Diag(Identifier, diag::pp_disabled_macro_expansion);"},{"clang/lib/Lex/Preprocessor.cpp",833,"/// HandleIdentifier - This callback is invoked when the lexer reads an\n/// identifier.  This callback looks up the identifier in the map and/or\n/// potentially macro expands it or turns it into a named token (like \'for\').\n///\n/// Note that callers of this method are guarded by checking the\n/// IdentifierInfo\'s \'isHandleIdentifierCase\' bit.  If this method changes, the\n/// IdentifierInfo methods that compute these properties will need to change to\n/// match.\nbool Preprocessor::HandleIdentifier(Token &Identifier) {\n  // If this is a macro to be expanded, do it.\n  if (MacroDefinition MD = getMacroDefinition(&II)) {\n    if (!DisableMacroExpansion) {\n      if (!Identifier.isExpandDisabled() && MI->isEnabled()) {\n      } else {\n        if (MI->isObjectLike() || isNextPPTokenLParen())\n          Diag(Identifier, diag::pp_disabled_macro_expansion);"}}
},
},
["pp_err_elif_after_else"]={
["pp_err_elif_after_else"]={
Line 4,467: Line 4,467:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,656,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << PED_Elif;"},{S,707,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << (IsElifDef ? PED_Elifdef : PED_Elifndef);"},{S,3188,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  // If this is a #elif with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(ElifToken, diag::pp_err_elif_after_else) << DirKind;"}}
[j]={{S,721,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << PED_Elif;"},{S,777,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        // If this is a #elif with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_elif_after_else) << (IsElifDef ? PED_Elifdef : PED_Elifndef);"},{S,3482,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  // If this is a #elif with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(ElifToken, diag::pp_err_elif_after_else) << DirKind;"}}
},
},
["pp_err_elif_without_if"]={
["pp_err_elif_without_if"]={
Line 4,479: Line 4,479:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,3178,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(ElifToken, diag::pp_err_elif_without_if) << DirKind;"}}
[j]={{S,3472,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(ElifToken, diag::pp_err_elif_without_if) << DirKind;"}}
},
},
["pp_err_else_after_else"]={
["pp_err_else_after_else"]={
Line 4,491: Line 4,491:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,628,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n        // If this is a #else with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_else_after_else);"},{S,3130,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  // If this is a #else with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(Result, diag::pp_err_else_after_else);"}}
[j]={{S,693,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n        // If this is a #else with a #else before it, report the error.\n        if (CondInfo.FoundElse)\n          Diag(Tok, diag::pp_err_else_after_else);"},{S,3417,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  // If this is a #else with a #else before it, report the error.\n  if (CI.FoundElse)\n    Diag(Result, diag::pp_err_else_after_else);"}}
},
},
["pp_err_else_without_if"]={
["pp_err_else_without_if"]={
Line 4,503: Line 4,503:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,3120,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(Result, diag::pp_err_else_without_if);"}}
[j]={{S,3408,"/// HandleElseDirective - Implements the \\#else directive.\n///\nvoid Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {\n  if (CurPPLexer->popConditionalLevel(CI)) {\n    Diag(Result, diag::pp_err_else_without_if);"}}
},
},
["pp_hash_warning"]={
["pp_hash_warning"]={
Line 4,517: Line 4,517:
[e]="User-Defined Issue",
[e]="User-Defined Issue",
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,1524,"/// HandleUserDiagnosticDirective - Handle a #warning or #error directive.\n///\nvoid Preprocessor::HandleUserDiagnosticDirective(Token &Tok, bool isWarning) {\n  if (isWarning)\n    Diag(Tok, diag::pp_hash_warning) << Msg;"},{"clang/unittests/Basic/DiagnosticTest.cpp",139,"TEST(DiagnosticTest, storedDiagEmptyWarning) {\n  Diags.Report(diag::pp_hash_warning) << \"\";"}}
[j]={{S,1656,"/// HandleUserDiagnosticDirective - Handle a #warning or #error directive.\n///\nvoid Preprocessor::HandleUserDiagnosticDirective(Token &Tok, bool isWarning) {\n  if (isWarning)\n    Diag(Tok, diag::pp_hash_warning) << Msg;"},{"clang/unittests/Basic/DiagnosticTest.cpp",149,"TEST(DiagnosticTest, storedDiagEmptyWarning) {\n  Diags.Report(diag::pp_hash_warning) << \"\";"}}
},
},
["pp_include_macros_out_of_predefines"]={
["pp_include_macros_out_of_predefines"]={
Line 4,529: Line 4,529:
[e]=G,
[e]=G,
[i]={"58a1eb0ba0e0",1239216400,"reject the #__include_macros directive unless it comes from the "},
[i]={"58a1eb0ba0e0",1239216400,"reject the #__include_macros directive unless it comes from the "},
[j]={{S,2396,"/// HandleIncludeMacrosDirective - The -imacros command line option turns into a\n/// pseudo directive in the predefines buffer.  This handles it by sucking all\n/// tokens through the preprocessor and discarding them (only keeping the side\n/// effects on the preprocessor).\nvoid Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, Token &IncludeMacrosTok) {\n  if (SourceMgr.getBufferName(Loc) != \"<built-in>\") {\n    Diag(IncludeMacrosTok.getLocation(), diag::pp_include_macros_out_of_predefines);"}}
[j]={{S,2639,"/// HandleIncludeMacrosDirective - The -imacros command line option turns into a\n/// pseudo directive in the predefines buffer.  This handles it by sucking all\n/// tokens through the preprocessor and discarding them (only keeping the side\n/// effects on the preprocessor).\nvoid Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, Token &IncludeMacrosTok) {\n  if (SourceMgr.getBufferName(Loc) != \"<built-in>\") {\n    Diag(IncludeMacrosTok.getLocation(), diag::pp_include_macros_out_of_predefines);"}}
},
},
["pp_include_next_absolute_path"]={
["pp_include_next_absolute_path"]={
Line 4,543: Line 4,543:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,1797,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n  } else if (CurLexerSubmodule) {\n  } else if (!Lookup) {\n    Diag(IncludeNextTok, diag::pp_include_next_absolute_path);"}}
[j]={{S,1948,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n  } else if (CurLexerSubmodule) {\n  } else if (!Lookup) {\n    Diag(IncludeNextTok, diag::pp_include_next_absolute_path);"}}
},
},
["pp_include_next_in_primary"]={
["pp_include_next_in_primary"]={
Line 4,557: Line 4,557:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,1785,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n    Diag(IncludeNextTok, diag::pp_include_next_in_primary);"}}
[j]={{S,1936,"std::pair<ConstSearchDirIterator, const FileEntry *> Preprocessor::getIncludeNextStart(const Token &IncludeNextTok) const {\n  if (isInPrimaryFile() && LangOpts.IsHeaderFile) {\n  } else if (isInPrimaryFile()) {\n    Diag(IncludeNextTok, diag::pp_include_next_in_primary);"}}
},
},
["pp_invalid_string_literal"]={
["pp_invalid_string_literal"]={
Line 4,569: Line 4,569:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{"clang/lib/Lex/MacroArgs.cpp",259,"/// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of\n/// tokens into the literal string token that should be produced by the C #\n/// preprocessor operator.  If Charify is true, then it should be turned into\n/// a character literal for the Microsoft charize (#@) extension.\n///\nToken MacroArgs::StringifyArgument(const Token *ArgToks, Preprocessor &PP, bool Charify, SourceLocation ExpansionLocStart, SourceLocation ExpansionLocEnd) {\n  // If the last character of the string is a \\, and if it isn\'t escaped, this\n  // is an invalid string literal, diagnose it as specified in C99.\n  if (Result.back() == \'\\\\\') {\n    if ((Result.size() - 1 - FirstNonSlash) & 1) {\n      PP.Diag(ArgToks[-1], diag::pp_invalid_string_literal);"}}
[j]={{"clang/lib/Lex/MacroArgs.cpp",279,"/// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of\n/// tokens into the literal string token that should be produced by the C #\n/// preprocessor operator.  If Charify is true, then it should be turned into\n/// a character literal for the Microsoft charize (#@) extension.\n///\nToken MacroArgs::StringifyArgument(const Token *ArgToks, Preprocessor &PP, bool Charify, SourceLocation ExpansionLocStart, SourceLocation ExpansionLocEnd) {\n  // If the last character of the string is a \\, and if it isn\'t escaped, this\n  // is an invalid string literal, diagnose it as specified in C99.\n  if (Result.back() == \'\\\\\') {\n    if ((Result.size() - 1 - FirstNonSlash) & 1) {\n      PP.Diag(ArgToks[-1], diag::pp_invalid_string_literal);"}}
},
},
["pp_macro_not_used"]={
["pp_macro_not_used"]={
Line 4,584: Line 4,584:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{S,2864,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Finally, if this identifier already had a macro defined for it, verify that\n  // the macro bodies are identical, and issue diagnostics if they are not.\n  if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n    // It is very common for system headers to have tons of macro redefinitions\n    // and for warnings to be disabled in system headers.  If this is the case,\n    // then don\'t bother calling MacroInfo::isIdenticalTo.\n    if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n      if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused())\n        Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);"},{S,2886,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && !MacroExpansionInDirectivesOverride && getSourceManager().getFileID(MI->getDefinitionLoc()) != getPredefinesFileID()) {"},{S,2937,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n  // If the macro is not defined, this is a noop undef.\n  if (const MacroInfo *MI = MD.getMacroInfo()) {\n    if (!MI->isUsed() && MI->isWarnIfUnused())\n      Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);"},{"clang/lib/Lex/PPLexerChange.cpp",503,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (TUKind == TU_Complete) {\n    // This is the end of the top-level file. \'WarnUnusedMacroLocs\' has\n    // collected all macro locations that we need to warn because they are not\n    // used.\n    for (WarnUnusedMacroLocsTy::iterator I = WarnUnusedMacroLocs.begin(), E = WarnUnusedMacroLocs.end(); I != E; ++I)\n      Diag(*I, diag::pp_macro_not_used);"}}
[j]={{S,3131,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Finally, if this identifier already had a macro defined for it, verify that\n  // the macro bodies are identical, and issue diagnostics if they are not.\n  if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n    // It is very common for system headers to have tons of macro redefinitions\n    // and for warnings to be disabled in system headers.  If this is the case,\n    // then don\'t bother calling MacroInfo::isIdenticalTo.\n    if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n      if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused())\n        Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);"},{S,3157,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && !MacroExpansionInDirectivesOverride && getSourceManager().getFileID(MI->getDefinitionLoc()) != getPredefinesFileID()) {"},{S,3213,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n  // If the macro is not defined, this is a noop undef.\n  if (const MacroInfo *MI = MD.getMacroInfo()) {\n    if (!MI->isUsed() && MI->isWarnIfUnused())\n      Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);"},{"clang/lib/Lex/PPLexerChange.cpp",584,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (TUKind == TU_Complete) {\n    // This is the end of the top-level file. \'WarnUnusedMacroLocs\' has\n    // collected all macro locations that we need to warn because they are not\n    // used.\n    for (WarnUnusedMacroLocsTy::iterator I = WarnUnusedMacroLocs.begin(), E = WarnUnusedMacroLocs.end(); I != E; ++I)\n      Diag(*I, diag::pp_macro_not_used);"}}
},
},
["pp_nonportable_path"]={
["pp_nonportable_path"]={
Line 4,598: Line 4,598:
[e]=G,
[e]=G,
[i]={"fc5d13d9b180",1464979971,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[i]={"fc5d13d9b180",1464979971,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[j]={{S,2255,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
[j]={{S,2487,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
},
},
["pp_nonportable_system_path"]={
["pp_nonportable_system_path"]={
Line 4,613: Line 4,613:
[e]=G,
[e]=G,
[i]={"e8533670bf22",1465837398,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[i]={"e8533670bf22",1465837398,"Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import p..."},
[j]={{S,2255,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
[j]={{S,2488,"#endif\n      auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? diag::pp_nonportable_path : diag::pp_nonportable_system_path;"}}
},
},
["pp_out_of_date_dependency"]={
["pp_out_of_date_dependency"]={
Line 4,625: Line 4,625:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{Hb,547,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // If this file is older than the file it depends on, emit a diagnostic.\n  if (CurFile && CurFile->getModificationTime() < File->getModificationTime()) {\n    Diag(FilenameTok, diag::pp_out_of_date_dependency) << Message;"}}
[j]={{Hb,567,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // If this file is older than the file it depends on, emit a diagnostic.\n  if (CurFile && CurFile->getModificationTime() < File->getModificationTime()) {\n    Diag(FilenameTok, diag::pp_out_of_date_dependency) << Message;"}}
},
},
["pp_poisoning_existing_macro"]={
["pp_poisoning_existing_macro"]={
Line 4,637: Line 4,637:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{Hb,460,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\n    // If this is a macro identifier, emit a warning.\n    if (isMacroDefined(II))\n      Diag(Tok, diag::pp_poisoning_existing_macro);"}}
[j]={{Hb,474,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\n    // If this is a macro identifier, emit a warning.\n    if (isMacroDefined(II))\n      Diag(Tok, diag::pp_poisoning_existing_macro);"}}
},
},
["pp_pragma_once_in_main_file"]={
["pp_pragma_once_in_main_file"]={
Line 4,651: Line 4,651:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{Hb,406,"/// HandlePragmaOnce - Handle \\#pragma once.  OnceTok is the \'once\'.\nvoid Preprocessor::HandlePragmaOnce(Token &OnceTok) {\n  // Don\'t honor the \'once\' when handling the primary source file, unless\n  // this is a prefix to a TU, which indicates we\'re generating a PCH file, or\n  // when the main file is a header (e.g. when -xc-header is provided on the\n  // commandline).\n  if (isInPrimaryFile() && TUKind != TU_Prefix && !getLangOpts().IsHeaderFile) {\n    Diag(OnceTok, diag::pp_pragma_once_in_main_file);"}}
[j]={{Hb,424,"/// HandlePragmaOnce - Handle \\#pragma once.  OnceTok is the \'once\'.\nvoid Preprocessor::HandlePragmaOnce(Token &OnceTok) {\n  // Don\'t honor the \'once\' when handling the primary source file, unless\n  // this is a prefix to a TU, which indicates we\'re generating a PCH file, or\n  // when the main file is a header (e.g. when -xc-header is provided on the\n  // commandline).\n  if (isInPrimaryFile() && TUKind != TU_Prefix && !getLangOpts().IsHeaderFile) {\n    Diag(OnceTok, diag::pp_pragma_once_in_main_file);"}}
},
},
["pp_pragma_sysheader_in_main_file"]={
["pp_pragma_sysheader_in_main_file"]={
Line 4,665: Line 4,665:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{Hb,473,"/// HandlePragmaSystemHeader - Implement \\#pragma GCC system_header.  We know\n/// that the whole directive has been parsed.\nvoid Preprocessor::HandlePragmaSystemHeader(Token &SysHeaderTok) {\n  if (isInPrimaryFile()) {\n    Diag(SysHeaderTok, diag::pp_pragma_sysheader_in_main_file);"}}
[j]={{Hb,487,"/// HandlePragmaSystemHeader - Implement \\#pragma GCC system_header.  We know\n/// that the whole directive has been parsed.\nvoid Preprocessor::HandlePragmaSystemHeader(Token &SysHeaderTok) {\n  if (isInPrimaryFile()) {\n    Diag(SysHeaderTok, diag::pp_pragma_sysheader_in_main_file);"}}
},
},
["remark_cc1_round_trip_generated"]={
["remark_cc1_round_trip_generated"]={
Line 4,680: Line 4,680:
[e]=l,
[e]=l,
[i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",625,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{"clang/lib/Frontend/CompilerInvocation.cpp",626,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 2 << SerializeArgs(ComparisonArgs);"},{"clang/tools/driver/cc1_main.cpp",202,"int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {\n  // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.\n  if (find(Argv, StringRef(\"-Rround-trip-cc1-args\")) != Argv.end())\n    Diags.setSeverity(diag::remark_cc1_round_trip_generated, diag::Severity::Remark, {});"}}
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",791,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{"clang/lib/Frontend/CompilerInvocation.cpp",793,"#endif\n  Diags.Report(diag::remark_cc1_round_trip_generated) << 2 << SerializeArgs(ComparisonArgs);"},{"clang/tools/driver/cc1_main.cpp",211,"int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {\n  // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.\n  if (find(Argv, StringRef(\"-Rround-trip-cc1-args\")) != Argv.end())\n    Diags.setSeverity(diag::remark_cc1_round_trip_generated, diag::Severity::Remark, {});"}}
},
},
["remark_fe_backend_optimization_remark"]={
["remark_fe_backend_optimization_remark"]={
Line 4,695: Line 4,695:
[e]=Zb,
[e]=Zb,
[i]={"829b1700484d",1397667264,"Add support for optimization reports."},
[i]={"829b1700484d",1397667264,"Add support for optimization reports."},
[j]={{rc,660,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n    // Optimization remarks are active only if the -Rpass flag has a regular\n    // expression that matches the name of the pass name in \\p D.\n    if (CodeGenOpts.OptimizationRemark.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark);"}}
[j]={{rc,796,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n    // Optimization remarks are active only if the -Rpass flag has a regular\n    // expression that matches the name of the pass name in \\p D.\n    if (CodeGenOpts.OptimizationRemark.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark);"}}
},
},
["remark_fe_backend_optimization_remark_analysis"]={
["remark_fe_backend_optimization_remark_analysis"]={
Line 4,710: Line 4,710:
[e]=Zb,
[e]=Zb,
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[j]={{rc,675,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n  } else {\n    if (ShouldAlwaysPrint || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis);"}}
[j]={{rc,814,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n  } else {\n    if (ShouldAlwaysPrint || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis);"}}
},
},
["remark_fe_backend_optimization_remark_analysis_aliasing"]={
["remark_fe_backend_optimization_remark_analysis_aliasing"]={
Line 4,725: Line 4,725:
[e]=Zb,
[e]=Zb,
[i]={"034baf615477",1439247916,"Append options for vectorization when pointer checking threshold is exceeded."},
[i]={"034baf615477",1439247916,"Append options for vectorization when pointer checking threshold is exceeded."},
[j]={{rc,694,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisAliasing &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_aliasing);"}}
[j]={{rc,839,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisAliasing &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_aliasing);"}}
},
},
["remark_fe_backend_optimization_remark_analysis_fpcommute"]={
["remark_fe_backend_optimization_remark_analysis_fpcommute"]={
Line 4,740: Line 4,740:
[e]=Zb,
[e]=Zb,
[i]={"8a0925cb627c",1439236600,"Append options for floating-point commutivity when related diagnostics are produced."},
[i]={"8a0925cb627c",1439236600,"Append options for floating-point commutivity when related diagnostics are produced."},
[j]={{rc,685,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisFPCommute &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute);"}}
[j]={{rc,827,"void BackendConsumer::OptimizationRemarkHandler(const llvm::OptimizationRemarkAnalysisFPCommute &D) {\n  if (D.shouldAlwaysPrint() || CodeGenOpts.OptimizationRemarkAnalysis.patternMatches(D.getPassName()))\n    EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute);"}}
},
},
["remark_fe_backend_optimization_remark_missed"]={
["remark_fe_backend_optimization_remark_missed"]={
Line 4,755: Line 4,755:
[e]=Zb,
[e]=Zb,
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[i]={"d23ec94393bf",1401393306,"Add flags -Rpass-missed and -Rpass-analysis."},
[j]={{rc,666,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n    // Missed optimization remarks are active only if the -Rpass-missed\n    // flag has a regular expression that matches the name of the pass\n    // name in \\p D.\n    if (CodeGenOpts.OptimizationRemarkMissed.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_missed);"}}
[j]={{rc,803,"void BackendConsumer::OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D) {\n  if (D.isPassed()) {\n  } else if (D.isMissed()) {\n    // Missed optimization remarks are active only if the -Rpass-missed\n    // flag has a regular expression that matches the name of the pass\n    // name in \\p D.\n    if (CodeGenOpts.OptimizationRemarkMissed.patternMatches(D.getPassName()))\n      EmitOptimizationMessage(D, diag::remark_fe_backend_optimization_remark_missed);"}}
},
},
["remark_fe_backend_plugin"]={
["remark_fe_backend_plugin"]={
Line 4,784: Line 4,784:
[e]=l,
[e]=l,
[i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark"},
[i]={"c95e56488d44",1399588562,"Switch Wmodule-build to a remark"},
[j]={{gc,1032,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build) << ModuleName << ModuleFileName;"}}
[j]={{gc,1259,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build) << ModuleName << ModuleFileName;"}}
},
},
["remark_module_build_done"]={
["remark_module_build_done"]={
Line 4,799: Line 4,799:
[e]=l,
[e]=l,
[i]={"99891da71a88",1413252510,"Extend -Rmodule-build to also remark when module building finishes."},
[i]={"99891da71a88",1413252510,"Extend -Rmodule-build to also remark when module building finishes."},
[j]={{gc,1047,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build_done) << ModuleName;"}}
[j]={{gc,1276,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  ImportingInstance.getDiagnostics().Report(ImportLoc, diag::remark_module_build_done) << ModuleName;"}}
},
},
["remark_module_import"]={
["remark_module_import"]={
Line 4,814: Line 4,814:
[e]="AST Deserialization Issue",
[e]="AST Deserialization Issue",
[i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import"},
[i]={"9dda8f540c8e",1551840646,"Modules: Add -Rmodule-import"},
[j]={{Qb,2651,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case MODULE_NAME:\n      Diag(diag::remark_module_import) << F.ModuleName << F.FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"},{Qb,4078,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  case ModuleManager::AlreadyLoaded:\n    Diag(diag::remark_module_import) << M->ModuleName << M->FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"}}
[j]={{Qb,2975,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case MODULE_NAME:\n      Diag(diag::remark_module_import) << F.ModuleName << F.FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"},{Qb,4592,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  case ModuleManager::AlreadyLoaded:\n    Diag(diag::remark_module_import) << M->ModuleName << M->FileName << (ImportedBy ? true : false) << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());"}}
},
},
["remark_module_lock"]={
["remark_module_lock"]={
Line 4,829: Line 4,829:
[e]=l,
[e]=l,
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"},
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"},
[j]={{gc,1174,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  Diags.Report(ModuleNameLoc, diag::remark_module_lock) << ModuleFileName << Module->Name;"}}
[j]={{gc,1441,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  Diags.Report(ModuleNameLoc, diag::remark_module_lock) << ModuleFileName << Module->Name;"}}
},
},
["remark_module_lock_failure"]={
["remark_module_lock_failure"]={
Line 4,844: Line 4,844:
[e]=Q,
[e]=Q,
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[j]={{gc,1188,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::LFS_Error:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_failure) << Module->Name << Locked.getErrorMessage();"}}
[j]={{gc,1456,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::LFS_Error:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_failure) << Module->Name << Locked.getErrorMessage();"}}
},
},
["remark_module_lock_timeout"]={
["remark_module_lock_timeout"]={
Line 4,859: Line 4,859:
[e]=Q,
[e]=Q,
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[i]={"5a0af1fcd16e",1489796778,"[Modules] In case of lock timeout, fallback and build module"},
[j]={{gc,1211,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::Res_Timeout:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_timeout) << Module->Name;"}}
[j]={{gc,1481,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors, using a lock manager\n/// to avoid building the same module in multiple compiler instances.\n///\n/// Uses a lock file manager and exponential backoff to reduce the chances that\n/// multiple instances will compete to create the same module.  On timeout,\n/// deletes the lock file in order to avoid deadlock from crashing processes or\n/// bugs in the lock file manager.\nstatic bool compileModuleAndReadASTBehindLock(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  while (true) {\n    case llvm::LockFileManager::Res_Timeout:\n      Diags.Report(ModuleNameLoc, diag::remark_module_lock_timeout) << Module->Name;"}}
},
},
["remark_pp_include_directive_modular_translation"]={
["remark_pp_include_directive_modular_translation"]={
Line 4,874: Line 4,874:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{S,1717,"/// Produce a diagnostic informing the user that a #include or similar\n/// was implicitly treated as a module import.\nstatic void diagnoseAutoModuleImport(Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, SourceLocation PathEnd) {\n  PP.Diag(HashLoc, diag::remark_pp_include_directive_modular_translation) << IncludeKind << PathString;"}}
[j]={{S,1858,"/// Produce a diagnostic informing the user that a #include or similar\n/// was implicitly treated as a module import.\nstatic void diagnoseAutoModuleImport(Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, SourceLocation PathEnd) {\n  PP.Diag(HashLoc, diag::remark_pp_include_directive_modular_translation) << IncludeKind << PathString;"}}
},
},
["remark_pp_search_path_usage"]={
["remark_pp_search_path_usage"]={
Line 4,889: Line 4,889:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{"clang/lib/Lex/HeaderSearch.cpp",660,"void HeaderSearch::noteLookupUsage(unsigned HitIdx, SourceLocation Loc) {\n  if (UserEntryIdxIt != SearchDirToHSEntry.end())\n    Diags.Report(Loc, diag::remark_pp_search_path_usage) << HSOpts->UserEntries[UserEntryIdxIt->second].Path;"}}
[j]={{"clang/lib/Lex/HeaderSearch.cpp",744,"void HeaderSearch::noteLookupUsage(unsigned HitIdx, SourceLocation Loc) {\n  if (UserEntryIdxIt != SearchDirToHSEntry.end())\n    Diags.Report(Loc, diag::remark_pp_search_path_usage) << HSOpts->UserEntries[UserEntryIdxIt->second].Path;"}}
},
},
["remark_sanitize_address_insert_extra_padding_accepted"]={
["remark_sanitize_address_insert_extra_padding_accepted"]={
Line 4,904: Line 4,904:
[e]=l,
[e]=l,
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[j]={{"clang/lib/AST/Decl.cpp",4443,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n    else\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_accepted) << getQualifiedNameAsString();"}}
[j]={{"clang/lib/AST/Decl.cpp",5004,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n    else\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_accepted) << getQualifiedNameAsString();"}}
},
},
["remark_sanitize_address_insert_extra_padding_rejected"]={
["remark_sanitize_address_insert_extra_padding_rejected"]={
Line 4,919: Line 4,919:
[e]=l,
[e]=l,
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[i]={"293dc9be6e36",1413492892,"Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-objec..."},
[j]={{"clang/lib/AST/Decl.cpp",4441,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_rejected) << getQualifiedNameAsString() << ReasonToReject;"}}
[j]={{"clang/lib/AST/Decl.cpp",4999,"bool RecordDecl::mayInsertExtraPadding(bool EmitRemark) const {\n  if (EmitRemark) {\n    if (ReasonToReject >= 0)\n      Context.getDiagnostics().Report(getLocation(), diag::remark_sanitize_address_insert_extra_padding_rejected) << getQualifiedNameAsString() << ReasonToReject;"}}
},
},
["remark_sloc_usage"]={
["remark_sloc_usage"]={
Line 4,933: Line 4,933:
[e]=l,
[e]=l,
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[i]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[j]={{Hb,1130,"struct PragmaDebugHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n    if (II->isStr(\"assert\")) {\n    } else if (II->isStr(\"crash\")) {\n    } else if (II->isStr(\"parser_crash\")) {\n    } else if (II->isStr(\"dump\")) {\n    } else if (II->isStr(\"diag_mapping\")) {\n    } else if (II->isStr(\"llvm_fatal_error\")) {\n    } else if (II->isStr(\"llvm_unreachable\")) {\n    } else if (II->isStr(\"macro\")) {\n    } else if (II->isStr(\"module_map\")) {\n    } else if (II->isStr(\"overflow_stack\")) {\n    } else if (II->isStr(\"captured\")) {\n    } else if (II->isStr(\"modules\")) {\n    } else if (II->isStr(\"sloc_usage\")) {\n      PP.Diag(Tok, diag::remark_sloc_usage);"},{Qb,3104,"llvm::Error ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case SOURCE_LOCATION_OFFSETS: {\n      if (!F.SLocEntryBaseID) {\n        if (!Diags.isDiagnosticInFlight()) {\n          Diags.Report(SourceLocation(), diag::remark_sloc_usage);"}}
[j]={{Hb,1202,"struct PragmaDebugHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n    if (II->isStr(\"assert\")) {\n    } else if (II->isStr(\"crash\")) {\n    } else if (II->isStr(\"parser_crash\")) {\n    } else if (II->isStr(\"dump\")) {\n    } else if (II->isStr(\"diag_mapping\")) {\n    } else if (II->isStr(\"llvm_fatal_error\")) {\n    } else if (II->isStr(\"llvm_unreachable\")) {\n    } else if (II->isStr(\"macro\")) {\n    } else if (II->isStr(\"module_map\")) {\n    } else if (II->isStr(\"overflow_stack\")) {\n    } else if (II->isStr(\"captured\")) {\n    } else if (II->isStr(\"modules\")) {\n    } else if (II->isStr(\"sloc_usage\")) {\n      PP.Diag(Tok, diag::remark_sloc_usage);"},{Qb,3487,"llvm::Error ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case SOURCE_LOCATION_OFFSETS: {\n      if (!F.SLocEntryBaseID) {\n        if (!Diags.isDiagnosticInFlight()) {\n          Diags.Report(SourceLocation(), diag::remark_sloc_usage);"}}
},
},
["trigraph_converted"]={
["trigraph_converted"]={
Line 4,947: Line 4,947:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{kb,1099,"/// 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]={{kb,1210,"/// DecodeTrigraphChar - If the specified character is a legal trigraph when\n/// prefixed with ??, emit a trigraph warning.  If trigraphs are enabled,\n/// return the result character.  Finally, emit a warning about trigraph use\n/// whether trigraphs are enabled or not.\nstatic char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) {\n  if (L && !L->isLexingRawMode())\n    L->Diag(CP - 2, diag::trigraph_converted) << StringRef(&Res, 1);"}}
},
},
["trigraph_ends_block_comment"]={
["trigraph_ends_block_comment"]={
Line 4,961: Line 4,961:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{kb,2465,"/// 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]={{kb,2690,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence.  Issue\n/// a diagnostic if so.  We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n  if (TrigraphPos) {\n    if (!L->isLexingRawMode())\n      L->Diag(TrigraphPos, diag::trigraph_ends_block_comment);"}}
},
},
["trigraph_ignored"]={
["trigraph_ignored"]={
Line 4,975: Line 4,975:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{kb,1094,"/// 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]={{kb,1205,"/// DecodeTrigraphChar - If the specified character is a legal trigraph when\n/// prefixed with ??, emit a trigraph warning.  If trigraphs are enabled,\n/// return the result character.  Finally, emit a warning about trigraph use\n/// whether trigraphs are enabled or not.\nstatic char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) {\n  if (!Trigraphs) {\n    if (L && !L->isLexingRawMode())\n      L->Diag(CP - 2, diag::trigraph_ignored);"}}
},
},
["trigraph_ignored_block_comment"]={
["trigraph_ignored_block_comment"]={
Line 4,989: Line 4,989:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{kb,2461,"/// 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]={{kb,2686,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence.  Issue\n/// a diagnostic if so.  We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n  if (TrigraphPos) {\n    // If no trigraphs are enabled, warn that we ignored this trigraph and\n    // ignore this * character.\n    if (!Trigraphs) {\n      if (!L->isLexingRawMode())\n        L->Diag(TrigraphPos, diag::trigraph_ignored_block_comment);"}}
},
},
["warn_O4_is_O3"]={
["warn_O4_is_O3"]={
Line 5,003: Line 5,003:
[e]=Ib,
[e]=Ib,
[i]={"ad70d9683ea7",1377622695,"Warn that -O4 is the same as -O3."},
[i]={"ad70d9683ea7",1377622695,"Warn that -O4 is the same as -O3."},
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp",4399,"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",5124,"#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",440,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Optimization level for CodeGen.\n  if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"}}
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp",5075,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Embed-bitcode option.\n  // Only white-listed flags below are allowed to be embedded.\n  if (C.getDriver().embedBitcodeInObject() && !IsUsingLTO && (isa<BackendJobAction>(JA) || isa<AssembleJobAction>(JA))) {\n    // Optimization level for CodeGen.\n    if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n      if (A->getOption().matches(options::OPT_O4)) {\n        D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Clang.cpp",5932,"#endif\n  // Manually translate -O4 to -O3; let clang reject others.\n  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"},{"clang/lib/Driver/ToolChains/Flang.cpp",507,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Optimization level for CodeGen.\n  if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {\n    if (A->getOption().matches(options::OPT_O4)) {\n      D.Diag(diag::warn_O4_is_O3);"}}
},
},
["warn_abs_too_small"]={
["warn_abs_too_small"]={
Line 5,017: Line 5,017:
[e]=k,
[e]=k,
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."},
[j]={{F,10820,"// 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",1277,"///    /* DiagArray2 */ diag::warn_abs_too_small,"}}
[j]={{F,12060,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // The argument and parameter are the same kind.  Check if they are the right\n  // size.\n  if (ArgValueKind == ParamValueKind) {\n    Diag(Call->getExprLoc(), diag::warn_abs_too_small) << FDecl << ArgType << ParamType;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1409,"///    /* DiagArray2 */ diag::warn_abs_too_small,"}}
},
},
["warn_abstract_final_class"]={
["warn_abstract_final_class"]={
Line 5,031: Line 5,031:
[e]=k,
[e]=k,
[i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes."},
[i]={"348df509a0b7",1348197667,"PR13890: Warn on abstract final classes."},
[j]={{y,5957,"/// 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]={{y,6974,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  if (Record->isAbstract()) {\n    if (FinalAttr *FA = Record->getAttr<FinalAttr>()) {\n      Diag(Record->getLocation(), diag::warn_abstract_final_class) << FA->isSpelledAsSealed();"}}
},
},
["warn_abstract_vbase_init_ignored"]={
["warn_abstract_vbase_init_ignored"]={
Line 5,046: Line 5,046:
[e]=k,
[e]=k,
[i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:"},
[i]={"bc46e4341e95",1374461816,"Implement DR257 / fix PR16659:"},
[j]={{y,4525,"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]={{y,5351,"bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, ArrayRef<CXXCtorInitializer *> Initializers) {\n  // Push virtual bases before others.\n  for (auto &VBase : ClassDecl->vbases()) {\n    if (CXXCtorInitializer *Value = Info.AllBaseFields.lookup(VBase.getType()->getAs<RecordType>())) {\n      // [class.base.init]p7, per DR257:\n      //  A mem-initializer where the mem-initializer-id names a virtual base\n      //  class is ignored during execution of a constructor of any class that\n      //  is not the most derived class.\n      if (ClassDecl->isAbstract()) {\n        Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored) << VBase.getType() << ClassDecl;"}}
},
},
["warn_access_decl_deprecated"]={
["warn_access_decl_deprecated"]={
Line 5,060: Line 5,060:
[e]=Ib,
[e]=Ib,
[i]={"a009726ce3a0",1260497403,"Implement access declarations.  Most of the work here is parsing them, which"},
[i]={"a009726ce3a0",1260497403,"Implement access declarations.  Most of the work here is parsing them, which"},
[j]={{y,10379,"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]={{y,12069,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // Warn about access declarations.\n  if (UsingLoc.isInvalid()) {\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::err_access_decl : diag::warn_access_decl_deprecated) << FixItHint::CreateInsertion(SS.getRange().getBegin(), \"using \");"}}
},
},
["warn_accessor_property_type_mismatch"]={
["warn_accessor_property_type_mismatch"]={
Line 5,072: Line 5,072:
[e]=k,
[e]=k,
[i]={"b2ab73d93cf5",1241811394,"More type checking for properties, accessors and"},
[i]={"b2ab73d93cf5",1241811394,"More type checking for properties, accessors and"},
[j]={{E,1391,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    Diag(Loc, diag::warn_accessor_property_type_mismatch) << property->getDeclName() << GetterMethod->getSelector();"},{E,1948,"/// 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]={{E,1742,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    Diag(Loc, diag::warn_accessor_property_type_mismatch) << property->getDeclName() << GetterMethod->getSelector();"},{E,2452,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (SetterMethod->param_size() != 1 || !Context.hasSameUnqualifiedType((*SetterMethod->param_begin())->getType().getNonReferenceType(), property->getType().getNonReferenceType())) {\n      Diag(property->getLocation(), diag::warn_accessor_property_type_mismatch) << property->getDeclName() << SetterMethod->getSelector();"}}
},
},
["warn_acquire_requires_negative_cap"]={
["warn_acquire_requires_negative_cap"]={
Line 5,087: Line 5,087:
[e]=k,
[e]=k,
[i]={"3efd0495a081",1407190386,"Thread Safety Analysis: add a -Wthread-safety-negative flag that warns whenever"},
[i]={"3efd0495a081",1407190386,"Thread Safety Analysis: add a -Wthread-safety-negative flag that warns whenever"},
[j]={{I,1734,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleNegativeNotHeld(StringRef Kind, Name LockName, Name Neg, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquire_requires_negative_cap) << Kind << LockName << Neg);"}}
[j]={{I,2021,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleNegativeNotHeld(StringRef Kind, Name LockName, Name Neg, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquire_requires_negative_cap) << Kind << LockName << Neg);"}}
},
},
["warn_acquired_before"]={
["warn_acquired_before"]={
Line 5,102: Line 5,102:
[e]=k,
[e]=k,
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[j]={{I,1749,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleLockAcquiredBefore(StringRef Kind, Name L1Name, Name L2Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before) << Kind << L1Name << L2Name);"}}
[j]={{I,2043,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleLockAcquiredBefore(StringRef Kind, Name L1Name, Name L2Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before) << Kind << L1Name << L2Name);"}}
},
},
["warn_acquired_before_after_cycle"]={
["warn_acquired_before_after_cycle"]={
Line 5,117: Line 5,117:
[e]=k,
[e]=k,
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[i]={"4980df623f15",1422987468,"Thread Safety Analysis: add support for before/after annotations on mutexes."},
[j]={{I,1754,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name);"}}
[j]={{I,2049,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleBeforeAfterCycle(Name L1Name, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_acquired_before_after_cycle) << L1Name);"}}
},
},
["warn_addition_in_bitshift"]={
["warn_addition_in_bitshift"]={
Line 5,131: Line 5,131:
[e]=k,
[e]=k,
[i]={"15f17cbbd813",1349397663,"Implement -Wshift-op-parentheses for: a << b + c"},
[i]={"15f17cbbd813",1349397663,"Implement -Wshift-op-parentheses for: a << b + c"},
[j]={{C,13747,"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]={{C,15846,"static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, Expr *SubExpr, StringRef Shift) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_addition_in_bitshift) << Bop->getSourceRange() << OpLoc << Shift << Op;"}}
},
},
["warn_address_of_reference_bool_conversion"]={
["warn_address_of_reference_bool_conversion"]={
Line 5,145: Line 5,145:
[e]=Vb,
[e]=Vb,
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[j]={{F,13769,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}
[j]={{F,15476,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}
},
},
["warn_address_of_reference_null_compare"]={
["warn_address_of_reference_null_compare"]={
Line 5,159: Line 5,159:
[e]=k,
[e]=k,
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"},
[j]={{F,13769,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}
[j]={{F,15475,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  if (IsAddressOf) {\n    unsigned DiagID = IsCompare ? diag::warn_address_of_reference_null_compare : diag::warn_address_of_reference_bool_conversion;"}}
},
},
["warn_alias_to_weak_alias"]={
["warn_alias_to_weak_alias"]={
Line 5,173: Line 5,173:
[e]=l,
[e]=l,
[i]={"a39fc6dd2afa",1395934040,"Handle and warn on aliases to weak aliases."},
[i]={"a39fc6dd2afa",1395934040,"Handle and warn on aliases to weak aliases."},
[j]={{nc,593,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    // We have to handle alias to weak aliases in here. LLVM itself disallows\n    // this since the object semantics would not match the IL one. For\n    // compatibility with gcc we implement it by just pointing the alias\n    // to its aliasee\'s aliasee. We also warn, since the user is probably\n    // expecting the link to be weak.\n    if (auto *GA = dyn_cast<llvm::GlobalAlias>(AliaseeGV)) {\n      if (GA->isInterposable()) {\n        Diags.Report(Location, diag::warn_alias_to_weak_alias) << GV->getName() << GA->getName() << IsIFunc;"}}
[j]={{nc,667,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    // We have to handle alias to weak aliases in here. LLVM itself disallows\n    // this since the object semantics would not match the IL one. For\n    // compatibility with gcc we implement it by just pointing the alias\n    // to its aliasee\'s aliasee. We also warn, since the user is probably\n    // expecting the link to be weak.\n    if (auto *GA = dyn_cast<llvm::GlobalAlias>(AliaseeGV)) {\n      if (GA->isInterposable()) {\n        Diags.Report(Location, diag::warn_alias_to_weak_alias) << GV->getName() << GA->getName() << IsIFunc;"}}
},
},
["warn_alias_with_section"]={
["warn_alias_with_section"]={
Line 5,187: Line 5,187:
[e]=l,
[e]=l,
[i]={"502f65ae54d0",1399321263,"Fix pr19653."},
[i]={"502f65ae54d0",1399321263,"Fix pr19653."},
[j]={{nc,583,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {\n      if (AliasSection != AliaseeGV->getSection())\n        Diags.Report(SA->getLocation(), diag::warn_alias_with_section) << AliasSection << IsIFunc << IsIFunc;"}}
[j]={{nc,656,"void CodeGenModule::checkAliases() {\n  for (const GlobalDecl &GD : Aliases) {\n    if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {\n      if (AliasSection != AliaseeGV->getSection())\n        Diags.Report(SA->getLocation(), diag::warn_alias_with_section) << AliasSection << IsIFunc << IsIFunc;"}}
},
},
["warn_aligned_attr_underaligned"]={
["warn_aligned_attr_underaligned"]={
Line 5,201: Line 5,201:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{u,3949,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && AlignVal < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"},{u,3992,"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]={{u,4518,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && AlignVal < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"},{u,4567,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  // On AIX, an aligned attribute can not decrease the alignment when applied\n  // to a variable declaration with vector type.\n  if (VD && Context.getTargetInfo().getTriple().isOSAIX()) {\n    if (Ty->isVectorType() && Context.toCharUnitsFromBits(AlignVal).getQuantity() < 16) {\n      Diag(VD->getLocation(), diag::warn_aligned_attr_underaligned) << VD->getType() << 16;"}}
},
},
["warn_alignment_builtin_useless"]={
["warn_alignment_builtin_useless"]={
Line 5,215: Line 5,215:
[e]=k,
[e]=k,
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[j]={{F,303,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (AlignValue == 1) {\n      S.Diag(AlignOp->getExprLoc(), diag::warn_alignment_builtin_useless) << IsBooleanAlignBuiltin;"}}
[j]={{F,343,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    if (AlignValue == 1) {\n      S.Diag(AlignOp->getExprLoc(), diag::warn_alignment_builtin_useless) << IsBooleanAlignBuiltin;"}}
},
},
["warn_alignment_not_power_of_two"]={
["warn_alignment_not_power_of_two"]={
Line 5,229: Line 5,229:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{F,6399,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (!I.isPowerOf2())\n          Diag(Arg->getExprLoc(), diag::warn_alignment_not_power_of_two) << Arg->getSourceRange();"}}
[j]={{F,6741,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (!I.isPowerOf2())\n          Diag(Arg->getExprLoc(), diag::warn_alignment_not_power_of_two) << Arg->getSourceRange();"}}
},
},
["warn_alloca"]={
["warn_alloca"]={
Line 5,244: Line 5,244:
[e]=k,
[e]=k,
[i]={"9d045a5c1e6b",1564093420,"[Sema] add -Walloca to flag uses of `alloca`"},
[i]={"9d045a5c1e6b",1564093420,"[Sema] add -Walloca to flag uses of `alloca`"},
[j]={{F,1934,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__builtin_alloca_uninitialized:\n    Diag(TheCall->getBeginLoc(), diag::warn_alloca) << TheCall->getDirectCallee();"}}
[j]={{F,2205,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__builtin_alloca_uninitialized:\n    Diag(TheCall->getBeginLoc(), diag::warn_alloca) << TheCall->getDirectCallee();"}}
},
},
["warn_alloca_align_alignof"]={
["warn_alloca_align_alignof"]={
Line 5,258: Line 5,258:
[e]=k,
[e]=k,
[i]={"86b1bfad0509",1477937277,"[Sema] Warn when alignof is used with __builtin_alloca_with_align"},
[i]={"86b1bfad0509",1477937277,"[Sema] Warn when alignof is used with __builtin_alloca_with_align"},
[j]={{F,8062,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (const auto *UE = dyn_cast<UnaryExprOrTypeTraitExpr>(Arg->IgnoreParenImpCasts()))\n      if (UE->getKind() == UETT_AlignOf || UE->getKind() == UETT_PreferredAlignOf)\n        Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) << Arg->getSourceRange();"}}
[j]={{F,8625,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    if (const auto *UE = dyn_cast<UnaryExprOrTypeTraitExpr>(Arg->IgnoreParenImpCasts()))\n      if (UE->getKind() == UETT_AlignOf || UE->getKind() == UETT_PreferredAlignOf)\n        Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) << Arg->getSourceRange();"}}
},
},
["warn_always_inline_coroutine"]={
["warn_always_inline_coroutine"]={
Line 5,272: Line 5,272:
[e]="Coroutines Issue",
[e]="Coroutines Issue",
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",1002,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // The always_inline attribute doesn\'t reliably apply to a coroutine,\n  // because the coroutine will be split into pieces and some pieces\n  // might be called indirectly, as in a virtual call. Even the ramp\n  // function cannot be inlined at -O0, due to pipeline ordering\n  // problems (see https://llvm.org/PR53413). Tell the user about it.\n  if (FD->hasAttr<AlwaysInlineAttr>())\n    Diag(FD->getLocation(), diag::warn_always_inline_coroutine);"}}
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",1116,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // The always_inline attribute doesn\'t reliably apply to a coroutine,\n  // because the coroutine will be split into pieces and some pieces\n  // might be called indirectly, as in a virtual call. Even the ramp\n  // function cannot be inlined at -O0, due to pipeline ordering\n  // problems (see https://llvm.org/PR53413). Tell the user about it.\n  if (FD->hasAttr<AlwaysInlineAttr>())\n    Diag(FD->getLocation(), diag::warn_always_inline_coroutine);"}}
},
},
["warn_ambiguous_suitable_delete_function_found"]={
["warn_ambiguous_suitable_delete_function_found"]={
Line 5,286: Line 5,286:
[e]=k,
[e]=k,
[i]={"189e52fcdfc3",1476081751,"P0035R4: Semantic analysis and code generation for C++17 overaligned"},
[i]={"189e52fcdfc3",1476081751,"P0035R4: Semantic analysis and code generation for C++17 overaligned"},
[j]={{Ub,2483,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n  } else if (!Matches.empty()) {\n    Diag(StartLoc, diag::warn_ambiguous_suitable_delete_function_found) << DeleteName << AllocElemType;"}}
[j]={{Ub,2939,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n  } else if (!Matches.empty()) {\n    Diag(StartLoc, diag::warn_ambiguous_suitable_delete_function_found) << DeleteName << AllocElemType;"}}
},
},
["warn_analyzer_deprecated_option"]={
["warn_analyzer_deprecated_option"]={
Line 5,326: Line 5,326:
[e]=k,
[e]=k,
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[j]={{C,6342,"/// 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]={{C,7365,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<AnyX86InterruptAttr>() && ((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {\n      Diag(Fn->getExprLoc(), diag::warn_anyx86_interrupt_regsave);"}}
},
},
["warn_arc_bridge_cast_nonarc"]={
["warn_arc_bridge_cast_nonarc"]={
Line 5,340: Line 5,340:
[e]="ARC Parse Issue",
[e]="ARC Parse Issue",
[i]={"084e1b48a176",1329540158,"Change wording of warning about using __bridge casts in non-ARC."},
[i]={"084e1b48a176",1329540158,"Change wording of warning about using __bridge casts in non-ARC."},
[j]={{qc,2653,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///      primary-expression: [C99 6.5.1]\n///        \'(\' expression \')\'\n/// [GNU]  \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///      postfix-expression: [C99 6.5.2]\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///      cast-expression: [C99 6.5.4]\n///        \'(\' type-name \')\' cast-expression\n/// [ARC]  bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///        (__bridge type-name) cast-expression\n///        (__bridge_transfer type-name) cast-expression\n///        (__bridge_retained type-name) cast-expression\n///      fold-expression: [C++1z]\n///        \'(\' cast-expression fold-operator \'...\' \')\'\n///        \'(\' \'...\' fold-operator cast-expression \')\'\n///        \'(\' cast-expression fold-operator \'...\'\n///                fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///      \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  if (BridgeCast && !getLangOpts().ObjCAutoRefCount) {\n    if (!TryConsumeToken(tok::kw___bridge)) {\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::warn_arc_bridge_cast_nonarc) << BridgeCastName << FixItHint::CreateReplacement(BridgeKeywordLoc, \"\");"}}
[j]={{qc,2922,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///      primary-expression: [C99 6.5.1]\n///        \'(\' expression \')\'\n/// [GNU]  \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///      postfix-expression: [C99 6.5.2]\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///      cast-expression: [C99 6.5.4]\n///        \'(\' type-name \')\' cast-expression\n/// [ARC]  bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///        (__bridge type-name) cast-expression\n///        (__bridge_transfer type-name) cast-expression\n///        (__bridge_retained type-name) cast-expression\n///      fold-expression: [C++1z]\n///        \'(\' cast-expression fold-operator \'...\' \')\'\n///        \'(\' \'...\' fold-operator cast-expression \')\'\n///        \'(\' cast-expression fold-operator \'...\'\n///                fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///      \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  if (BridgeCast && !getLangOpts().ObjCAutoRefCount) {\n    if (!TryConsumeToken(tok::kw___bridge)) {\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::warn_arc_bridge_cast_nonarc) << BridgeCastName << FixItHint::CreateReplacement(BridgeKeywordLoc, \"\");"}}
},
},
["warn_arc_lifetime_result_type"]={
["warn_arc_lifetime_result_type"]={
Line 5,354: Line 5,354:
[e]=hc,
[e]=hc,
[i]={"cd78037ad117",1358465805,"In Objective-C ARC, completely ignore ownership qualifiers on the"},
[i]={"cd78037ad117",1358465805,"In Objective-C ARC, completely ignore ownership qualifiers on the"},
[j]={{hb,4762,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Objective-C ARC ownership qualifiers are ignored on the function\n      // return type (by type canonicalization). Complain if this attribute\n      // was written here.\n      if (T.getQualifiers().hasObjCLifetime()) {\n        if (AttrLoc.isValid()) {\n          S.Diag(AttrLoc, diag::warn_arc_lifetime_result_type) << T.getQualifiers().getObjCLifetime();"}}
[j]={{hb,5402,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Objective-C ARC ownership qualifiers are ignored on the function\n      // return type (by type canonicalization). Complain if this attribute\n      // was written here.\n      if (T.getQualifiers().hasObjCLifetime()) {\n        if (AttrLoc.isValid()) {\n          S.Diag(AttrLoc, diag::warn_arc_lifetime_result_type) << T.getQualifiers().getObjCLifetime();"}}
},
},
["warn_arc_literal_assign"]={
["warn_arc_literal_assign"]={
Line 5,368: Line 5,368:
[e]=hc,
[e]=hc,
[i]={"9304da95784c",1356077068,"Extend checkUnsafeAssigns() to also handle assigning an object literal to a weak reference."},
[i]={"9304da95784c",1356077068,"Extend checkUnsafeAssigns() to also handle assigning an object literal to a weak reference."},
[j]={{F,15866,"static bool checkUnsafeAssignLiteral(Sema &S, SourceLocation Loc, Expr *RHS, bool isProperty) {\n  S.Diag(Loc, diag::warn_arc_literal_assign) << (unsigned)Kind << (isProperty ? 0 : 1) << RHS->getSourceRange();"}}
[j]={{F,17735,"static bool checkUnsafeAssignLiteral(Sema &S, SourceLocation Loc, Expr *RHS, bool isProperty) {\n  S.Diag(Loc, diag::warn_arc_literal_assign) << (unsigned)Kind << (isProperty ? 0 : 1) << RHS->getSourceRange();"}}
},
},
["warn_arc_object_memaccess"]={
["warn_arc_object_memaccess"]={
Line 5,382: Line 5,382:
[e]=hc,
[e]=hc,
[i]={Ec,1308178962,sc},
[i]={Ec,1308178962,sc},
[j]={{F,11258,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_arc_object_memaccess) << ArgIdx << FnName << PointeeTy << Call->getCallee()->getSourceRange());"}}
[j]={{F,12580,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_arc_object_memaccess) << ArgIdx << FnName << PointeeTy << Call->getCallee()->getSourceRange());"}}
},
},
["warn_arc_perform_selector_leaks"]={
["warn_arc_perform_selector_leaks"]={
Line 5,396: Line 5,396:
[e]=k,
[e]=k,
[i]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors"},
[i]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors"},
[j]={{nb,2659,"/// 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]={{nb,3316,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n        } else {\n          Diag(SelLoc, diag::warn_arc_perform_selector_leaks);"}}
},
},
["warn_arc_possible_repeated_use_of_weak"]={
["warn_arc_possible_repeated_use_of_weak"]={
Line 5,411: Line 5,411:
[e]=k,
[e]=k,
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[j]={{I,1315,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n    else\n      DiagKind = diag::warn_arc_possible_repeated_use_of_weak;"}}
[j]={{I,1472,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n    else\n      DiagKind = diag::warn_arc_possible_repeated_use_of_weak;"}}
},
},
["warn_arc_repeated_use_of_weak"]={
["warn_arc_repeated_use_of_weak"]={
Line 5,426: Line 5,426:
[e]=k,
[e]=k,
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[i]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[j]={{I,1313,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n      DiagKind = diag::warn_arc_repeated_use_of_weak;"},{I,2273,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (S.getLangOpts().ObjCWeak && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, D->getBeginLoc()))"},{F,15916,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (LT == Qualifiers::OCL_Weak) {\n    if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{v,11681,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (!VDecl->isInvalidDecl()) {\n    // It is safe to assign a weak reference into a strong variable.\n    // Although this code can still have problems:\n    //  id x = self.weakProp;\n    //  id y = self.weakProp;\n    // we do not warn to warn spuriously when \'x\' and \'y\' are on separate\n    // paths through the function. This should be revisited if\n    // -Wrepeated-use-of-weak is made flow-sensitive.\n    if (FunctionScopeInfo *FSI = getCurFunction())\n      if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc()))"},{C,1889,"/// BuildDeclRefExpr - Build an expression that references a\n/// declaration that does not require a closure capture.\nDeclRefExpr *Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, const DeclarationNameInfo &NameInfo, NestedNameSpecifierLoc NNS, NamedDecl *FoundD, SourceLocation TemplateKWLoc, const TemplateArgumentListInfo *TemplateArgs) {\n  if (getLangOpts().ObjCWeak && isa<VarDecl>(D) && Ty.getObjCLifetime() == Qualifiers::OCL_Weak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, E->getBeginLoc()))"},{C,2611,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n    if (!isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{C,12513,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  if (CompoundType.isNull()) {\n    if (ConvTy == Compatible) {\n      if (LHSType.getObjCLifetime() == Qualifiers::OCL_Strong || LHSType.isNonWeakInMRRWithObjCWeak(Context)) {\n        if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RHS.get()->getBeginLoc()))"},{"clang/lib/Sema/SemaExprMember.cpp",1216,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (!S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, MemberLoc))"},{nb,2722,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (getLangOpts().ObjCWeak) {\n    if (!isImplicit && Method) {\n      if (const ObjCPropertyDecl *Prop = Method->findPropertyDecl()) {\n        if (IsWeak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc))"},{Db,710,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n  // As a special case, if the method returns \'id\', try to get\n  // a better type from the property.\n  if (RefExpr->isExplicitProperty() && result.get()->isPRValue()) {\n    if (propType.getObjCLifetime() == Qualifiers::OCL_Weak && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RefExpr->getLocation()))"},{Db,812,"ExprResult ObjCPropertyOpBuilder::complete(Expr *SyntacticForm) {\n  if (isWeakProperty() && !S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, SyntacticForm->getBeginLoc()))"}}
[j]={{I,1470,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    if (Key.isExactProfile())\n      DiagKind = diag::warn_arc_repeated_use_of_weak;"},{I,2675,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (S.getLangOpts().ObjCWeak && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, D->getBeginLoc()))"},{F,17797,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (LT == Qualifiers::OCL_Weak) {\n    if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{v,13379,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (!VDecl->isInvalidDecl()) {\n    // It is safe to assign a weak reference into a strong variable.\n    // Although this code can still have problems:\n    //  id x = self.weakProp;\n    //  id y = self.weakProp;\n    // we do not warn to warn spuriously when \'x\' and \'y\' are on separate\n    // paths through the function. This should be revisited if\n    // -Wrepeated-use-of-weak is made flow-sensitive.\n    if (FunctionScopeInfo *FSI = getCurFunction())\n      if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong || VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Init->getBeginLoc()))"},{C,2213,"/// BuildDeclRefExpr - Build an expression that references a\n/// declaration that does not require a closure capture.\nDeclRefExpr *Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, const DeclarationNameInfo &NameInfo, NestedNameSpecifierLoc NNS, NamedDecl *FoundD, SourceLocation TemplateKWLoc, const TemplateArgumentListInfo *TemplateArgs) {\n  if (getLangOpts().ObjCWeak && isa<VarDecl>(D) && Ty.getObjCLifetime() == Qualifiers::OCL_Weak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, E->getBeginLoc()))"},{C,3049,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n    if (!isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))"},{C,14631,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  if (CompoundType.isNull()) {\n    if (ConvTy == Compatible) {\n      if (LHSType.getObjCLifetime() == Qualifiers::OCL_Strong || LHSType.isNonWeakInMRRWithObjCWeak(Context)) {\n        if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RHS.get()->getBeginLoc()))"},{"clang/lib/Sema/SemaExprMember.cpp",1483,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (!S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, MemberLoc))"},{nb,3389,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (getLangOpts().ObjCWeak) {\n    if (!isImplicit && Method) {\n      if (const ObjCPropertyDecl *Prop = Method->findPropertyDecl()) {\n        if (IsWeak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc))"},{Db,856,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n  // As a special case, if the method returns \'id\', try to get\n  // a better type from the property.\n  if (RefExpr->isExplicitProperty() && result.get()->isPRValue()) {\n    if (propType.getObjCLifetime() == Qualifiers::OCL_Weak && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, RefExpr->getLocation()))"},{Db,975,"ExprResult ObjCPropertyOpBuilder::complete(Expr *SyntacticForm) {\n  if (isWeakProperty() && !S.isUnevaluatedContext() && !S.Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, SyntacticForm->getBeginLoc()))"}}
},
},
["warn_arc_retain_cycle"]={
["warn_arc_retain_cycle"]={
Line 5,440: Line 5,440:
[e]="ARC Retain Cycle",
[e]="ARC Retain Cycle",
[i]={Ec,1308178962,sc},
[i]={Ec,1308178962,sc},
[j]={{F,15631,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n  S.Diag(capturer->getExprLoc(), diag::warn_arc_retain_cycle) << owner.Variable << capturer->getSourceRange();"}}
[j]={{F,17473,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n  S.Diag(capturer->getExprLoc(), diag::warn_arc_retain_cycle) << owner.Variable << capturer->getSourceRange();"}}
},
},
["warn_arc_retained_assign"]={
["warn_arc_retained_assign"]={
Line 5,454: Line 5,454:
[e]=hc,
[e]=hc,
[i]={Ec,1308178962,sc},
[i]={Ec,1308178962,sc},
[j]={{F,15875,"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]={{F,17749,"static bool checkUnsafeAssignObject(Sema &S, SourceLocation Loc, Qualifiers::ObjCLifetime LT, Expr *RHS, bool isProperty) {\n  // Strip off any implicit cast added to get to the one ARC-specific.\n  while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n    if (cast->getCastKind() == CK_ARCConsumeObject) {\n      S.Diag(Loc, diag::warn_arc_retained_assign) << (LT == Qualifiers::OCL_ExplicitNone) << (isProperty ? 0 : 1) << RHS->getSourceRange();"}}
},
},
["warn_arc_retained_property_assign"]={
["warn_arc_retained_property_assign"]={
Line 5,468: Line 5,468:
[e]=hc,
[e]=hc,
[i]={"5f98da0ea2bb",1308939934,"objc-arc: Check on a variety of unsafe assignment of retained "},
[i]={"5f98da0ea2bb",1308939934,"objc-arc: Check on a variety of unsafe assignment of retained "},
[j]={{F,15945,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (PRE) {\n    if (Attributes & ObjCPropertyAttribute::kind_assign) {\n      while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n        if (cast->getCastKind() == CK_ARCConsumeObject) {\n          Diag(Loc, diag::warn_arc_retained_property_assign) << RHS->getSourceRange();"}}
[j]={{F,17827,"void Sema::checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  if (PRE) {\n    if (Attributes & ObjCPropertyAttribute::kind_assign) {\n      while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {\n        if (cast->getCastKind() == CK_ARCConsumeObject) {\n          Diag(Loc, diag::warn_arc_retained_property_assign) << RHS->getSourceRange();"}}
},
},
["warn_arc_strong_pointer_objc_pointer"]={
["warn_arc_strong_pointer_objc_pointer"]={
Line 5,483: Line 5,483:
[e]="ARC Restrictions",
[e]="ARC Restrictions",
[i]={"cd278ffa2856",1346370962,"objective-C ARC: under -Wexplicit-ownership-type diagnose those"},
[i]={"cd278ffa2856",1346370962,"objective-C ARC: under -Wexplicit-ownership-type diagnose those"},
[j]={{B,340,"/// 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]={{B,403,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // Introduce all of the other parameters into this scope.\n  for (auto *Param : MDecl->parameters()) {\n    if (!Param->isInvalidDecl() && getLangOpts().ObjCAutoRefCount && !HasExplicitOwnershipAttr(*this, Param))\n      Diag(Param->getLocation(), diag::warn_arc_strong_pointer_objc_pointer) << Param->getType();"}}
},
},
["warn_arcmt_nsalloc_realloc"]={
["warn_arcmt_nsalloc_realloc"]={
Line 5,495: Line 5,495:
[e]=l,
[e]=l,
[i]={"403a4f9b826d",1400539871,"Get ARCMT/GC-check-warn-nsalloc.m working"},
[i]={"403a4f9b826d",1400539871,"Get ARCMT/GC-check-warn-nsalloc.m working"},
[j]={{"clang/lib/ARCMigrate/ARCMT.cpp",281,"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",38,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  bool VisitCallExpr(CallExpr *E) {\n    if (MigrateCtx.isGCOwnedNonObjC(E->getType())) {\n      TA.report(E->getBeginLoc(), diag::warn_arcmt_nsalloc_realloc, E->getSourceRange());"}}
[j]={{"clang/lib/ARCMigrate/ARCMT.cpp",319,"bool arcmt::checkForManualIssues(CompilerInvocation &origCI, const FrontendInputFile &Input, std::shared_ptr<PCHContainerOperations> PCHContainerOps, DiagnosticConsumer *DiagClient, bool emitPremigrationARCErrors, StringRef plistOut) {\n  if (!NoNSAllocReallocError)\n    Diags->setSeverity(diag::warn_arcmt_nsalloc_realloc, diag::Severity::Error, SourceLocation());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",41,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  bool VisitCallExpr(CallExpr *E) {\n    if (MigrateCtx.isGCOwnedNonObjC(E->getType())) {\n      TA.report(E->getBeginLoc(), diag::warn_arcmt_nsalloc_realloc, E->getSourceRange());"}}
},
},
["warn_argument_invalid_range"]={
["warn_argument_invalid_range"]={
Line 5,509: Line 5,509:
[e]=k,
[e]=k,
[i]={"16e6bc23a12e",1529624769,"[x86] Teach the builtin argument range check to allow invalid ranges in"},
[i]={"16e6bc23a12e",1529624769,"[x86] Teach the builtin argument range check to allow invalid ranges in"},
[j]={{F,8228,"/// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression in the range [Low, High].\nbool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError) {\n  if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n    if (RangeIsError)\n    else\n      DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, PDiag(diag::warn_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange());"}}
[j]={{F,8815,"/// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression in the range [Low, High].\nbool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError) {\n  if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n    if (RangeIsError)\n    else\n      DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, PDiag(diag::warn_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange());"}}
},
},
["warn_argument_undefined_behaviour"]={
["warn_argument_undefined_behaviour"]={
Line 5,523: Line 5,523:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{F,4038,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_addex: {\n    if (ArgValue != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_argument_undefined_behaviour) << ArgValue;"}}
[j]={{F,4324,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_addex: {\n    if (ArgValue != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_argument_undefined_behaviour) << ArgValue;"}}
},
},
["warn_arith_conv_enum_float"]={
["warn_arith_conv_enum_float"]={
Line 5,538: Line 5,538:
[e]=Vb,
[e]=Vb,
[i]={kc,1575504770,mc},
[i]={kc,1575504770,mc},
[j]={{C,1316,"/// 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]={{C,1504,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n    S.Diag(Loc, S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_enum_float_cxx20 : diag::warn_arith_conv_enum_float) << LHS->getSourceRange() << RHS->getSourceRange() << (int)ACK << LEnum << L << R;"}}
},
},
["warn_arith_conv_enum_float_cxx20"]={
["warn_arith_conv_enum_float_cxx20"]={
Line 5,552: Line 5,552:
[e]=Ib,
[e]=Ib,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,1316,"/// 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]={{C,1503,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n    S.Diag(Loc, S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_enum_float_cxx20 : diag::warn_arith_conv_enum_float) << LHS->getSourceRange() << RHS->getSourceRange() << (int)ACK << LEnum << L << R;"}}
},
},
["warn_arith_conv_mixed_anon_enum_types"]={
["warn_arith_conv_mixed_anon_enum_types"]={
Line 5,567: Line 5,567:
[e]=k,
[e]=k,
[i]={kc,1575504770,mc},
[i]={kc,1575504770,mc},
[j]={{C,1323,"/// 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]={{C,1517,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_anon_enum_types_cxx20 : diag::warn_arith_conv_mixed_anon_enum_types;"}}
},
},
["warn_arith_conv_mixed_anon_enum_types_cxx20"]={
["warn_arith_conv_mixed_anon_enum_types_cxx20"]={
Line 5,581: Line 5,581:
[e]=Ib,
[e]=Ib,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,1323,"/// 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]={{C,1516,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_anon_enum_types_cxx20 : diag::warn_arith_conv_mixed_anon_enum_types;"}}
},
},
["warn_arith_conv_mixed_enum_types"]={
["warn_arith_conv_mixed_enum_types"]={
Line 5,596: Line 5,596:
[e]=Vb,
[e]=Vb,
[i]={kc,1575504770,mc},
[i]={kc,1575504770,mc},
[j]={{C,1333,"/// 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]={{C,1533,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n    } else {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}}
},
},
["warn_arith_conv_mixed_enum_types_cxx20"]={
["warn_arith_conv_mixed_enum_types_cxx20"]={
Line 5,610: Line 5,610:
[e]=Ib,
[e]=Ib,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,1333,"/// 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]={{C,1532,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n    } else {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_arith_conv_mixed_enum_types_cxx20 : diag::warn_arith_conv_mixed_enum_types;"}}
},
},
["warn_arm_interrupt_calling_convention"]={
["warn_arm_interrupt_calling_convention"]={
Line 5,624: Line 5,624:
[e]=k,
[e]=k,
[i]={"8277c41a899b",1484753471,"Warn when calling a non interrupt function from an interrupt on ARM"},
[i]={"8277c41a899b",1484753471,"Warn when calling a non interrupt function from an interrupt on ARM"},
[j]={{C,6336,"/// 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]={{C,7358,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<ARMInterruptAttr>()) {\n      if (VFP && (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())) {\n        Diag(Fn->getExprLoc(), diag::warn_arm_interrupt_calling_convention);"}}
},
},
["warn_array_index_exceeds_bounds"]={
["warn_array_index_exceeds_bounds"]={
Line 5,638: Line 5,638:
[e]=k,
[e]=k,
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[j]={{F,15337,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n    unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}}
[j]={{F,17168,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n    unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}}
},
},
["warn_array_index_exceeds_max_addressable_bounds"]={
["warn_array_index_exceeds_max_addressable_bounds"]={
Line 5,652: Line 5,652:
[e]=k,
[e]=k,
[i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays"},
[i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays"},
[j]={{F,15258,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}}
[j]={{F,17078,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}}
},
},
["warn_array_index_precedes_bounds"]={
["warn_array_index_precedes_bounds"]={
Line 5,666: Line 5,666:
[e]=k,
[e]=k,
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[i]={"108b2d56bf41",1297828904,"Tweak -Warray-bounds diagnostics based on feedback from Chandler."},
[j]={{F,15343,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n  } else {\n    unsigned DiagID = diag::warn_array_index_precedes_bounds;"}}
[j]={{F,17178,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n  } else {\n    unsigned DiagID = diag::warn_array_index_precedes_bounds;"}}
},
},
["warn_asm_label_on_auto_decl"]={
["warn_asm_label_on_auto_decl"]={
Line 5,678: Line 5,678:
[e]="Inline Assembly Issue",
[e]="Inline Assembly Issue",
[i]={"133922318641",1294759012,"Added warning about invalid register specification for local variables."},
[i]={"133922318641",1294759012,"Added warning about invalid register specification for local variables."},
[j]={{v,7021,"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]={{v,7939,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    if (S->getFnParent() != nullptr) {\n      case SC_Auto:\n        Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;"}}
},
},
["warn_asm_mismatched_size_modifier"]={
["warn_asm_mismatched_size_modifier"]={
Line 5,692: Line 5,692:
[e]="Inline Assembly Issue",
[e]="Inline Assembly Issue",
[i]={"9d1ee1175de3",1351207728,"Recommit Eric\'s code to validate ASM string\'s constraints and modifiers."},
[i]={"9d1ee1175de3",1351207728,"Recommit Eric\'s code to validate ASM string\'s constraints and modifiers."},
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",465,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  // Validate constraints and modifiers.\n  for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n    if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n      targetDiag(Exprs[ConstraintIdx]->getBeginLoc(), diag::warn_asm_mismatched_size_modifier);"}}
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",550,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  // Validate constraints and modifiers.\n  for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n    if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n      targetDiag(Exprs[ConstraintIdx]->getBeginLoc(), diag::warn_asm_mismatched_size_modifier);"}}
},
},
["warn_assume_aligned_too_great"]={
["warn_assume_aligned_too_great"]={
Line 5,706: Line 5,706:
[e]=k,
[e]=k,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{F,6402,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (I > Sema::MaximumAlignment)\n          Diag(Arg->getExprLoc(), diag::warn_assume_aligned_too_great) << Arg->getSourceRange() << Sema::MaximumAlignment;"},{F,8109,"/// Handle __builtin_assume_aligned. This is declared\n/// as (const void*, size_t, ...) and can take one optional constant int arg.\nbool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!SecondArg->isValueDependent()) {\n    if (Result > Sema::MaximumAlignment)\n      Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great) << SecondArg->getSourceRange() << Sema::MaximumAlignment;"},{u,1530,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (*I > Sema::MaximumAlignment)\n      Diag(CI.getLoc(), diag::warn_assume_aligned_too_great) << CI.getRange() << Sema::MaximumAlignment;"}}
[j]={{F,6745,"/// Handles the checks for format strings, non-POD arguments to vararg\n/// functions, NULL arguments passed to non-NULL parameters, and diagnose_if\n/// attributes.\nvoid Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, const Expr *ThisArg, ArrayRef<const Expr *> Args, bool IsMemberFunction, SourceLocation Loc, SourceRange Range, VariadicCallType CallType) {\n  if (FDecl && FDecl->hasAttr<AllocAlignAttr>()) {\n    if (!Arg->isValueDependent()) {\n      if (Arg->EvaluateAsInt(Align, Context)) {\n        if (I > Sema::MaximumAlignment)\n          Diag(Arg->getExprLoc(), diag::warn_assume_aligned_too_great) << Arg->getSourceRange() << Sema::MaximumAlignment;"},{F,8678,"/// Handle __builtin_assume_aligned. This is declared\n/// as (const void*, size_t, ...) and can take one optional constant int arg.\nbool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {\n  // We can\'t check the value of a dependent argument.\n  if (!SecondArg->isValueDependent()) {\n    if (Result > Sema::MaximumAlignment)\n      Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great) << SecondArg->getSourceRange() << Sema::MaximumAlignment;"},{u,1717,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!E->isValueDependent()) {\n    if (*I > Sema::MaximumAlignment)\n      Diag(CI.getLoc(), diag::warn_assume_aligned_too_great) << CI.getRange() << Sema::MaximumAlignment;"}}
},
},
["warn_assume_attribute_string_unknown"]={
["warn_assume_attribute_string_unknown"]={
Line 5,720: Line 5,720:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{u,1585,"/// 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]={{u,1784,"/// Check if \\p AssumptionStr is a known assumption and warn if not.\nstatic void checkAssumptionAttr(Sema &S, SourceLocation Loc, StringRef AssumptionStr) {\n  if (!Suggestion.empty())\n  else\n    S.Diag(Loc, diag::warn_assume_attribute_string_unknown) << AssumptionStr;"}}
},
},
["warn_assume_attribute_string_unknown_suggested"]={
["warn_assume_attribute_string_unknown_suggested"]={
Line 5,734: Line 5,734:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{u,1583,"/// 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]={{u,1781,"/// Check if \\p AssumptionStr is a known assumption and warn if not.\nstatic void checkAssumptionAttr(Sema &S, SourceLocation Loc, StringRef AssumptionStr) {\n  if (!Suggestion.empty())\n    S.Diag(Loc, diag::warn_assume_attribute_string_unknown_suggested) << AssumptionStr << Suggestion;"}}
},
},
["warn_assume_side_effects"]={
["warn_assume_side_effects"]={
Line 5,748: Line 5,748:
[e]=k,
[e]=k,
[i]={"f04173358502",1405607155,"Add an __assume side-effects warning"},
[i]={"f04173358502",1405607155,"Add an __assume side-effects warning"},
[j]={{F,8046,"/// SemaBuiltinAssume - Handle __assume (MS Extension).\n// __assume does not evaluate its arguments, and should warn if its argument\n// has side effects.\nbool Sema::SemaBuiltinAssume(CallExpr *TheCall) {\n  if (Arg->HasSideEffects(Context))\n    Diag(Arg->getBeginLoc(), diag::warn_assume_side_effects) << Arg->getSourceRange() << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier();"}}
[j]={{F,8605,"/// SemaBuiltinAssume - Handle __assume (MS Extension).\n// __assume does not evaluate its arguments, and should warn if its argument\n// has side effects.\nbool Sema::SemaBuiltinAssume(CallExpr *TheCall) {\n  if (Arg->HasSideEffects(Context))\n    Diag(Arg->getBeginLoc(), diag::warn_assume_side_effects) << Arg->getSourceRange() << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier();"}}
},
},
["warn_at_available_unchecked_use"]={
["warn_at_available_unchecked_use"]={
Line 5,762: Line 5,762:
[e]=k,
[e]=k,
[i]={"0a484baa8516",1495638929,"Warn about uses of `@available` that can\'t suppress the"},
[i]={"0a484baa8516",1495638929,"Warn about uses of `@available` that can\'t suppress the"},
[j]={{Kb,627,"/// This class implements -Wunguarded-availability.\n///\n/// This is done with a traversal of the AST of a function that makes reference\n/// to a partially available declaration. Whenever we encounter an \\c if of the\n/// form: \\c if(@available(...)), we use the version from the condition to visit\n/// the then statement.\nclass DiagnoseUnguardedAvailability : public RecursiveASTVisitor<DiagnoseUnguardedAvailability> {\n  bool VisitObjCAvailabilityCheckExpr(ObjCAvailabilityCheckExpr *E) {\n    SemaRef.Diag(E->getBeginLoc(), diag::warn_at_available_unchecked_use) << (!SemaRef.getLangOpts().ObjC);"}}
[j]={{Kb,730,"/// This class implements -Wunguarded-availability.\n///\n/// This is done with a traversal of the AST of a function that makes reference\n/// to a partially available declaration. Whenever we encounter an \\c if of the\n/// form: \\c if(@available(...)), we use the version from the condition to visit\n/// the then statement.\nclass DiagnoseUnguardedAvailability : public RecursiveASTVisitor<DiagnoseUnguardedAvailability> {\n  bool VisitObjCAvailabilityCheckExpr(ObjCAvailabilityCheckExpr *E) {\n    SemaRef.Diag(E->getBeginLoc(), diag::warn_at_available_unchecked_use) << (!SemaRef.getLangOpts().ObjC);"}}
},
},
["warn_atimport_in_framework_header"]={
["warn_atimport_in_framework_header"]={
Line 5,776: Line 5,776:
[e]=Q,
[e]=Q,
[i]={"03e0d2d82be7",1530131376,"[Modules][ObjC] Warn on the use of \'@import\' in framework headers"},
[i]={"03e0d2d82be7",1530131376,"[Modules][ObjC] Warn on the use of \'@import\' in framework headers"},
[j]={{"clang/lib/Parse/Parser.cpp",2348,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // Using \'@import\' in framework headers requires modules to be enabled so that\n  // the header is parseable. Emit a warning to make the user aware.\n  if (IsObjCAtImport && AtLoc.isValid()) {\n    if (FE && llvm::sys::path::parent_path(FE->getDir().getName()).endswith(\".framework\"))\n      Diags.Report(AtLoc, diag::warn_atimport_in_framework_header);"}}
[j]={{"clang/lib/Parse/Parser.cpp",2606,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // Using \'@import\' in framework headers requires modules to be enabled so that\n  // the header is parseable. Emit a warning to make the user aware.\n  if (IsObjCAtImport && AtLoc.isValid()) {\n    if (FE && llvm::sys::path::parent_path(FE->getDir().getName()).endswith(\".framework\"))\n      Diags.Report(AtLoc, diag::warn_atimport_in_framework_header);"}}
},
},
["warn_atl_uuid_deprecated"]={
["warn_atl_uuid_deprecated"]={
Line 5,790: Line 5,790:
[e]=Ib,
[e]=Ib,
[i]={"469891e7a293",1494003956,"Warn that the [] spelling of uuid(...) is deprecated."},
[i]={"469891e7a293",1494003956,"Warn that the [] spelling of uuid(...) is deprecated."},
[j]={{u,6210,"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]={{u,7040,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FIXME: It\'d be nice to also emit a fixit removing uuid(...) (and, if it\'s\n  // the only thing in the [] list, the [] too), and add an insertion of\n  // __declspec(uuid(...)).  But sadly, neither the SourceLocs of the commas\n  // separating attributes nor of the [ and the ] are in the AST.\n  // Cf \"SourceLocations of attribute list delimiters - [[ ... , ... ]] etc\"\n  // on cfe-dev.\n  if (AL.isMicrosoftAttribute()) // Check for [uuid(...)] spelling.\n    S.Diag(AL.getLoc(), diag::warn_atl_uuid_deprecated);"}}
},
},
["warn_atomic_implicit_seq_cst"]={
["warn_atomic_implicit_seq_cst"]={
Line 5,805: Line 5,805:
[e]=k,
[e]=k,
[i]={"e77b48b07840",1536612176,"Implement -Watomic-implicit-seq-cst"},
[i]={"e77b48b07840",1536612176,"Implement -Watomic-implicit-seq-cst"},
[j]={{F,2087,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__sync_synchronize:\n    Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) << TheCall->getCallee()->getSourceRange();"},{F,7361,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) << Callee->getSourceRange();"},{F,12683,"/// Analyze the given simple or compound assignment for warning-worthy\n/// operations.\nstatic void AnalyzeAssignment(Sema &S, BinaryOperator *E) {\n  // Diagnose implicitly sequentially-consistent atomic assignment.\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getRHS()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,12810,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getOperatorLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,13079,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (Source->isAtomicType())\n    S.Diag(E->getExprLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,13590,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  // Skip past explicit casts.\n  if (auto *CE = dyn_cast<ExplicitCastExpr>(E)) {\n    if (!CE->getType()->isVoidType() && E->getType()->isAtomicType())\n      S.Diag(E->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,13657,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E)) {\n    if (U->getOpcode() == UO_LNot) {\n    } else if (U->getOpcode() != UO_AddrOf) {\n      if (U->getSubExpr()->getType()->isAtomicType())\n        S.Diag(U->getSubExpr()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"}}
[j]={{F,2356,"ExprResult Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID, CallExpr *TheCall) {\n  case Builtin::BI__sync_synchronize:\n    Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) << TheCall->getCallee()->getSourceRange();"},{F,7817,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) << Callee->getSourceRange();"},{F,14185,"/// Analyze the given simple or compound assignment for warning-worthy\n/// operations.\nstatic void AnalyzeAssignment(Sema &S, BinaryOperator *E) {\n  // Diagnose implicitly sequentially-consistent atomic assignment.\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getRHS()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,14356,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  if (E->getLHS()->getType()->isAtomicType())\n    S.Diag(E->getOperatorLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,14673,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (Source->isAtomicType())\n    S.Diag(E->getExprLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,15288,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  // Skip past explicit casts.\n  if (auto *CE = dyn_cast<ExplicitCastExpr>(E)) {\n    if (!CE->getType()->isVoidType() && E->getType()->isAtomicType())\n      S.Diag(E->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"},{F,15355,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E)) {\n    if (U->getOpcode() == UO_LNot) {\n    } else if (U->getOpcode() != UO_AddrOf) {\n      if (U->getSubExpr()->getType()->isAtomicType())\n        S.Diag(U->getSubExpr()->getBeginLoc(), diag::warn_atomic_implicit_seq_cst);"}}
},
},
["warn_atomic_member_access"]={
["warn_atomic_member_access"]={
Line 5,819: Line 5,819:
[e]=k,
[e]=k,
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[j]={{"clang/lib/Sema/SemaExprMember.cpp",1072,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // If the base type is an atomic type, this access is undefined behavior per\n  // C11 6.5.2.3p5. Instead of giving a typecheck error, we\'ll warn the user\n  // about the UB and recover by converting the atomic lvalue into a non-atomic\n  // lvalue. Because this is inherently unsafe as an atomic operation, the\n  // warning defaults to an error.\n  if (const auto *ATy = BaseType->getAs<AtomicType>()) {\n    S.DiagRuntimeBehavior(OpLoc, nullptr, S.PDiag(diag::warn_atomic_member_access));"}}
[j]={{"clang/lib/Sema/SemaExprMember.cpp",1306,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // If the base type is an atomic type, this access is undefined behavior per\n  // C11 6.5.2.3p5. Instead of giving a typecheck error, we\'ll warn the user\n  // about the UB and recover by converting the atomic lvalue into a non-atomic\n  // lvalue. Because this is inherently unsafe as an atomic operation, the\n  // warning defaults to an error.\n  if (const auto *ATy = BaseType->getAs<AtomicType>()) {\n    S.DiagRuntimeBehavior(OpLoc, nullptr, S.PDiag(diag::warn_atomic_member_access));"}}
},
},
["warn_atomic_op_has_invalid_memory_order"]={
["warn_atomic_op_has_invalid_memory_order"]={
Line 5,833: Line 5,833:
[e]=k,
[e]=k,
[i]={"c83472e0ff4c",1394537710,"Sema: demote invalid atomic ordering message to warning."},
[i]={"c83472e0ff4c",1394537710,"Sema: demote invalid atomic ordering message to warning."},
[j]={{F,4147,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // Check validity of memory ordering as per C11 / C++11\'s memody model.\n  // Only fence needs check. Atomic dec/inc allow all memory orders.\n  if (!llvm::isValidAtomicOrderingCABI(Ord))\n    return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,4152,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  case llvm::AtomicOrderingCABI::consume:\n    if (BuiltinID == AMDGPU::BI__builtin_amdgcn_fence)\n      return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,7005,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (SubExprs.size() >= 2 && Form != Init) {\n    if (std::optional<llvm::APSInt> Result = SubExprs[1]->getIntegerConstantExpr(Context))\n      if (!isValidOrderingForOp(Result->getSExtValue(), Op))\n        Diag(SubExprs[1]->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << SubExprs[1]->getSourceRange();"}}
[j]={{F,4449,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // Check validity of memory ordering as per C11 / C++11\'s memody model.\n  // Only fence needs check. Atomic dec/inc allow all memory orders.\n  if (!llvm::isValidAtomicOrderingCABI(Ord))\n    return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,4456,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  case llvm::AtomicOrderingCABI::consume:\n    if (BuiltinID == AMDGPU::BI__builtin_amdgcn_fence)\n      return Diag(ArgExpr->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << ArgExpr->getSourceRange();"},{F,7427,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  if (SubExprs.size() >= 2 && Form != Init) {\n    if (std::optional<llvm::APSInt> Result = SubExprs[1]->getIntegerConstantExpr(Context))\n      if (!isValidOrderingForOp(Result->getSExtValue(), Op))\n        Diag(SubExprs[1]->getBeginLoc(), diag::warn_atomic_op_has_invalid_memory_order) << SubExprs[1]->getSourceRange();"}}
},
},
["warn_atomic_op_misaligned"]={
["warn_atomic_op_misaligned"]={
Line 5,847: Line 5,847:
[e]=l,
[e]=l,
[i]={"9dc1d0c74eb1",1524471384,"[Atomics] warn about atomic accesses using libcalls"},
[i]={"9dc1d0c74eb1",1524471384,"[Atomics] warn about atomic accesses using libcalls"},
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",697,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Misaligned) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned) << (int)TInfo.Width.getQuantity() << (int)Ptr.getAlignment().getQuantity();"}}
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",847,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Misaligned) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned) << (int)TInfo.Width.getQuantity() << (int)Ptr.getAlignment().getQuantity();"}}
},
},
["warn_atomic_op_oversized"]={
["warn_atomic_op_oversized"]={
Line 5,861: Line 5,861:
[e]=l,
[e]=l,
[i]={"e18c6ef6b41a",1596564601,"[clang] improve diagnostics for misaligned and large atomics"},
[i]={"e18c6ef6b41a",1596564601,"[clang] improve diagnostics for misaligned and large atomics"},
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",701,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Oversized) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_oversized) << (int)TInfo.Width.getQuantity() << (int)MaxInlineWidth.getQuantity();"}}
[j]={{"clang/lib/CodeGen/CGAtomic.cpp",853,"RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {\n  if (Oversized) {\n    Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_oversized) << (int)TInfo.Width.getQuantity() << (int)MaxInlineWidth.getQuantity();"}}
},
},
["warn_atomic_property_rule"]={
["warn_atomic_property_rule"]={
Line 5,875: Line 5,875:
[e]=k,
[e]=k,
[i]={"13e0c90fc1a9",1257979211,"writable atomic property\'s setter/getter must be in \'lock\' step of"},
[i]={"13e0c90fc1a9",1257979211,"writable atomic property\'s setter/getter must be in \'lock\' step of"},
[j]={{E,1772,"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]={{E,2228,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        Diag(MethodLoc, diag::warn_atomic_property_rule) << Property->getIdentifier() << (GetterMethod != nullptr) << (SetterMethod != nullptr);"}}
},
},
["warn_attr_abi_tag_namespace"]={
["warn_attr_abi_tag_namespace"]={
Line 5,889: Line 5,889:
[e]=k,
[e]=k,
[i]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support"},
[i]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support"},
[j]={{u,6474,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (!NS->isInline()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 0;"},{u,6478,"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]={{u,7331,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (!NS->isInline()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 0;"},{u,7335,"static void handleAbiTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {\n    if (NS->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_abi_tag_namespace) << 1;"}}
},
},
["warn_attr_on_unconsumable_class"]={
["warn_attr_on_unconsumable_class"]={
Line 5,904: Line 5,904:
[e]=k,
[e]=k,
[i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute."},
[i]={"5a715c4f00ac",1377903394,"Consumed analysis: add \'consumable\' class attribute."},
[j]={{u,1095,"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]={{u,1231,"static bool checkForConsumableClass(Sema &S, const CXXMethodDecl *MD, const ParsedAttr &AL) {\n  if (const CXXRecordDecl *RD = ThisType->getAsCXXRecordDecl()) {\n    if (!RD->hasAttr<ConsumableAttr>()) {\n      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class) << RD;"}}
},
},
["warn_attr_swift_name_decl_kind"]={
["warn_attr_swift_name_decl_kind"]={
Line 5,918: Line 5,918:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,6039,"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]={{u,6856,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n  } else {\n    Diag(Loc, diag::warn_attr_swift_name_decl_kind) << AL;"}}
},
},
["warn_attr_swift_name_decl_missing_params"]={
["warn_attr_swift_name_decl_missing_params"]={
Line 5,932: Line 5,932:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{u,5988,"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]={{u,6794,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    // The async name drops the last callback parameter.\n    if (IsAsync) {\n      if (ParamCount == 0) {\n        Diag(Loc, diag::warn_attr_swift_name_decl_missing_params) << AL << isa<ObjCMethodDecl>(D);"}}
},
},
["warn_attr_swift_name_function"]={
["warn_attr_swift_name_function"]={
Line 5,946: Line 5,946:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5811,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Name.back() != \')\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"},{u,5869,"// 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]={{u,6602,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Name.back() != \')\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"},{u,6664,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.back() != \':\') {\n    S.Diag(Loc, diag::warn_attr_swift_name_function) << AL;"}}
},
},
["warn_attr_swift_name_getter_parameters"]={
["warn_attr_swift_name_getter_parameters"]={
Line 5,960: Line 5,960:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5921,"// 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]={{u,6720,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}}
},
},
["warn_attr_swift_name_invalid_identifier"]={
["warn_attr_swift_name_invalid_identifier"]={
Line 5,974: Line 5,974:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5827,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (BaseName.empty()) {\n  } else if (ContextName.empty() || !isValidAsciiIdentifier(ContextName)) {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{u,5834,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (!isValidAsciiIdentifier(BaseName) || BaseName == \"_\") {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"},{u,5881,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (!isValidAsciiIdentifier(CurrentParam)) {\n      S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*parameter*/ 2;"},{u,6030,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (BaseName.empty()) {\n    } else if (!isValidAsciiIdentifier(ContextName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{u,6035,"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]={{u,6618,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (BaseName.empty()) {\n  } else if (ContextName.empty() || !isValidAsciiIdentifier(ContextName)) {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{u,6626,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (!isValidAsciiIdentifier(BaseName) || BaseName == \"_\") {\n    S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"},{u,6676,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (!isValidAsciiIdentifier(CurrentParam)) {\n      S.Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*parameter*/ 2;"},{u,6845,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (BaseName.empty()) {\n    } else if (!isValidAsciiIdentifier(ContextName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*context*/ 1;"},{u,6851,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n  } else if ((isa<EnumConstantDecl>(D) || isa<ObjCProtocolDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<ObjCPropertyDecl>(D) || isa<VarDecl>(D) || isa<TypedefNameDecl>(D) || isa<TagDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FieldDecl>(D)) && !IsAsync) {\n    if (!isValidAsciiIdentifier(BaseName)) {\n      Diag(Loc, diag::warn_attr_swift_name_invalid_identifier) << AL << /*basename*/ 0;"}}
},
},
["warn_attr_swift_name_missing_parameters"]={
["warn_attr_swift_name_missing_parameters"]={
Line 5,988: Line 5,988:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5846,"// 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]={{u,6640,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    S.Diag(Loc, diag::warn_attr_swift_name_missing_parameters) << AL;"}}
},
},
["warn_attr_swift_name_multiple_selfs"]={
["warn_attr_swift_name_multiple_selfs"]={
Line 6,002: Line 6,002:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5890,"// 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]={{u,6686,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  do {\n    if (IsMember && CurrentParam == \"self\") {\n      // More than one \"self\"?\n      if (SelfLocation) {\n        S.Diag(Loc, diag::warn_attr_swift_name_multiple_selfs) << AL;"}}
},
},
["warn_attr_swift_name_num_params"]={
["warn_attr_swift_name_num_params"]={
Line 6,016: Line 6,016:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,6019,"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]={{u,6828,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (!ParamCountValid) {\n      Diag(Loc, diag::warn_attr_swift_name_num_params) << (SwiftParamCount > ParamCount) << AL << ParamCount << SwiftParamCount;"}}
},
},
["warn_attr_swift_name_setter_parameters"]={
["warn_attr_swift_name_setter_parameters"]={
Line 6,030: Line 6,030:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5861,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    if (IsSetter) {\n      S.Diag(Loc, diag::warn_attr_swift_name_setter_parameters) << AL;"},{u,5921,"// 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]={{u,6656,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    if (IsSetter) {\n      S.Diag(Loc, diag::warn_attr_swift_name_setter_parameters) << AL;"},{u,6721,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    unsigned ParamDiag = IsGetter ? diag::warn_attr_swift_name_getter_parameters : diag::warn_attr_swift_name_setter_parameters;"}}
},
},
["warn_attr_swift_name_subscript_getter_newValue"]={
["warn_attr_swift_name_subscript_getter_newValue"]={
Line 6,044: Line 6,044:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5949,"// 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]={{u,6751,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n      } else {\n        // Subscript getters should have no \'newValue:\' parameter.\n        if (NewValueLocation) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_getter_newValue) << AL;"}}
},
},
["warn_attr_swift_name_subscript_invalid_parameter"]={
["warn_attr_swift_name_subscript_invalid_parameter"]={
Line 6,058: Line 6,058:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5841,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // A subscript accessor must be a getter or setter.\n  if (IsSubscript && !IsGetter && !IsSetter) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* getter or setter */ 0;"},{u,5856,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    // Setters and subscripts must have at least one parameter.\n    if (IsSubscript) {\n      S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* have at least one parameter */ 1;"},{u,5911,"// 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]={{u,6634,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // A subscript accessor must be a getter or setter.\n  if (IsSubscript && !IsGetter && !IsSetter) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* getter or setter */ 0;"},{u,6650,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  if (Parameters.empty()) {\n    // Setters and subscripts must have at least one parameter.\n    if (IsSubscript) {\n      S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /* have at least one parameter */ 1;"},{u,6707,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Only instance subscripts are currently supported.\n  if (IsSubscript && !SelfLocation) {\n    S.Diag(Loc, diag::warn_attr_swift_name_subscript_invalid_parameter) << AL << /*have a \'self:\' parameter*/ 2;"}}
},
},
["warn_attr_swift_name_subscript_setter_multiple_newValues"]={
["warn_attr_swift_name_subscript_setter_multiple_newValues"]={
Line 6,072: Line 6,072:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5943,"// 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]={{u,6744,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n        if (NewValueCount > 1) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_multiple_newValues) << AL;"}}
},
},
["warn_attr_swift_name_subscript_setter_no_newValue"]={
["warn_attr_swift_name_subscript_setter_no_newValue"]={
Line 6,086: Line 6,086:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{u,5939,"// 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]={{u,6739,"// For a function, this will validate a compound Swift name, e.g.\n// <code>init(foo:bar:baz:)</code> or <code>controllerForName(_:)</code>, and\n// the function will output the number of parameter names, and whether this is a\n// single-arg initializer.\n//\n// For a type, enum constant, property, or variable declaration, this will\n// validate either a simple identifier, or a qualified\n// <code>context.identifier</code> name.\nstatic bool validateSwiftFunctionName(Sema &S, const ParsedAttr &AL, SourceLocation Loc, StringRef Name, unsigned &SwiftParamCount, bool &IsSingleParamInit) {\n  // Check the number of parameters for a getter/setter.\n  if (IsGetter || IsSetter) {\n    // Subscripts may have additional parameters beyond the expected params for\n    // the index.\n    if (IsSubscript) {\n      // A subscript setter must explicitly label its newValue parameter to\n      // distinguish it from index parameters.\n      if (IsSetter) {\n        if (!NewValueLocation) {\n          S.Diag(Loc, diag::warn_attr_swift_name_subscript_setter_no_newValue) << AL;"}}
},
},
["warn_attribute_address_multiple_identical_qualifiers"]={
["warn_attribute_address_multiple_identical_qualifiers"]={
Line 6,100: Line 6,100:
[e]=k,
[e]=k,
[i]={"f29d777f847b",1529483484,"[Sema] Allow creating types with multiple of the same addrspace."},
[i]={"f29d777f847b",1529483484,"[Sema] Allow creating types with multiple of the same addrspace."},
[j]={{hb,4085,"// Diagnose whether this is a case with the multiple addr spaces.\n// Returns true if this is an invalid case.\n// ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"No type shall be qualified\n// by qualifiers for two or more different address spaces.\"\nstatic bool DiagnoseMultipleAddrSpaceAttributes(Sema &S, LangAS ASOld, LangAS ASNew, SourceLocation AttrLoc) {\n  if (ASOld != LangAS::Default) {\n    S.Diag(AttrLoc, diag::warn_attribute_address_multiple_identical_qualifiers);"}}
[j]={{hb,4629,"// Diagnose whether this is a case with the multiple addr spaces.\n// Returns true if this is an invalid case.\n// ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"No type shall be qualified\n// by qualifiers for two or more different address spaces.\"\nstatic bool DiagnoseMultipleAddrSpaceAttributes(Sema &S, LangAS ASOld, LangAS ASNew, SourceLocation AttrLoc) {\n  if (ASOld != LangAS::Default) {\n    S.Diag(AttrLoc, diag::warn_attribute_address_multiple_identical_qualifiers);"}}
},
},
["warn_attribute_after_definition_ignored"]={
["warn_attribute_after_definition_ignored"]={
Line 6,114: Line 6,114:
[e]=k,
[e]=k,
[i]={"06e1b13209a8",1342067550,"Ignore visibility attributes after definitions. This matches newer (4.7) gcc\'s"},
[i]={"06e1b13209a8",1342067550,"Ignore visibility attributes after definitions. This matches newer (4.7) gcc\'s"},
[j]={{y,8888,"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]={{y,10383,"void Sema::ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc, Decl *TagDecl, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &AttrList) {\n  for (const ParsedAttr &AL : AttrList) {\n    Diag(AL.getLoc(), diag::warn_attribute_after_definition_ignored) << AL;"}}
},
},
["warn_attribute_argument_n_negative"]={
["warn_attribute_argument_n_negative"]={
Line 6,128: Line 6,128:
[e]=k,
[e]=k,
[i]={"7093e4064116",1429656954,"[cuda] Allow using integral non-type template parameters as launch_bounds attribute arguments."},
[i]={"7093e4064116",1429656954,"[cuda] Allow using integral non-type template parameters as launch_bounds attribute arguments."},
[j]={{u,4965,"// 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]={{u,5624,"// Checks whether an argument of launch_bounds attribute is\n// acceptable, performs implicit conversion to Rvalue, and returns\n// non-nullptr Expr result on success. Otherwise, it returns nullptr\n// and may output an error.\nstatic Expr *makeLaunchBoundsArgExpr(Sema &S, Expr *E, const CUDALaunchBoundsAttr &AL, const unsigned Idx) {\n  if (*I < 0)\n    S.Diag(E->getExprLoc(), diag::warn_attribute_argument_n_negative) << &AL << Idx << E->getSourceRange();"}}
},
},
["warn_attribute_cmse_entry_static"]={
["warn_attribute_cmse_entry_static"]={
Line 6,142: Line 6,142:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{u,1930,"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]={{u,2152,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FD->isExternallyVisible()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_cmse_entry_static);"}}
},
},
["warn_attribute_dll_instantiated_base_class"]={
["warn_attribute_dll_instantiated_base_class"]={
Line 6,157: Line 6,157:
[e]=k,
[e]=k,
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[i]={"9bea9cc73bd0",1403720757,"MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)"},
[j]={{y,5669,"/// 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]={{y,6656,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  Diag(BaseLoc, diag::warn_attribute_dll_instantiated_base_class) << BaseTemplateSpec->isExplicitSpecialization();"}}
},
},
["warn_attribute_dll_redeclaration"]={
["warn_attribute_dll_redeclaration"]={
Line 6,171: Line 6,171:
[e]=k,
[e]=k,
[i]={"dd96db2c034c",1409174860,"Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20..."},
[i]={"dd96db2c034c",1409174860,"Allow adding dll attributes on certain redecls with a warning if the decl hasn\'t been used yet (PR20..."},
[j]={{v,6312,"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]={{v,7092,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {\n    unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration : diag::err_attribute_dll_redeclaration;"}}
},
},
["warn_attribute_dllexport_explicit_instantiation_decl"]={
["warn_attribute_dllexport_explicit_instantiation_decl"]={
Line 6,185: Line 6,185:
[e]=k,
[e]=k,
[i]={"fd76d9136601",1421356710,"Warn about dllexported explicit class template instantiation declarations (PR22035)"},
[i]={"fd76d9136601",1421356710,"Warn about dllexported explicit class template instantiation declarations (PR22035)"},
[j]={{x,8223,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation declarations,\n    // except for MinGW mode.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"},{x,8230,"// 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]={{x,9995,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation declarations,\n    // except for MinGW mode.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"},{x,10003,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    if (auto *A = ClassTemplate->getTemplatedDecl()->getAttr<DLLExportAttr>()) {\n      Diag(ExternLoc, diag::warn_attribute_dllexport_explicit_instantiation_decl);"}}
},
},
["warn_attribute_dllexport_explicit_instantiation_def"]={
["warn_attribute_dllexport_explicit_instantiation_def"]={
Line 6,199: Line 6,199:
[e]=k,
[e]=k,
[i]={"5be69bc68a65",1556266191,"[MinGW] Fix dllexport of explicit template instantiation"},
[i]={"5be69bc68a65",1556266191,"[MinGW] Fix dllexport of explicit template instantiation"},
[j]={{x,8279,"// 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]={{x,10059,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDefinition && PrevDecl != nullptr && Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation definitions in MinGW\n    // mode, if a previous declaration of the instantiation was seen.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(AL.getLoc(), diag::warn_attribute_dllexport_explicit_instantiation_def);"}}
},
},
["warn_attribute_dllimport_static_field_definition"]={
["warn_attribute_dllimport_static_field_definition"]={
Line 6,213: Line 6,213:
[e]=k,
[e]=k,
[i]={"e9af3164237f",1401841121,"Downgrade \"definition of dllimport static field\" error to warning for class templates (PR19902)"},
[i]={"e9af3164237f",1401841121,"Downgrade \"definition of dllimport static field\" error to warning for class templates (PR19902)"},
[j]={{v,12618,"/// 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]={{v,14445,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      Diag(VD->getLocation(), IsClassTemplateMember ? diag::warn_attribute_dllimport_static_field_definition : diag::err_attribute_dllimport_static_field_definition);"}}
},
},
["warn_attribute_has_no_effect_on_compile_time_if"]={
["warn_attribute_has_no_effect_on_compile_time_if"]={
Line 6,227: Line 6,227:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{O,807,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n    auto DiagnoseLikelihood = [&](const Stmt *S) {\n      if (const Attr *A = Stmt::getLikelihoodAttr(S)) {\n        Diags.Report(A->getLocation(), diag::warn_attribute_has_no_effect_on_compile_time_if) << A << ConstevalOrNegatedConsteval << A->getRange();"}}
[j]={{O,909,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n    auto DiagnoseLikelihood = [&](const Stmt *S) {\n      if (const Attr *A = Stmt::getLikelihoodAttr(S)) {\n        Diags.Report(A->getLocation(), diag::warn_attribute_has_no_effect_on_compile_time_if) << A << ConstevalOrNegatedConsteval << A->getRange();"}}
},
},
["warn_attribute_has_no_effect_on_infinite_loop"]={
["warn_attribute_has_no_effect_on_infinite_loop"]={
Line 6,241: Line 6,241:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{"clang/lib/CodeGen/CGStmt.cpp",903,"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  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();"}}
},
},
["warn_attribute_iboutlet"]={
["warn_attribute_iboutlet"]={
Line 6,255: Line 6,255:
[e]=k,
[e]=k,
[i]={"d68ec818c351",1296802456,"Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance m..."},
[i]={"d68ec818c351",1296802456,"Downgrade error about attribute \'iboutlet\' and \'ibaction\' being applied to anything but a instance m..."},
[j]={{u,1328,"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]={{u,1487,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_iboutlet) << AL;"}}
},
},
["warn_attribute_ignored"]={
["warn_attribute_ignored"]={
Line 6,269: Line 6,269:
[e]=l,
[e]=l,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{Tb,3047,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    DoneWithDeclSpec:\n      if (!AttrsLastTime)\n      else {\n        // Reject C++11 / C2x attributes that aren\'t type attributes.\n        for (const ParsedAttr &PA : attrs) {\n          // GCC ignores this attribute when placed on the DeclSpec in [[]]\n          // syntax, so we do the same.\n          if (PA.getKind() == ParsedAttr::AT_VectorSize) {\n            Diag(PA.getLoc(), diag::warn_attribute_ignored) << PA;"},{"clang/lib/Parse/ParseStmt.cpp",316,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::kw_asm: {\n    for (const ParsedAttr &AL : CXX11Attrs)\n      (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"},{"clang/lib/Sema/ParsedAttr.cpp",155,"bool ParsedAttr::diagnoseLangOpts(Sema &S) const {\n  S.Diag(getLoc(), diag::warn_attribute_ignored) << *this;"},{u,1276,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n  } else\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{u,2536,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // Visibility attributes don\'t mean anything on a typedef.\n  if (isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored) << AL;"},{u,3360,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.getLangOpts().CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{u,4284,"AlwaysInlineAttr *Sema::mergeAlwaysInlineAttr(Decl *D, const AttributeCommonInfo &CI, const IdentifierInfo *Ident) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << Ident;"},{u,4332,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'minsize\'\";"},{u,4357,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(Inline->getLocation(), diag::warn_attribute_ignored) << Inline;"},{u,4362,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(MinSize->getLocation(), diag::warn_attribute_ignored) << MinSize;"},{u,7062,"DLLImportAttr *Sema::mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (D->hasAttr<DLLExportAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'dllimport\'\";"},{u,7074,"DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (DLLImportAttr *Import = D->getAttr<DLLImportAttr>()) {\n    Diag(Import->getLocation(), diag::warn_attribute_ignored) << Import;"},{u,7086,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (isa<ClassTemplatePartialSpecializationDecl>(D) && (S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n    S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored) << A;"},{hb,6911,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (attr.getKind() == ParsedAttr::AT_CmseNSCall) {\n    // Ignore if we don\'t have CMSE enabled.\n    if (!S.getLangOpts().Cmse) {\n      S.Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"},{hb,7662,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    case ParsedAttr::AT_NoDeref: {\n      // FIXME: `noderef` currently doesn\'t work correctly in [[]] syntax.\n      // See https://github.com/llvm/llvm-project/issues/55790 for details.\n      // For the time being, we simply emit a warning that the attribute is\n      // ignored.\n      if (attr.isStandardAttributeSyntax()) {\n        state.getSema().Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"}}
[j]={{Tb,3342,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    DoneWithDeclSpec:\n      if (!AttrsLastTime)\n      else {\n        // Reject C++11 / C2x attributes that aren\'t type attributes.\n        for (const ParsedAttr &PA : attrs) {\n          // GCC ignores this attribute when placed on the DeclSpec in [[]]\n          // syntax, so we do the same.\n          if (PA.getKind() == ParsedAttr::AT_VectorSize) {\n            Diag(PA.getLoc(), diag::warn_attribute_ignored) << PA;"},{"clang/lib/Parse/ParseStmt.cpp",343,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::kw_asm: {\n    for (const ParsedAttr &AL : CXX11Attrs)\n      (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"},{"clang/lib/Sema/ParsedAttr.cpp",184,"bool ParsedAttr::diagnoseLangOpts(Sema &S) const {\n  S.Diag(getLoc(), diag::warn_attribute_ignored) << *this;"},{u,1428,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n  } else\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{u,2897,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // Visibility attributes don\'t mean anything on a typedef.\n  if (isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored) << AL;"},{u,3846,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.getLangOpts().CPlusPlus) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL;"},{u,4887,"AlwaysInlineAttr *Sema::mergeAlwaysInlineAttr(Decl *D, const AttributeCommonInfo &CI, const IdentifierInfo *Ident) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << Ident;"},{u,4943,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'minsize\'\";"},{u,4973,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(Inline->getLocation(), diag::warn_attribute_ignored) << Inline;"},{u,4978,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(MinSize->getLocation(), diag::warn_attribute_ignored) << MinSize;"},{u,8006,"DLLImportAttr *Sema::mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (D->hasAttr<DLLExportAttr>()) {\n    Diag(CI.getLoc(), diag::warn_attribute_ignored) << \"\'dllimport\'\";"},{u,8019,"DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (DLLImportAttr *Import = D->getAttr<DLLImportAttr>()) {\n    Diag(Import->getLocation(), diag::warn_attribute_ignored) << Import;"},{u,8032,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (isa<ClassTemplatePartialSpecializationDecl>(D) && (S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n    S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored) << A;"},{hb,7805,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (attr.getKind() == ParsedAttr::AT_CmseNSCall) {\n    // Ignore if we don\'t have CMSE enabled.\n    if (!S.getLangOpts().Cmse) {\n      S.Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"},{hb,8664,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    case ParsedAttr::AT_NoDeref: {\n      // FIXME: `noderef` currently doesn\'t work correctly in [[]] syntax.\n      // See https://github.com/llvm/llvm-project/issues/55790 for details.\n      // For the time being, we simply emit a warning that the attribute is\n      // ignored.\n      if (attr.isStandardAttributeSyntax()) {\n        state.getSema().Diag(attr.getLoc(), diag::warn_attribute_ignored) << attr;"}}
},
},
["warn_attribute_ignored_for_field_of_type"]={
["warn_attribute_ignored_for_field_of_type"]={
Line 6,283: Line 6,283:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{u,1264,"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]={{u,1415,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n    if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n      if (BitfieldByteAligned)\n        S.Diag(AL.getLoc(), diag::warn_attribute_ignored_for_field_of_type) << AL << FD->getType();"}}
},
},
["warn_attribute_ignored_no_calls_in_stmt"]={
["warn_attribute_ignored_no_calls_in_stmt"]={
Line 6,297: Line 6,297:
[e]=k,
[e]=k,
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."},
[j]={{"clang/lib/Sema/SemaStmtAttr.cpp",175,"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",196,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  if (!CEF.foundCallExpr()) {\n    return SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"}}
[j]={{"clang/lib/Sema/SemaStmtAttr.cpp",211,"static Attr *handleNoMergeAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!CEF.foundCallExpr() && !CEF.foundAsmStmt()) {\n    S.Diag(St->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"},{"clang/lib/Sema/SemaStmtAttr.cpp",238,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  if (!CEF.foundCallExpr()) {\n    return SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt) << A;"}}
},
},
["warn_attribute_ignored_non_function_pointer"]={
["warn_attribute_ignored_non_function_pointer"]={
Line 6,311: Line 6,311:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{u,7382,"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]={{u,8382,"static void handleNoMergeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VDecl && !VDecl->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_ignored_non_function_pointer) << AL << VDecl;"}}
},
},
["warn_attribute_ignored_on_inline"]={
["warn_attribute_ignored_on_inline"]={
Line 6,325: Line 6,325:
[e]=k,
[e]=k,
[i]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)"},
[i]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)"},
[j]={{u,7093,"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]={{u,8040,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isInlined() && A.getKind() == ParsedAttr::AT_DLLImport && !(S.Context.getTargetInfo().shouldDLLImportComdatSymbols())) {\n      S.Diag(A.getRange().getBegin(), diag::warn_attribute_ignored_on_inline) << A;"}}
},
},
["warn_attribute_ignored_on_non_definition"]={
["warn_attribute_ignored_on_non_definition"]={
Line 6,339: Line 6,339:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{v,12642,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (UsedAttr *Attr = VD->getAttr<UsedAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"},{v,12648,"/// 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]={{v,14471,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (UsedAttr *Attr = VD->getAttr<UsedAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"},{v,14478,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  if (RetainAttr *Attr = VD->getAttr<RetainAttr>()) {\n    if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {\n      Diag(Attr->getLocation(), diag::warn_attribute_ignored_on_non_definition) << Attr;"}}
},
},
["warn_attribute_invalid_on_definition"]={
["warn_attribute_invalid_on_definition"]={
Line 6,353: Line 6,353:
[e]=k,
[e]=k,
[i]={"52d598e24269",1369086809,"Warn on and drop dllimport attrs from variable definitions"},
[i]={"52d598e24269",1369086809,"Warn on and drop dllimport attrs from variable definitions"},
[j]={{u,2803,"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]={{u,3195,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n      S.Diag(AL.getLoc(), diag::warn_attribute_invalid_on_definition) << \"weak_import\";"}}
},
},
["warn_attribute_no_builtin_invalid_builtin_name"]={
["warn_attribute_no_builtin_invalid_builtin_name"]={
Line 6,367: Line 6,367:
[e]=k,
[e]=k,
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[i]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[j]={{u,1026,"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]={{u,1153,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Add current attributes.\n  if (AL.getNumArgs() == 0)\n  else\n    for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n      if (Builtin::Context::isBuiltinFunc(BuiltinName))\n      else\n        S.Diag(LiteralLoc, diag::warn_attribute_no_builtin_invalid_builtin_name) << BuiltinName << AL;"}}
},
},
["warn_attribute_no_decl"]={
["warn_attribute_no_decl"]={
Line 6,381: Line 6,381:
[e]=Q,
[e]=Q,
[i]={"71d610329554",1330727390,"Issue warning when late-parsed attributes have no declaration."},
[i]={"71d610329554",1330727390,"Issue warning when late-parsed attributes have no declaration."},
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",665,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (LA.Decls.size() > 0) {\n  } else {\n    Diag(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName();"}}
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",767,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (LA.Decls.size() > 0) {\n  } else {\n    Diag(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName();"}}
},
},
["warn_attribute_nonnull_no_pointers"]={
["warn_attribute_nonnull_no_pointers"]={
Line 6,395: Line 6,395:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{u,1445,"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]={{u,1618,"static void handleNonNullAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // If no arguments were specified to __attribute__((nonnull)) then all pointer\n  // arguments have a nonnull attribute; warn if there aren\'t any. Skip this\n  // check if the attribute came from a macro expansion or a template\n  // instantiation.\n  if (NonNullArgs.empty() && AL.getLoc().isFileID() && !S.inTemplateInstantiation()) {\n    if (!AnyPointers)\n      S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_no_pointers);"}}
},
},
["warn_attribute_nonnull_parm_no_args"]={
["warn_attribute_nonnull_parm_no_args"]={
Line 6,409: Line 6,409:
[e]=k,
[e]=k,
[i]={"9aedc159ef4c",1389939896,"Enhance attribute \'nonnull\' to be applicable to parameters directly (infix)."},
[i]={"9aedc159ef4c",1389939896,"Enhance attribute \'nonnull\' to be applicable to parameters directly (infix)."},
[j]={{u,1459,"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]={{u,1633,"static void handleNonNullAttrParameter(Sema &S, ParmVarDecl *D, const ParsedAttr &AL) {\n  if (AL.getNumArgs() > 0) {\n    if (D->getFunctionType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_nonnull_parm_no_args) << D->getSourceRange();"}}
},
},
["warn_attribute_not_on_decl"]={
["warn_attribute_not_on_decl"]={
Line 6,423: Line 6,423:
[e]=k,
[e]=k,
[i]={"42856de54283",1317446223,"Hey, maybe we shouldn\'t silently ignore decl attributes"},
[i]={"42856de54283",1317446223,"Hey, maybe we shouldn\'t silently ignore decl attributes"},
[j]={{u,8554,"/// 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]={{u,9621,"/// checkUnusedDeclAttributes - Check a list of attributes to see if it\n/// contains any decl attributes that we should warn about.\nstatic void checkUnusedDeclAttributes(Sema &S, const ParsedAttributesView &A) {\n  for (const ParsedAttr &AL : A) {\n    if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_not_on_decl) << AL << AL.getRange();"}}
},
},
["warn_attribute_on_function_definition"]={
["warn_attribute_on_function_definition"]={
Line 6,437: Line 6,437:
[e]=Q,
[e]=Q,
[i]={"3fc6e4a7cda9",1329411043,"Allow thread safety attributes on function definitions."},
[i]={"3fc6e4a7cda9",1329411043,"Allow thread safety attributes on function definitions."},
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",669,"/// 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",1189,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // Check to make sure that any normal attributes are allowed to be on\n  // a definition.  Late parsed attributes are checked at the end.\n  if (Tok.isNot(tok::equal)) {\n    for (const ParsedAttr &AL : D.getAttributes())\n      if (AL.isKnownToGCC() && !AL.isStandardAttributeSyntax())\n        Diag(AL.getLoc(), diag::warn_attribute_on_function_definition) << AL;"}}
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",772,"/// Finish parsing an attribute for which parsing was delayed.\n/// This will be called at the end of parsing a class declaration\n/// for each LateParsedAttribute. We consume the saved tokens and\n/// create an attribute with the arguments filled in. We add this\n/// to the Attribute list for the decl.\nvoid Parser::ParseLexedAttribute(LateParsedAttribute &LA, bool EnterScope, bool OnDefinition) {\n  if (OnDefinition && !Attrs.empty() && !Attrs.begin()->isCXX11Attribute() && Attrs.begin()->isKnownToGCC())\n    Diag(Tok, diag::warn_attribute_on_function_definition) << &LA.AttrName;"},{"clang/lib/Parse/Parser.cpp",1295,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // Check to make sure that any normal attributes are allowed to be on\n  // a definition.  Late parsed attributes are checked at the end.\n  if (Tok.isNot(tok::equal)) {\n    for (const ParsedAttr &AL : D.getAttributes())\n      if (AL.isKnownToGCC() && !AL.isStandardAttributeSyntax())\n        Diag(AL.getLoc(), diag::warn_attribute_on_function_definition) << AL;"}}
},
},
["warn_attribute_packed_for_bitfield"]={
["warn_attribute_packed_for_bitfield"]={
Line 6,451: Line 6,451:
[e]=k,
[e]=k,
[i]={"830dfccfb2c0",1449135289,"PR25575: Make GCC 4.4+ comatible layout for packed bit-fileds of char type, patch by D. Polukhin"},
[i]={"830dfccfb2c0",1449135289,"PR25575: Make GCC 4.4+ comatible layout for packed bit-fileds of char type, patch by D. Polukhin"},
[j]={{u,1270,"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]={{u,1422,"static void handlePackedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *TD = dyn_cast<TagDecl>(D))\n  else if (auto *FD = dyn_cast<FieldDecl>(D)) {\n    if (S.getASTContext().getTargetInfo().getTriple().isPS()) {\n    } else {\n      // Report warning about changed offset in the newer compiler versions.\n      if (BitfieldByteAligned)\n        S.Diag(AL.getLoc(), diag::warn_attribute_packed_for_bitfield);"}}
},
},
["warn_attribute_pointer_or_reference_only"]={
["warn_attribute_pointer_or_reference_only"]={
Line 6,465: Line 6,465:
[e]=k,
[e]=k,
[i]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute"},
[i]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute"},
[j]={{u,3779,"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]={{u,4323,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  if (!T->isDependentType() && !T->isAnyPointerType() && !T->isReferenceType() && !T->isMemberPointerType()) {\n    Diag(AttrLoc, diag::warn_attribute_pointer_or_reference_only) << &TmpAttr << T << D->getSourceRange();"}}
},
},
["warn_attribute_pointers_only"]={
["warn_attribute_pointers_only"]={
Line 6,479: Line 6,479:
[e]=k,
[e]=k,
[i]={"cedaaea69127",1388077669,"This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diag..."},
[i]={"cedaaea69127",1388077669,"This diagnostic did not accept arguments, and did not have any test coverage. Parameterized the diag..."},
[j]={{u,1411,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n    else\n      S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AttrParmRange << TypeRange << 0;"},{u,1488,"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]={{u,1577,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n    else\n      S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AttrParmRange << TypeRange << 0;"},{u,1664,"static void handleNoEscapeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.isValidPointerAttrType(T, /* RefOkay */ true)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_pointers_only) << AL << AL.getRange() << 0;"}}
},
},
["warn_attribute_precede_definition"]={
["warn_attribute_precede_definition"]={
Line 6,493: Line 6,493:
[e]=k,
[e]=k,
[i]={"e5dc8594ea99",1248560984,"PR3575 - warn on declared variable or function attributes after a definition, which are currently ig..."},
[i]={"e5dc8594ea99",1248560984,"PR3575 - warn on declared variable or function attributes after a definition, which are currently ig..."},
[j]={{v,2823,"/// 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]={{v,3122,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    S.Diag(NewAttribute->getLocation(), diag::warn_attribute_precede_definition);"}}
},
},
["warn_attribute_protected_visibility"]={
["warn_attribute_protected_visibility"]={
Line 6,507: Line 6,507:
[e]=k,
[e]=k,
[i]={"eed64c77d27f",1327800030,"Complain about attempts to use \'protected\' visibility on targets"},
[i]={"eed64c77d27f",1327800030,"Complain about attempts to use \'protected\' visibility on targets"},
[j]={{u,2561,"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]={{u,2926,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // Complain about attempts to use protected visibility on targets\n  // (like Darwin) that don\'t support it.\n  if (type == VisibilityAttr::Protected && !S.Context.getTargetInfo().hasProtectedVisibility()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_protected_visibility);"}}
},
},
["warn_attribute_return_pointers_only"]={
["warn_attribute_return_pointers_only"]={
Line 6,521: Line 6,521:
[e]=k,
[e]=k,
[i]={"dbf62e3eee51",1390197047,"Wire up basic parser/sema support for attribute \'returns_nonnull\'."},
[i]={"dbf62e3eee51",1390197047,"Wire up basic parser/sema support for attribute \'returns_nonnull\'."},
[j]={{u,729,"static void handleAllocSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RetTy->isPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL;"},{u,1409,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n      S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << AttrParmRange << TypeRange;"},{u,1845,"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]={{u,835,"static void handleAllocSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RetTy->isPointerType()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL;"},{u,1574,"static bool attrNonNullArgCheck(Sema &S, QualType T, const ParsedAttr &AL, SourceRange AttrParmRange, SourceRange TypeRange, bool isReturnValue = false) {\n  if (!S.isValidPointerAttrType(T)) {\n    if (isReturnValue)\n      S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << AttrParmRange << TypeRange;"},{u,2058,"static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) << AL << getFunctionOrMethodResultSourceRange(D);"}}
},
},
["warn_attribute_return_pointers_refs_only"]={
["warn_attribute_return_pointers_refs_only"]={
Line 6,535: Line 6,535:
[e]=k,
[e]=k,
[i]={"ee90a223ead9",1411707870,"Support the assume_aligned function attribute"},
[i]={"ee90a223ead9",1411707870,"Support the assume_aligned function attribute"},
[j]={{u,1510,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << TmpAttr.getRange() << SR;"},{u,1548,"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]={{u,1691,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  if (!isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << TmpAttr.getRange() << SR;"},{u,1740,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  if (!ResultType->isDependentType() && !isValidPointerAttrType(ResultType, /* RefOkay */ true)) {\n    Diag(AttrLoc, diag::warn_attribute_return_pointers_refs_only) << &TmpAttr << CI.getRange() << getFunctionOrMethodResultSourceRange(D);"}}
},
},
["warn_attribute_section_drectve"]={
["warn_attribute_section_drectve"]={
Line 6,549: Line 6,549:
[e]=k,
[e]=k,
[i]={"9801621616b2",1562630543,"clang-cl: Port cl.exe\'s C4659 to clang-cl"},
[i]={"9801621616b2",1562630543,"clang-cl: Port cl.exe\'s C4659 to clang-cl"},
[j]={{sb,626,"/// Called on well formed \\#pragma bss_seg().\nvoid Sema::ActOnPragmaMSSeg(SourceLocation PragmaLocation, PragmaMsStackAction Action, llvm::StringRef StackSlotLabel, StringLiteral *SegmentName, llvm::StringRef PragmaName) {\n  if (SegmentName) {\n    if (SegmentName->getString() == \".drectve\" && Context.getTargetInfo().getCXXABI().isMicrosoft())\n      Diag(PragmaLocation, diag::warn_attribute_section_drectve) << PragmaName;"}}
[j]={{sb,756,"/// Called on well formed \\#pragma bss_seg().\nvoid Sema::ActOnPragmaMSSeg(SourceLocation PragmaLocation, PragmaMsStackAction Action, llvm::StringRef StackSlotLabel, StringLiteral *SegmentName, llvm::StringRef PragmaName) {\n  if (SegmentName) {\n    if (SegmentName->getString() == \".drectve\" && Context.getTargetInfo().getCXXABI().isMicrosoft())\n      Diag(PragmaLocation, diag::warn_attribute_section_drectve) << PragmaName;"}}
},
},
["warn_attribute_section_on_redeclaration"]={
["warn_attribute_section_on_redeclaration"]={
Line 6,563: Line 6,563:
[e]=k,
[e]=k,
[i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. "},
[i]={"99fdfb6a4644",1506469354,"Emit section information for extern variables. "},
[j]={{v,2952,"/// 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]={{v,3272,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // This redeclaration adds a section attribute.\n  if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) {\n    if (auto *VD = dyn_cast<VarDecl>(New)) {\n      if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly) {\n        Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration);"}}
},
},
["warn_attribute_sentinel_named_arguments"]={
["warn_attribute_sentinel_named_arguments"]={
Line 6,577: Line 6,577:
[e]=k,
[e]=k,
[i]={"9363e3106edc",1237331027,"don\'t crash when sentinel attribute is used on function without a prototype,"},
[i]={"9363e3106edc",1237331027,"don\'t crash when sentinel attribute is used on function without a prototype,"},
[j]={{u,2714,"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]={{u,3091,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (isa<FunctionNoProtoType>(FT)) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_named_arguments);"}}
},
},
["warn_attribute_sentinel_not_variadic"]={
["warn_attribute_sentinel_not_variadic"]={
Line 6,591: Line 6,591:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{u,2719,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{u,2724,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n    if (!MD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{u,2729,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n    if (!BD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 1;"},{u,2738,"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]={{u,3096,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{u,3101,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n    if (!MD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 0;"},{u,3106,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n    if (!BD->isVariadic()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << 1;"},{u,3119,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n      if (!cast<FunctionProtoType>(FT)->isVariadic()) {\n        S.Diag(AL.getLoc(), diag::warn_attribute_sentinel_not_variadic) << m;"}}
},
},
["warn_attribute_type_not_supported"]={
["warn_attribute_type_not_supported"]={
Line 6,605: Line 6,605:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{Tb,1425,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (Tok.isNot(tok::kw_struct) && Tok.isNot(tok::kw_enum)) {\n    Diag(Tok, diag::warn_attribute_type_not_supported) << &AttrName << Tok.getIdentifierInfo();"},{u,1079,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ConsumableAttr::ConvertStrToConsumedState(IL->Ident->getName(), DefaultState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,1127,"static void handleCallableWhenAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned ArgIndex = 0; ArgIndex < AL.getNumArgs(); ++ArgIndex) {\n    if (!CallableWhenAttr::ConvertStrToConsumedState(StateString, CallableState)) {\n      S.Diag(Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{u,1145,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ParamTypestateAttr::ConvertStrToConsumedState(StateString, ParamState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{u,1174,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ReturnTypestateAttr::ConvertStrToConsumedState(IL->Ident->getName(), ReturnState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,1219,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!SetTypestateAttr::ConvertStrToConsumedState(Param, NewState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{u,1239,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!TestTypestateAttr::ConvertStrToConsumedState(Param, TestState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{u,2554,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  if (!VisibilityAttr::ConvertStrToVisibilityType(TypeStr, type)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << TypeStr;"},{u,2607,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ObjCMethodFamilyAttr::ConvertStrToFamilyKind(IL->Ident->getName(), F)) {\n    S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,2668,"static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!BlocksAttr::ConvertStrToBlockType(II->getName(), type)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,3295,"static void handleEnumExtensibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!EnumExtensibilityAttr::ConvertStrToKind(II->getName(), ExtensibilityKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,3463,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == InvalidFormat) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II->getName();"},{u,5658,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftErrorAttr::ConvertStrToConventionKind(Loc->Ident->getName(), Convention)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Loc->Ident;"},{u,5757,"static void handleSwiftAsyncError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncErrorAttr::ConvertStrToConventionKind(IDLoc->Ident->getName(), ConvKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << IDLoc->Ident;"},{u,6082,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftNewTypeAttr::ConvertStrToNewtypeKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,6345,"static void handleHLSLShaderAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HLSLShaderAttr::ConvertStrToShaderType(Str, ShaderType) ||\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,6510,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ARMInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,6607,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!MipsInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << \"\'\" + std::string(Str) + \"\'\";"},{u,6875,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RISCVInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,7348,"static void handleZeroCallUsedRegsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ZeroCallUsedRegsAttr::ConvertStrToZeroCallUsedRegsKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{u,7364,"static void handleFunctionReturnThunksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FunctionReturnThunksAttr::ConvertStrToKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{u,7581,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CFGuardAttr::ConvertStrToGuardArg(II->getName(), Arg)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{hb,6136,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (II->isStr(\"none\"))\n  else if (II->isStr(\"strong\"))\n  else if (II->isStr(\"weak\"))\n  else if (II->isStr(\"autoreleasing\"))\n  else {\n    S.Diag(AttrLoc, diag::warn_attribute_type_not_supported) << attr << II;"},{hb,6291,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (II->isStr(\"weak\"))\n  else if (II->isStr(\"strong\"))\n  else {\n    S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported) << attr << II;"}}
[j]={{Tb,1574,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  if (Tok.isNot(tok::kw_struct) && Tok.isNot(tok::kw_enum)) {\n    Diag(Tok, diag::warn_attribute_type_not_supported) << &AttrName << Tok.getIdentifierInfo();"},{u,1212,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ConsumableAttr::ConvertStrToConsumedState(IL->Ident->getName(), DefaultState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,1264,"static void handleCallableWhenAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned ArgIndex = 0; ArgIndex < AL.getNumArgs(); ++ArgIndex) {\n    if (!CallableWhenAttr::ConvertStrToConsumedState(StateString, CallableState)) {\n      S.Diag(Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{u,1284,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ParamTypestateAttr::ConvertStrToConsumedState(StateString, ParamState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << StateString;"},{u,1316,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!ReturnTypestateAttr::ConvertStrToConsumedState(IL->Ident->getName(), ReturnState)) {\n      S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,1363,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!SetTypestateAttr::ConvertStrToConsumedState(Param, NewState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{u,1385,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isArgIdent(0)) {\n    if (!TestTypestateAttr::ConvertStrToConsumedState(Param, TestState)) {\n      S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported) << AL << Param;"},{u,2917,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  if (!VisibilityAttr::ConvertStrToVisibilityType(TypeStr, type)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << TypeStr;"},{u,2975,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ObjCMethodFamilyAttr::ConvertStrToFamilyKind(IL->Ident->getName(), F)) {\n    S.Diag(IL->Loc, diag::warn_attribute_type_not_supported) << AL << IL->Ident;"},{u,3041,"static void handleBlocksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!BlocksAttr::ConvertStrToBlockType(II->getName(), type)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,3763,"static void handleEnumExtensibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!EnumExtensibilityAttr::ConvertStrToKind(II->getName(), ExtensibilityKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,3962,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == InvalidFormat) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II->getName();"},{u,6427,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftErrorAttr::ConvertStrToConventionKind(Loc->Ident->getName(), Convention)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Loc->Ident;"},{u,6543,"static void handleSwiftAsyncError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncErrorAttr::ConvertStrToConventionKind(IDLoc->Ident->getName(), ConvKind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << IDLoc->Ident;"},{u,6900,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftNewTypeAttr::ConvertStrToNewtypeKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{u,7192,"static void handleHLSLShaderAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HLSLShaderAttr::ConvertStrToShaderType(Str, ShaderType) ||\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,7368,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ARMInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,7477,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!MipsInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << \"\'\" + std::string(Str) + \"\'\";"},{u,7798,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RISCVInterruptAttr::ConvertStrToInterruptType(Str, Kind)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << Str << ArgLoc;"},{u,8344,"static void handleZeroCallUsedRegsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!ZeroCallUsedRegsAttr::ConvertStrToZeroCallUsedRegsKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{u,8362,"static void handleFunctionReturnThunksAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!FunctionReturnThunksAttr::ConvertStrToKind(KindStr, Kind)) {\n    S.Diag(LiteralLoc, diag::warn_attribute_type_not_supported) << AL << KindStr;"},{u,8600,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!CFGuardAttr::ConvertStrToGuardArg(II->getName(), Arg)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_type_not_supported) << AL << II;"},{hb,6953,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (II->isStr(\"none\"))\n  else if (II->isStr(\"strong\"))\n  else if (II->isStr(\"weak\"))\n  else if (II->isStr(\"autoreleasing\"))\n  else {\n    S.Diag(AttrLoc, diag::warn_attribute_type_not_supported) << attr << II;"},{hb,7126,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  if (II->isStr(\"weak\"))\n  else if (II->isStr(\"strong\"))\n  else {\n    S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported) << attr << II;"}}
},
},
["warn_attribute_type_not_supported_global"]={
["warn_attribute_type_not_supported_global"]={
Line 6,619: Line 6,619:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{u,7257,"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]={{u,8234,"static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n    if (parseSanitizerValue(SanitizerName, /*AllowGroups=*/true) == SanitizerMask() && SanitizerName != \"coverage\")\n    else if (isGlobalVar(D) && !isSanitizerAttributeAllowedOnGlobals(SanitizerName))\n      S.Diag(D->getLocation(), diag::warn_attribute_type_not_supported_global) << AL << SanitizerName;"}}
},
},
["warn_attribute_unknown_visibility"]={
["warn_attribute_unknown_visibility"]={
Line 6,633: Line 6,633:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{sb,1074,"void Sema::ActOnPragmaVisibility(const IdentifierInfo *VisType, SourceLocation PragmaLoc) {\n  if (VisType) {\n    if (!VisibilityAttr::ConvertStrToVisibilityType(VisType->getName(), T)) {\n      Diag(PragmaLoc, diag::warn_attribute_unknown_visibility) << VisType;"}}
[j]={{sb,1304,"void Sema::ActOnPragmaVisibility(const IdentifierInfo *VisType, SourceLocation PragmaLoc) {\n  if (VisType) {\n    if (!VisibilityAttr::ConvertStrToVisibilityType(VisType->getName(), T)) {\n      Diag(PragmaLoc, diag::warn_attribute_unknown_visibility) << VisType;"}}
},
},
["warn_attribute_void_function_method"]={
["warn_attribute_void_function_method"]={
Line 6,647: Line 6,647:
[e]=k,
[e]=k,
[i]={"5cab26d058d3",1269973335,"Add Support for \'warn_unused_result\" attribute on"},
[i]={"5cab26d058d3",1269973335,"Add Support for \'warn_unused_result\" attribute on"},
[j]={{u,2754,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() && D->getFunctionType()->getReturnType()->isVoidType() && !isa<CXXConstructorDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 0;"},{u,2759,"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]={{u,3141,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() && D->getFunctionType()->getReturnType()->isVoidType() && !isa<CXXConstructorDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 0;"},{u,3146,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D))\n    if (MD->getReturnType()->isVoidType()) {\n      S.Diag(AL.getLoc(), diag::warn_attribute_void_function_method) << AL << 1;"}}
},
},
["warn_attribute_weak_on_field"]={
["warn_attribute_weak_on_field"]={
Line 6,661: Line 6,661:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,15984,"/// 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]={{v,18265,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  if (T.isObjCGCWeak())\n    Diag(Loc, diag::warn_attribute_weak_on_field);"}}
},
},
["warn_attribute_weak_on_local"]={
["warn_attribute_weak_on_local"]={
Line 6,675: Line 6,675:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{v,7635,"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]={{v,8651,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n    else {\n      Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);"}}
},
},
["warn_attribute_wrong_decl_type"]={
["warn_attribute_wrong_decl_type"]={
Line 6,689: Line 6,689:
[e]=k,
[e]=k,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{yc,1050,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n    if (PrevDecl != nullptr && !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))\n      for (const auto &WI : WeakIDs.second)\n        Diag(WI.getLocation(), diag::warn_attribute_wrong_decl_type) << \"\'weak\'\" << /*isRegularKeyword=*/0 << ExpectedVariableOrFunction;"},{u,1962,"static void handleNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(Attrs.getLoc(), diag::warn_attribute_wrong_decl_type) << Attrs << Attrs.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,2015,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n      S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,2742,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,2746,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,2807,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n    else if (isa<ObjCPropertyDecl>(D) || isa<ObjCMethodDecl>(D) || (S.Context.getTargetInfo().getTriple().isOSDarwin() && (isa<ObjCInterfaceDecl>(D) || isa<EnumDecl>(D)))) {\n    } else\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariableOrFunction;"},{u,3690,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RD || !RD->isUnion()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedUnion;"},{u,4300,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{u,4317,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLocation(), diag::warn_attribute_wrong_decl_type) << &AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{u,4500,"static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,5284,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (S.getLangOpts().ObjCAutoRefCount && hasDeclarator(D) && (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *Param = dyn_cast<ParmVarDecl>(D)) {\n  } else if (AL.isUsedAsTypeAttr()) {\n  } else {\n    S.Diag(D->getBeginLoc(), diag::warn_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedDeclKind;"},{u,5980,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (const auto *Method = dyn_cast<ObjCMethodDecl>(D)) {\n    } else {\n      if (!F->hasWrittenPrototype()) {\n        Diag(Loc, diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{u,6521,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // MSP430 \'interrupt\' attribute is applied to\n  // a function with no parameters and void return type.\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,6586,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,6650,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Semantic checks for a function with the \'interrupt\' attribute.\n  // a) Must be a function.\n  // b) Must have the \'void\' return type.\n  // c) Must take 1 or 2 arguments.\n  // d) The 1st argument must be a pointer.\n  // e) The 2nd argument (if any) must be an unsigned integer.\n  if (!isFunctionOrMethod(D) || !hasFunctionProto(D) || isInstanceMethod(D) || CXXMethodDecl::isStaticOverloadedOperator(cast<NamedDecl>(D)->getDeclName().getCXXOverloadedOperator())) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{u,6681,"static void handleAVRInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,6693,"static void handleAVRSignalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,6747,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,6859,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() == nullptr) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7033,"static void handleX86ForceAlignArgPointerAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Attribute can only be applied to function types.\n  if (!isa<FunctionDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"}}
[j]={{yc,1186,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n    if (PrevDecl != nullptr && !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))\n      for (const auto &WI : WeakIDs.second)\n        Diag(WI.getLocation(), diag::warn_attribute_wrong_decl_type) << \"\'weak\'\" << /*isRegularKeyword=*/0 << ExpectedVariableOrFunction;"},{u,2186,"static void handleNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(Attrs.getLoc(), diag::warn_attribute_wrong_decl_type) << Attrs << Attrs.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,2250,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n      S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,3123,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n    if (Ty->isBlockPointerType() || Ty->isFunctionPointerType()) {\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,3129,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (const auto *BD = dyn_cast<BlockDecl>(D)) {\n  } else if (const auto *V = dyn_cast<VarDecl>(D)) {\n  } else {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{u,3202,"static void handleWeakImportAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!D->canBeWeakImported(isDef)) {\n    if (isDef)\n    else if (isa<ObjCPropertyDecl>(D) || isa<ObjCMethodDecl>(D) || (S.Context.getTargetInfo().getTriple().isOSDarwin() && (isa<ObjCInterfaceDecl>(D) || isa<EnumDecl>(D)))) {\n    } else\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariableOrFunction;"},{u,4218,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!RD || !RD->isUnion()) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedUnion;"},{u,4904,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{u,4925,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute applies to Var but not any subclass of it (like ParmVar,\n    // ImplicitParm or VarTemplateSpecialization).\n    if (VD->getKind() != Decl::Var) {\n      Diag(AL.getLocation(), diag::warn_attribute_wrong_decl_type) << &AL << AL.isRegularKeywordAttribute() << (getLangOpts().CPlusPlus ? ExpectedFunctionVariableOrClass : ExpectedVariableOrFunction);"},{u,5125,"static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<ObjCMethodDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,6012,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n  } else if (S.getLangOpts().ObjCAutoRefCount && hasDeclarator(D) && (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) {\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n  } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  } else if (const auto *Param = dyn_cast<ParmVarDecl>(D)) {\n  } else if (AL.isUsedAsTypeAttr()) {\n  } else {\n    S.Diag(D->getBeginLoc(), diag::warn_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedDeclKind;"},{u,6784,"bool Sema::DiagnoseSwiftName(Decl *D, StringRef Name, SourceLocation Loc, const ParsedAttr &AL, bool IsAsync) {\n  if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {\n    if (const auto *Method = dyn_cast<ObjCMethodDecl>(D)) {\n    } else {\n      if (!F->hasWrittenPrototype()) {\n        Diag(Loc, diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{u,7380,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // MSP430 \'interrupt\' attribute is applied to\n  // a function with no parameters and void return type.\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,7453,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionOrMethod;"},{u,7528,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Semantic checks for a function with the \'interrupt\' attribute.\n  // a) Must be a function.\n  // b) Must have the \'void\' return type.\n  // c) Must take 1 or 2 arguments.\n  // d) The 1st argument must be a pointer.\n  // e) The 2nd argument (if any) must be an unsigned integer.\n  if (!isFunctionOrMethod(D) || !hasFunctionProto(D) || isInstanceMethod(D) || CXXMethodDecl::isStaticOverloadedOperator(cast<NamedDecl>(D)->getDeclName().getCXXOverloadedOperator())) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionWithProtoType;"},{u,7585,"static void handleAVRInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7598,"static void handleAVRSignalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7655,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isFunctionOrMethod(D)) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7779,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->getFunctionType() == nullptr) {\n    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{u,7974,"static void handleX86ForceAlignArgPointerAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Attribute can only be applied to function types.\n  if (!isa<FunctionDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"}}
},
},
["warn_attribute_wrong_decl_type_str"]={
["warn_attribute_wrong_decl_type_str"]={
Line 6,703: Line 6,703:
[e]=k,
[e]=k,
[i]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th..."},
[i]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th..."},
[j]={{"clang/examples/Attribute/Attribute.cpp",41,"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",152,"struct CallSuperAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    if (!TheMethod || !TheMethod->isVirtual()) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"virtual functions\";"},{u,2768,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n    // The standard attribute cannot be applied to variable declarations such\n    // as a function pointer.\n    if (isa<VarDecl>(D))\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"functions, classes, or enumerations\";"},{u,6087,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"typedefs\";"}}
[j]={{"clang/examples/Attribute/Attribute.cpp",46,"struct ExampleAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    // This attribute appertains to functions only.\n    if (!isa<FunctionDecl>(D)) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"functions\";"},{"clang/examples/CallSuperAttribute/CallSuperAttrInfo.cpp",172,"struct CallSuperAttrInfo : public ParsedAttrInfo {\n  bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr, const Decl *D) const override {\n    if (!TheMethod || !TheMethod->isVirtual()) {\n      S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str) << Attr << Attr.isRegularKeywordAttribute() << \"virtual functions\";"},{u,3155,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n    // The standard attribute cannot be applied to variable declarations such\n    // as a function pointer.\n    if (isa<VarDecl>(D))\n      S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"functions, classes, or enumerations\";"},{u,6905,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"typedefs\";"}}
},
},
["warn_attributes_likelihood_ifstmt_conflict"]={
["warn_attributes_likelihood_ifstmt_conflict"]={
Line 6,717: Line 6,717:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{O,818,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n  } else {\n    if (std::get<0>(LHC)) {\n      Diags.Report(ThenAttr->getLocation(), diag::warn_attributes_likelihood_ifstmt_conflict) << ThenAttr << ThenAttr->getRange();"}}
[j]={{O,929,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n  } else {\n    if (std::get<0>(LHC)) {\n      Diags.Report(ThenAttr->getLocation(), diag::warn_attributes_likelihood_ifstmt_conflict) << ThenAttr << ThenAttr->getRange();"}}
},
},
["warn_auto_implicit_atomic_property"]={
["warn_auto_implicit_atomic_property"]={
Line 6,732: Line 6,732:
[e]=k,
[e]=k,
[i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"},
[i]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"},
[j]={{E,926,"/// 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]={{E,1127,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      if (AtLoc.isValid())\n      else\n        Diag(IC->getLocation(), diag::warn_auto_implicit_atomic_property);"}}
},
},
["warn_auto_readonly_iboutlet_property"]={
["warn_auto_readonly_iboutlet_property"]={
Line 6,746: Line 6,746:
[e]=k,
[e]=k,
[i]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[i]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[j]={{E,953,"/// 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]={{E,1156,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n      if (!ReadWriteProperty) {\n        Diag(property->getLocation(), diag::warn_auto_readonly_iboutlet_property) << property;"}}
},
},
["warn_auto_storage_class"]={
["warn_auto_storage_class"]={
Line 6,761: Line 6,761:
[e]=k,
[e]=k,
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."},
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."},
[j]={{"clang/lib/Sema/DeclSpec.cpp",1228,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  if (S.getLangOpts().CPlusPlus && !S.getLangOpts().CPlusPlus11 && StorageClassSpec == SCS_auto)\n    S.Diag(StorageClassSpecLoc, diag::warn_auto_storage_class) << FixItHint::CreateRemoval(StorageClassSpecLoc);"}}
[j]={{"clang/lib/Sema/DeclSpec.cpp",1372,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  if (S.getLangOpts().CPlusPlus && !S.getLangOpts().CPlusPlus11 && StorageClassSpec == SCS_auto)\n    S.Diag(StorageClassSpecLoc, diag::warn_auto_storage_class) << FixItHint::CreateRemoval(StorageClassSpecLoc);"}}
},
},
["warn_auto_synthesizing_protocol_property"]={
["warn_auto_synthesizing_protocol_property"]={
Line 6,775: Line 6,775:
[e]=k,
[e]=k,
[i]={"9e49b6a6ffae",1323910998,"objc: do not auto synthesize properties declared in"},
[i]={"9e49b6a6ffae",1323910998,"objc: do not auto synthesize properties declared in"},
[j]={{E,1545,"/// 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]={{E,1935,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(IMPDecl->getLocation(), diag::warn_auto_synthesizing_protocol_property) << Prop << Proto;"}}
},
},
["warn_auto_var_is_id"]={
["warn_auto_var_is_id"]={
Line 6,789: Line 6,789:
[e]=k,
[e]=k,
[i]={"d8d56694352c",1339195567,"Warn in ObjC++ when an \'auto\' variable deduces type \'id\'."},
[i]={"d8d56694352c",1339195567,"Warn in ObjC++ when an \'auto\' variable deduces type \'id\'."},
[j]={{v,11191,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // Warn if we deduced \'id\'. \'auto\' usually implies type-safety, but using\n  // \'id\' instead of a specific object type prevents most of our usual\n  // checks.\n  // We only want to warn outside of template instantiations, though:\n  // inside a template, the \'id\' could have come from a parameter.\n  if (!inTemplateInstantiation() && !DefaultedAnyToId && !IsInitCapture && !DeducedType.isNull() && DeducedType->isObjCIdType()) {\n    Diag(Loc, diag::warn_auto_var_is_id) << VN << Range;"},{O,2032,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // If the type contained \'auto\', deduce the \'auto\' to \'id\'.\n      if (FirstType->getContainedAutoType()) {\n        if (!inTemplateInstantiation()) {\n          Diag(Loc, diag::warn_auto_var_is_id) << D->getDeclName();"}}
[j]={{v,12805,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // Warn if we deduced \'id\'. \'auto\' usually implies type-safety, but using\n  // \'id\' instead of a specific object type prevents most of our usual\n  // checks.\n  // We only want to warn outside of template instantiations, though:\n  // inside a template, the \'id\' could have come from a parameter.\n  if (!inTemplateInstantiation() && !DefaultedAnyToId && !IsInitCapture && !DeducedType.isNull() && DeducedType->isObjCIdType()) {\n    Diag(Loc, diag::warn_auto_var_is_id) << VN << Range;"},{O,2331,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // If the type contained \'auto\', deduce the \'auto\' to \'id\'.\n      if (FirstType->getContainedAutoType()) {\n        if (!inTemplateInstantiation()) {\n          Diag(Loc, diag::warn_auto_var_is_id) << D->getDeclName();"}}
},
},
["warn_autosynthesis_property_in_superclass"]={
["warn_autosynthesis_property_in_superclass"]={
Line 6,803: Line 6,803:
[e]=k,
[e]=k,
[i]={"6c9ee7b0c856",1406407946,"Objective-C. Issue more warning diagnostic when certain"},
[i]={"6c9ee7b0c856",1406407946,"Objective-C. Issue more warning diagnostic when certain"},
[j]={{E,1558,"/// 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]={{E,1957,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    // If property to be implemented in the super class, ignore.\n    if (PropInSuperClass) {\n      if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n      } else {\n        Diag(Prop->getLocation(), diag::warn_autosynthesis_property_in_superclass) << Prop->getIdentifier();"}}
},
},
["warn_autosynthesis_property_ivar_match"]={
["warn_autosynthesis_property_ivar_match"]={
Line 6,817: Line 6,817:
[e]=k,
[e]=k,
[i]={"63d40202fb47",1340146282,"objective-c: warn when autosynthesizing a property which has same"},
[i]={"63d40202fb47",1340146282,"objective-c: warn when autosynthesizing a property which has same"},
[j]={{E,1059,"/// 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]={{E,1286,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(PropertyDiagLoc, diag::warn_autosynthesis_property_ivar_match) << PropertyId << (Ivar == nullptr) << PropertyIvar << originalIvar->getIdentifier();"}}
},
},
["warn_availability_and_unavailable"]={
["warn_availability_and_unavailable"]={
Line 6,831: Line 6,831:
[e]=Q,
[e]=Q,
[i]={"7ab142b55a6e",1301110555,"Extend the new \'availability\' attribute with support for an"},
[i]={"7ab142b55a6e",1301110555,"Extend the new \'availability\' attribute with support for an"},
[j]={{Tb,1206,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // The \'unavailable\' availability cannot be combined with any other\n  // availability changes. Make sure that hasn\'t happened.\n  if (UnavailableLoc.isValid()) {\n    for (unsigned Index = Introduced; Index != Unknown; ++Index) {\n      if (Changes[Index].KeywordLoc.isValid()) {\n        if (!Complained) {\n          Diag(UnavailableLoc, diag::warn_availability_and_unavailable) << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}}
[j]={{Tb,1324,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // The \'unavailable\' availability cannot be combined with any other\n  // availability changes. Make sure that hasn\'t happened.\n  if (UnavailableLoc.isValid()) {\n    for (unsigned Index = Introduced; Index != Unknown; ++Index) {\n      if (Changes[Index].KeywordLoc.isValid()) {\n        if (!Complained) {\n          Diag(UnavailableLoc, diag::warn_availability_and_unavailable) << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}}
},
},
["warn_availability_fuchsia_unavailable_minor"]={
["warn_availability_fuchsia_unavailable_minor"]={
Line 6,845: Line 6,845:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{u,2360,"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]={{u,2651,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (II->isStr(\"fuchsia\")) {\n    if ((Min = Introduced.Version.getMinor()) || (Sub = Introduced.Version.getSubminor())) {\n      S.Diag(AL.getLoc(), diag::warn_availability_fuchsia_unavailable_minor);"}}
},
},
["warn_availability_on_static_initializer"]={
["warn_availability_on_static_initializer"]={
Line 6,859: Line 6,859:
[e]=k,
[e]=k,
[i]={"3bb4aa566e1f",1523921658,"[Availability] Improve availability to consider functions run at load time"},
[i]={"3bb4aa566e1f",1523921658,"[Availability] Improve availability to consider functions run at load time"},
[j]={{v,9406,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<ConstructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 1;"},{v,9410,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<DestructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 2;"},{B,4213,"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]={{v,10778,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<ConstructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 1;"},{v,10783,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // Diagnose availability attributes. Availability cannot be used on functions\n  // that are run during load/unload.\n  if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {\n    if (NewFD->hasAttr<DestructorAttr>()) {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 2;"},{B,5067,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // + load method cannot have availability attributes. It get called on\n  // startup, so it has to have the availability of the deployment target.\n  if (const auto *attr = ObjCMethod->getAttr<AvailabilityAttr>()) {\n    if (ObjCMethod->isClassMethod() && ObjCMethod->getSelector().getAsString() == \"load\") {\n      Diag(attr->getLocation(), diag::warn_availability_on_static_initializer) << 0;"}}
},
},
["warn_availability_swift_unavailable_deprecated_only"]={
["warn_availability_swift_unavailable_deprecated_only"]={
Line 6,873: Line 6,873:
[e]=k,
[e]=k,
[i]={"260e96240297",1541990673,"Support Swift in platform availability attribute"},
[i]={"260e96240297",1541990673,"Support Swift in platform availability attribute"},
[j]={{u,2352,"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]={{u,2642,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (II->isStr(\"swift\")) {\n    if (Introduced.isValid() || Obsoleted.isValid() || (!IsUnavailable && !Deprecated.isValid())) {\n      S.Diag(AL.getLoc(), diag::warn_availability_swift_unavailable_deprecated_only);"}}
},
},
["warn_availability_unknown_platform"]={
["warn_availability_unknown_platform"]={
Line 6,887: Line 6,887:
[e]=k,
[e]=k,
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[j]={{u,2332,"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]={{u,2619,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AvailabilityAttr::getPrettyPlatformName(II->getName()).empty())\n    S.Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Platform->Ident;"}}
},
},
["warn_availability_version_ordering"]={
["warn_availability_version_ordering"]={
Line 6,901: Line 6,901:
[e]=k,
[e]=k,
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"},
[j]={{u,2148,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  // Ensure that Introduced <= Deprecated <= Obsoleted (although not all\n  // of these steps are needed).\n  if (!Introduced.empty() && !Deprecated.empty() && !(Introduced <= Deprecated)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 1 << PlatformName << Deprecated.getAsString() << 0 << Introduced.getAsString();"},{u,2153,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Introduced.empty() && !Obsoleted.empty() && !(Introduced <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 0 << Introduced.getAsString();"},{u,2158,"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]={{u,2398,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  // Ensure that Introduced <= Deprecated <= Obsoleted (although not all\n  // of these steps are needed).\n  if (!Introduced.empty() && !Deprecated.empty() && !(Introduced <= Deprecated)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 1 << PlatformName << Deprecated.getAsString() << 0 << Introduced.getAsString();"},{u,2406,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Introduced.empty() && !Obsoleted.empty() && !(Introduced <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 0 << Introduced.getAsString();"},{u,2414,"static bool checkAvailabilityAttr(Sema &S, SourceRange Range, IdentifierInfo *Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted) {\n  if (!Deprecated.empty() && !Obsoleted.empty() && !(Deprecated <= Obsoleted)) {\n    S.Diag(Range.getBegin(), diag::warn_availability_version_ordering) << 2 << PlatformName << Obsoleted.getAsString() << 1 << Deprecated.getAsString();"}}
},
},
["warn_avx_calling_convention"]={
["warn_avx_calling_convention"]={
Line 6,915: Line 6,915:
[e]=l,
[e]=l,
[i]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error"},
[i]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error"},
[j]={{"clang/lib/CodeGen/Targets/X86.cpp",1323,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  if (!CallerHasFeat && !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::warn_avx_calling_convention) << IsArgument << Ty << Feature;"}}
[j]={{"clang/lib/CodeGen/Targets/X86.cpp",1499,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  if (!CallerHasFeat && !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::warn_avx_calling_convention) << IsArgument << Ty << Feature;"}}
},
},
["warn_bad_character_encoding"]={
["warn_bad_character_encoding"]={
Line 6,929: Line 6,929:
[e]=G,
[e]=G,
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[j]={{zc,1577,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      if (res != llvm::conversionOK) {\n        if (NoErrorOnBadEncoding)\n          Msg = diag::warn_bad_character_encoding;"}}
[j]={{zc,1747,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      if (res != llvm::conversionOK) {\n        if (NoErrorOnBadEncoding)\n          Msg = diag::warn_bad_character_encoding;"}}
},
},
["warn_bad_cxx_cast_nested_pointer_addr_space"]={
["warn_bad_cxx_cast_nested_pointer_addr_space"]={
Line 6,943: Line 6,943:
[e]=k,
[e]=k,
[i]={vb,1576809732,yb},
[i]={vb,1576809732,yb},
[j]={{mb,2231,"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]={{mb,2583,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  while (!DestPtee.isNull() && !SrcPtee.isNull()) {\n    if (DestPtee.getAddressSpace() != SrcPtee.getAddressSpace()) {\n      Self.Diag(OpRange.getBegin(), diag::warn_bad_cxx_cast_nested_pointer_addr_space) << CStyle << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}
},
},
["warn_bad_function_cast"]={
["warn_bad_function_cast"]={
Line 6,958: Line 6,958:
[e]=k,
[e]=k,
[i]={"91f548b04b7d",1345224154,"c: implement gcc\'s -Wbad-function-cast which warns"},
[i]={"91f548b04b7d",1345224154,"c: implement gcc\'s -Wbad-function-cast which warns"},
[j]={{mb,2482,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (Self.Diags.isIgnored(diag::warn_bad_function_cast, SrcExpr.get()->getExprLoc()))"},{mb,2506,"/// 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]={{mb,2877,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (Self.Diags.isIgnored(diag::warn_bad_function_cast, SrcExpr.get()->getExprLoc()))"},{mb,2906,"/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a\n///  non-matching type. Such as enum function call to int, int call to\n/// pointer; etc. Cast to \'void\' is an exception.\nstatic void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_bad_function_cast) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}
},
},
["warn_bad_receiver_type"]={
["warn_bad_receiver_type"]={
Line 6,972: Line 6,972:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{nb,2333,"/// 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]={{nb,2914,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // If we have a receiver expression, perform appropriate promotions\n  // and determine receiver type.\n  if (Receiver) {\n    // If the receiver is an ObjC pointer, a block pointer, or an\n    // __attribute__((NSObject)) pointer, we don\'t need to do any\n    // special conversion in order to look up a receiver.\n    if (ReceiverType->isObjCRetainableType()) {\n    } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n      Diag(Loc, diag::warn_bad_receiver_type) << ReceiverType << RecRange;"}}
},
},
["warn_bad_string_encoding"]={
["warn_bad_string_encoding"]={
Line 6,986: Line 6,986:
[e]=G,
[e]=G,
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[i]={"9436352a8297",1328936890,"Implement warning for non-wide string literals with an unexpected encoding.  Downgrade error for non..."},
[j]={{zc,2040,"/// This function copies from Fragment, which is a sequence of bytes\n/// within Tok\'s contents (which begin at TokBegin) into ResultPtr.\n/// Performs widening for multi-byte characters.\nbool StringLiteralParser::CopyStringFragment(const Token &Tok, const char *TokBegin, StringRef Fragment) {\n  if (Diags) {\n    const DiagnosticBuilder &Builder = Diag(Diags, Features, SourceLoc, TokBegin, ErrorPtr, resyncUTF8(ErrorPtr, Fragment.end()), NoErrorOnBadEncoding ? diag::warn_bad_string_encoding : diag::err_bad_string_encoding);"}}
[j]={{zc,2264,"/// This function copies from Fragment, which is a sequence of bytes\n/// within Tok\'s contents (which begin at TokBegin) into ResultPtr.\n/// Performs widening for multi-byte characters.\nbool StringLiteralParser::CopyStringFragment(const Token &Tok, const char *TokBegin, StringRef Fragment) {\n  if (Diags) {\n    const DiagnosticBuilder &Builder = Diag(Diags, Features, SourceLoc, TokBegin, ErrorPtr, resyncUTF8(ErrorPtr, Fragment.end()), NoErrorOnBadEncoding ? diag::warn_bad_string_encoding : diag::err_bad_string_encoding);"}}
},
},
["warn_base_class_is_uninit"]={
["warn_base_class_is_uninit"]={
Line 7,000: Line 7,000:
[e]=k,
[e]=k,
[i]={"3630c399727a",1416539430,"Extend -Wuninitialized to warn when accessing uninitialized base classes in a"},
[i]={"3630c399727a",1416539430,"Extend -Wuninitialized to warn when accessing uninitialized base classes in a"},
[j]={{y,3267,"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]={{y,3836,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    if (ImplicitCastExpr *BaseCast = dyn_cast<ImplicitCastExpr>(Base)) {\n      if (BaseCast->getCastKind() == CK_UncheckedDerivedToBase) {\n        if (T->isPointerType() && BaseClasses.count(T->getPointeeType())) {\n          S.Diag(FieldME->getExprLoc(), diag::warn_base_class_is_uninit) << T->getPointeeType() << FoundVD;"}}
},
},
["warn_bind_ref_member_to_parameter"]={
["warn_bind_ref_member_to_parameter"]={
Line 7,014: Line 7,014:
[e]=k,
[e]=k,
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[i]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[j]={{U,7008,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(DiagLoc, IsPointer ? diag::warn_init_ptr_member_to_parameter_addr : diag::warn_bind_ref_member_to_parameter) << Member << VD << isa<ParmVarDecl>(VD) << DiagRange;"}}
[j]={{U,8226,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      } else {\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          Diag(DiagLoc, IsPointer ? diag::warn_init_ptr_member_to_parameter_addr : diag::warn_bind_ref_member_to_parameter) << Member << VD << isa<ParmVarDecl>(VD) << DiagRange;"}}
},
},
["warn_binding_null_to_reference"]={
["warn_binding_null_to_reference"]={
Line 7,028: Line 7,028:
[e]=k,
[e]=k,
[i]={"2eeddfb1efc8",1463247854,"Warn when a reference is bound to an empty l-value (dereferenced null pointer)."},
[i]={"2eeddfb1efc8",1463247854,"Warn when a reference is bound to an empty l-value (dereferenced null pointer)."},
[j]={{U,7203,"static void CheckForNullPointerDereference(Sema &S, const Expr *E) {\n  // Check to see if we are dereferencing a null pointer.  If so, this is\n  // undefined behavior, so warn about it.  This only handles the pattern\n  // \"*null\", which is a very syntactic check.\n  if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(E->IgnoreParenCasts()))\n    if (UO->getOpcode() == UO_Deref && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_binding_null_to_reference) << UO->getSubExpr()->getSourceRange());"}}
[j]={{U,8453,"static void CheckForNullPointerDereference(Sema &S, const Expr *E) {\n  // Check to see if we are dereferencing a null pointer.  If so, this is\n  // undefined behavior, so warn about it.  This only handles the pattern\n  // \"*null\", which is a very syntactic check.\n  if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(E->IgnoreParenCasts()))\n    if (UO->getOpcode() == UO_Deref && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_binding_null_to_reference) << UO->getSubExpr()->getSourceRange());"}}
},
},
["warn_bitfield_too_small_for_enum"]={
["warn_bitfield_too_small_for_enum"]={
Line 7,043: Line 7,043:
[e]=Vb,
[e]=Vb,
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[j]={{F,12616,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(InitLoc, diag::warn_bitfield_too_small_for_enum) << Bitfield << ED;"}}
[j]={{F,14109,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // Check the bitwidth.\n      if (BitsNeeded > FieldWidth) {\n        S.Diag(InitLoc, diag::warn_bitfield_too_small_for_enum) << Bitfield << ED;"}}
},
},
["warn_bitfield_width_exceeds_type_width"]={
["warn_bitfield_width_exceeds_type_width"]={
Line 7,057: Line 7,057:
[e]=k,
[e]=k,
[i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"},
[i]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic"},
[j]={{v,15716,"// 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]={{v,17961,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  if (!FieldTy->isDependentType()) {\n    // Warn on types where the user might conceivably expect to get all\n    // specified bits as value bits: that\'s all integral types other than\n    // \'bool\'.\n    if (BitfieldIsOverwide && !FieldTy->isBooleanType() && FieldName) {\n      Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_width) << FieldName << toString(Value, 10) << (unsigned)TypeWidth;"}}
},
},
["warn_bitwise_instead_of_logical"]={
["warn_bitwise_instead_of_logical"]={
Line 7,072: Line 7,072:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{F,13554,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr))\n    if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && BO->getLHS()->isKnownToHaveBooleanValue() && BO->getRHS()->isKnownToHaveBooleanValue() && BO->getLHS()->HasSideEffects(S.Context) && BO->getRHS()->HasSideEffects(S.Context)) {\n      S.Diag(BO->getBeginLoc(), diag::warn_bitwise_instead_of_logical) << (BO->getOpcode() == BO_And ? \"&\" : \"|\") << OrigE->getSourceRange() << FixItHint::CreateReplacement(BO->getOperatorLoc(), (BO->getOpcode() == BO_And ? \"&&\" : \"||\"));"}}
[j]={{F,15248,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr))\n    if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && BO->getLHS()->isKnownToHaveBooleanValue() && BO->getRHS()->isKnownToHaveBooleanValue() && BO->getLHS()->HasSideEffects(S.Context) && BO->getRHS()->HasSideEffects(S.Context)) {\n      S.Diag(BO->getBeginLoc(), diag::warn_bitwise_instead_of_logical) << (BO->getOpcode() == BO_And ? \"&\" : \"|\") << OrigE->getSourceRange() << FixItHint::CreateReplacement(BO->getOperatorLoc(), (BO->getOpcode() == BO_And ? \"&&\" : \"||\"));"}}
},
},
["warn_bitwise_negation_bool"]={
["warn_bitwise_negation_bool"]={
Line 7,087: Line 7,087:
[e]=k,
[e]=k,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{F,13550,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *UO = dyn_cast<UnaryOperator>(SourceExpr))\n    if (UO->getOpcode() == UO_Not && UO->getSubExpr()->isKnownToHaveBooleanValue())\n      S.Diag(UO->getBeginLoc(), diag::warn_bitwise_negation_bool) << OrigE->getSourceRange() << T->isBooleanType() << FixItHint::CreateReplacement(UO->getBeginLoc(), \"!\");"}}
[j]={{F,15238,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *UO = dyn_cast<UnaryOperator>(SourceExpr))\n    if (UO->getOpcode() == UO_Not && UO->getSubExpr()->isKnownToHaveBooleanValue())\n      S.Diag(UO->getBeginLoc(), diag::warn_bitwise_negation_bool) << OrigE->getSourceRange() << T->isBooleanType() << FixItHint::CreateReplacement(UO->getBeginLoc(), \"!\");"}}
},
},
["warn_bitwise_op_in_bitwise_op"]={
["warn_bitwise_op_in_bitwise_op"]={
Line 7,102: Line 7,102:
[e]=k,
[e]=k,
[i]={"84543b09cb28",1449985301,"[Sema] Add -Wparentheses warnings for \'^\' in \'|\' expressions and \'&\' in \'^\' expressions to complimen..."},
[i]={"84543b09cb28",1449985301,"[Sema] Add -Wparentheses warnings for \'^\' in \'|\' expressions and \'&\' in \'^\' expressions to complimen..."},
[j]={{C,13737,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_bitwise_op_in_bitwise_op) << Bop->getOpcodeStr() << BinaryOperator::getOpcodeStr(Opc) << Bop->getSourceRange() << OpLoc;"}}
[j]={{C,15831,"/// Look for bitwise op in the left or right hand of a bitwise op with\n/// lower precedence and emit a diagnostic together with a fixit hint that wraps\n/// the \'&\' expression in parentheses.\nstatic void DiagnoseBitwiseOpInBitwiseOp(Sema &S, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *SubExpr) {\n  if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(SubExpr)) {\n    if (Bop->isBitwiseOp() && Bop->getOpcode() < Opc) {\n      S.Diag(Bop->getOperatorLoc(), diag::warn_bitwise_op_in_bitwise_op) << Bop->getOpcodeStr() << BinaryOperator::getOpcodeStr(Opc) << Bop->getSourceRange() << OpLoc;"}}
},
},
["warn_block_capture_autoreleasing"]={
["warn_block_capture_autoreleasing"]={
Line 7,116: Line 7,116:
[e]=hc,
[e]=hc,
[i]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[i]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[j]={{C,16711,"// 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]={{C,19261,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // Warn about implicitly autoreleasing indirect parameters captured by blocks.\n  if (const auto *PT = CaptureType->getAs<PointerType>()) {\n    if (!Invalid && PointeeTy->getAs<ObjCObjectPointerType>() && PointeeTy.getObjCLifetime() == Qualifiers::OCL_Autoreleasing && !S.Context.hasDirectOwnershipQualifier(PointeeTy)) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::warn_block_capture_autoreleasing);"}}
},
},
["warn_block_literal_attributes_on_omitted_return_type"]={
["warn_block_literal_attributes_on_omitted_return_type"]={
Line 7,130: Line 7,130:
[e]=l,
[e]=l,
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[j]={{hb,738,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  for (ParsedAttr &AL : declarator.getMutableDeclSpec().getAttributes()) {\n    S.Diag(AL.getLoc(), diag::warn_block_literal_attributes_on_omitted_return_type) << AL;"}}
[j]={{hb,817,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  for (ParsedAttr &AL : declarator.getMutableDeclSpec().getAttributes()) {\n    S.Diag(AL.getLoc(), diag::warn_block_literal_attributes_on_omitted_return_type) << AL;"}}
},
},
["warn_block_literal_qualifiers_on_omitted_return_type"]={
["warn_block_literal_qualifiers_on_omitted_return_type"]={
Line 7,144: Line 7,144:
[e]=l,
[e]=l,
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[i]={"99d133482f7c",1461004851,"Block: Fix a crash when we have type attributes or qualifiers with omitted"},
[j]={{hb,748,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, (unsigned)-1, diag::warn_block_literal_qualifiers_on_omitted_return_type);"}}
[j]={{hb,829,"/// Return true if this is omitted block return type. Also check type\n/// attributes and type qualifiers when returning true.\nstatic bool checkOmittedBlockReturnType(Sema &S, Declarator &declarator, QualType Result) {\n  diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, (unsigned)-1, diag::warn_block_literal_qualifiers_on_omitted_return_type);"}}
},
},
["warn_bool_switch_condition"]={
["warn_bool_switch_condition"]={
Line 7,158: Line 7,158:
[e]=k,
[e]=k,
[i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan."},
[i]={"93135aad2926",1255807974,"Fix for PR5190, Credit to Zhanyong Wan."},
[j]={{O,938,"StmtResult Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc) {\n  if (CondExpr && !CondExpr->isTypeDependent()) {\n    if (CondExpr->isKnownToHaveBooleanValue()) {\n      Diag(SwitchLoc, diag::warn_bool_switch_condition) << CondExpr->getSourceRange();"}}
[j]={{O,1111,"StmtResult Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc) {\n  if (CondExpr && !CondExpr->isTypeDependent()) {\n    if (CondExpr->isKnownToHaveBooleanValue()) {\n      Diag(SwitchLoc, diag::warn_bool_switch_condition) << CondExpr->getSourceRange();"}}
},
},
["warn_braces_around_init"]={
["warn_braces_around_init"]={
Line 7,172: Line 7,172:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{U,958,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_ParenAggInitMember:\n    DiagID = diag::warn_braces_around_init;"},{U,965,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_Member:\n    // Warn on aggregate initialization but not on ctor init list or\n    // default member initializer.\n    if (Entity.getParent())\n      DiagID = diag::warn_braces_around_init;"}}
[j]={{U,1191,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_ParenAggInitMember:\n    DiagID = diag::warn_braces_around_init;"},{U,1198,"/// Warn that \\p Entity was of scalar type and was initialized by a\n/// single-element braced initializer list.\nstatic void warnBracedScalarInit(Sema &S, const InitializedEntity &Entity, SourceRange Braces) {\n  case InitializedEntity::EK_Member:\n    // Warn on aggregate initialization but not on ctor init list or\n    // default member initializer.\n    if (Entity.getParent())\n      DiagID = diag::warn_braces_around_init;"}}
},
},
["warn_break_binds_to_switch"]={
["warn_break_binds_to_switch"]={
Line 7,186: Line 7,186:
[e]=k,
[e]=k,
[i]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)"},
[i]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)"},
[j]={{O,1849,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_break_binds_to_switch);"}}
[j]={{O,2121,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_break_binds_to_switch);"}}
},
},
["warn_builtin_chk_overflow"]={
["warn_builtin_chk_overflow"]={
Line 7,200: Line 7,200:
[e]=k,
[e]=k,
[i]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[i]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[j]={{F,1126,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___mempcpy_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"},{F,1135,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___vsnprintf_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"}}
[j]={{F,1276,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___mempcpy_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"},{F,1286,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___vsnprintf_chk: {\n    DiagID = diag::warn_builtin_chk_overflow;"}}
},
},
["warn_builtin_unknown"]={
["warn_builtin_unknown"]={
Line 7,214: Line 7,214:
[e]=k,
[e]=k,
[i]={"56fbc37bbba3",1254172459,"Provide a custom diagnostic when code tries to use an unknown builtin"},
[i]={"56fbc37bbba3",1254172459,"Provide a custom diagnostic when code tries to use an unknown builtin"},
[j]={{v,14013,"/// 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]={{v,16050,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  if (II.getName().startswith(\"__builtin_\"))\n    diag_id = diag::warn_builtin_unknown;"}}
},
},
["warn_c17_compat_ellipsis_only_parameter"]={
["warn_c17_compat_ellipsis_only_parameter"]={
Line 7,229: Line 7,229:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{hb,4797,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      } else {\n        // We allow a zero-parameter variadic function in C if the\n        // function is marked with the \"overloadable\" attribute. Scan\n        // for this attribute now. We also allow it in C2x per WG14 N2975.\n        if (!FTI.NumParams && FTI.isVariadic && !LangOpts.CPlusPlus) {\n          if (LangOpts.C2x)\n            S.Diag(FTI.getEllipsisLoc(), diag::warn_c17_compat_ellipsis_only_parameter);"}}
[j]={{hb,5445,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      } else {\n        // We allow a zero-parameter variadic function in C if the\n        // function is marked with the \"overloadable\" attribute. Scan\n        // for this attribute now. We also allow it in C2x per WG14 N2975.\n        if (!FTI.NumParams && FTI.isVariadic && !LangOpts.CPlusPlus) {\n          if (LangOpts.C2x)\n            S.Diag(FTI.getEllipsisLoc(), diag::warn_c17_compat_ellipsis_only_parameter);"}}
},
},
["warn_c17_compat_static_assert_no_message"]={
["warn_c17_compat_static_assert_no_message"]={
Line 7,244: Line 7,244:
[e]=Q,
[e]=Q,
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",873,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::r_paren)) {\n    if (getLangOpts().CPlusPlus17)\n    else if (getLangOpts().CPlusPlus)\n    else if (getLangOpts().C2x)\n      DiagVal = diag::warn_c17_compat_static_assert_no_message;"}}
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",1009,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::r_paren)) {\n    if (getLangOpts().CPlusPlus17)\n    else if (getLangOpts().CPlusPlus)\n    else if (getLangOpts().C2x)\n      DiagVal = diag::warn_c17_compat_static_assert_no_message;"}}
},
},
["warn_c2x_compat_bitint_suffix"]={
["warn_c2x_compat_bitint_suffix"]={
Line 7,259: Line 7,259:
[e]=l,
[e]=l,
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt"},
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt"},
[j]={{"clang/lib/Lex/PPExpressions.cpp",316,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // \'wb/uwb\' literals are a C2x feature. We explicitly do not support the\n    // suffix in C++ as an extension because a library-based UDL that resolves\n    // to a library type may be more appropriate there.\n    if (Literal.isBitInt)\n      PP.Diag(PeekTok, PP.getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"},{C,3553,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    // \'wb/uwb\' literals are a C2x feature. We support _BitInt as a type in C++,\n    // but we do not currently support the suffix in C++ mode because it\'s not\n    // entirely clear whether WG21 will prefer this suffix to return a library\n    // type such as std::bit_int instead of returning a _BitInt.\n    if (Literal.isBitInt && !getLangOpts().CPlusPlus)\n      PP.Diag(Tok.getLocation(), getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"}}
[j]={{"clang/lib/Lex/PPExpressions.cpp",340,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // \'wb/uwb\' literals are a C2x feature. We explicitly do not support the\n    // suffix in C++ as an extension because a library-based UDL that resolves\n    // to a library type may be more appropriate there.\n    if (Literal.isBitInt)\n      PP.Diag(PeekTok, PP.getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"},{C,4068,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    // \'wb/uwb\' literals are a C2x feature. We support _BitInt as a type in C++,\n    // but we do not currently support the suffix in C++ mode because it\'s not\n    // entirely clear whether WG21 will prefer this suffix to return a library\n    // type such as std::bit_int instead of returning a _BitInt.\n    if (Literal.isBitInt && !getLangOpts().CPlusPlus)\n      PP.Diag(Tok.getLocation(), getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"}}
},
},
["warn_c2x_compat_digit_separator"]={
["warn_c2x_compat_digit_separator"]={
Line 7,274: Line 7,274:
[e]=G,
[e]=G,
[i]={"e44831005905",1615551663,"Add support for digit separators in C2x."},
[i]={"e44831005905",1615551663,"Add support for digit separators in C2x."},
[j]={{kb,1774,"/// 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]={{kb,1963,"/// LexNumericConstant - Lex the remainder of a integer or floating point\n/// constant. From[-1] is the first character lexed.  Return the end of the\n/// constant.\nbool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {\n  // If we have a digit separator, continue.\n  if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n    if (isAsciiIdentifierContinue(Next)) {\n      if (!isLexingRawMode())\n        Diag(CurPtr, LangOpts.CPlusPlus ? diag::warn_cxx11_compat_digit_separator : diag::warn_c2x_compat_digit_separator);"}}
},
},
["warn_c2x_compat_empty_initializer"]={
["warn_c2x_compat_empty_initializer"]={
Line 7,289: Line 7,289:
[e]=Q,
[e]=Q,
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"},
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"},
[j]={{"clang/lib/Parse/ParseInit.cpp",414,"/// ParseBraceInitializer - Called when parsing an initializer that has a\n/// leading open brace.\n///\n///      initializer: [C99 6.7.8]\n///        \'{\' initializer-list \'}\'\n///        \'{\' initializer-list \',\' \'}\'\n/// [C2x]  \'{\' \'}\'\n///\n///      initializer-list:\n///        designation[opt] initializer ...[opt]\n///        initializer-list \',\' designation[opt] initializer ...[opt]\n///\nExprResult Parser::ParseBraceInitializer() {\n  if (Tok.is(tok::r_brace)) {\n    // Empty initializers are a C++ feature and a GNU extension to C before C2x.\n    if (!getLangOpts().CPlusPlus) {\n      Diag(LBraceLoc, getLangOpts().C2x ? diag::warn_c2x_compat_empty_initializer : diag::ext_c_empty_initializer);"}}
[j]={{"clang/lib/Parse/ParseInit.cpp",456,"/// ParseBraceInitializer - Called when parsing an initializer that has a\n/// leading open brace.\n///\n///      initializer: [C99 6.7.8]\n///        \'{\' initializer-list \'}\'\n///        \'{\' initializer-list \',\' \'}\'\n/// [C2x]  \'{\' \'}\'\n///\n///      initializer-list:\n///        designation[opt] initializer ...[opt]\n///        initializer-list \',\' designation[opt] initializer ...[opt]\n///\nExprResult Parser::ParseBraceInitializer() {\n  if (Tok.is(tok::r_brace)) {\n    // Empty initializers are a C++ feature and a GNU extension to C before C2x.\n    if (!getLangOpts().CPlusPlus) {\n      Diag(LBraceLoc, getLangOpts().C2x ? diag::warn_c2x_compat_empty_initializer : diag::ext_c_empty_initializer);"}}
},
},
["warn_c2x_compat_keyword"]={
["warn_c2x_compat_keyword"]={
Line 7,304: Line 7,304:
[e]=Q,
[e]=Q,
[i]={"06174134e418",1677335266,"[C2x] Implement support for revised spelling of keywords"},
[i]={"06174134e418",1677335266,"[C2x] Implement support for revised spelling of keywords"},
[j]={{Tb,3625,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    case tok::kw_thread_local:\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,3831,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    case tok::kw_bool:\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,6992,"/// [GNU]  typeof-specifier:\n///          typeof ( expressions )\n///          typeof ( type-name )\n/// [GNU/C++] typeof unary-expression\n/// [C2x]  typeof-specifier:\n///          typeof \'(\' typeof-specifier-argument \')\'\n///          typeof_unqual \'(\' typeof-specifier-argument \')\'\n///\n///        typeof-specifier-argument:\n///          expression\n///          type-name\n///\nvoid Parser::ParseTypeofSpecifier(DeclSpec &DS) {\n  if (getLangOpts().C2x && !II->getName().startswith(\"__\"))\n    Diag(Tok.getLocation(), diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,7170,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  if (Tok.is(tok::kw__ExtInt)) {\n  } else {\n    // In C2x mode, diagnose that the use is not compatible with pre-C2x modes.\n    // Otherwise, diagnose that the use is a Clang extension.\n    if (getLangOpts().C2x)\n      Diag(Loc, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",842,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::kw_static_assert)) {\n    if (!getLangOpts().CPlusPlus) {\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",3924,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (Tok.is(tok::kw_alignas)) {\n    if (getLangOpts().C2x)\n      Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{qc,919,"/// Parse a cast-expression, or, if \\pisUnaryExpression is true, parse\n/// a unary-expression.\n///\n/// \\p isAddressOfOperand exists because an id-expression that is the operand\n/// of address-of gets special treatment due to member pointers. NotCastExpr\n/// is set to true if the token is not the start of a cast-expression, and no\n/// diagnostic is emitted in this case and no tokens are consumed.\n///\n/// \\verbatim\n///      cast-expression: [C99 6.5.4]\n///        unary-expression\n///        \'(\' type-name \')\' cast-expression\n///\n///      unary-expression:  [C99 6.5.3]\n///        postfix-expression\n///        \'++\' unary-expression\n///        \'--\' unary-expression\n/// [Coro]  \'co_await\' cast-expression\n///        unary-operator cast-expression\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// [GNU]  \'&&\' identifier\n/// [C++11] \'noexcept\' \'(\' expression \')\' [C++11 5.3.7]\n/// [C++]  new-expression\n/// [C++]  delete-expression\n///\n///      unary-operator: one of\n///        \'&\'  \'*\'  \'+\'  \'-\'  \'~\'  \'!\'\n/// [GNU]  \'__extension__\'  \'__real\'  \'__imag\'\n///\n///      primary-expression: [C99 6.5.1]\n/// [C99]  identifier\n/// [C++]  id-expression\n///        constant\n///        string-literal\n/// [C++]  boolean-literal  [C++ 2.13.5]\n/// [C++11] \'nullptr\'        [C++11 2.14.7]\n/// [C++11] user-defined-literal\n///        \'(\' expression \')\'\n/// [C11]  generic-selection\n/// [C++2a] requires-expression\n///        \'__func__\'        [C99 6.4.2.2]\n/// [GNU]  \'__FUNCTION__\'\n/// [MS]    \'__FUNCDNAME__\'\n/// [MS]    \'L__FUNCTION__\'\n/// [MS]    \'__FUNCSIG__\'\n/// [MS]    \'L__FUNCSIG__\'\n/// [GNU]  \'__PRETTY_FUNCTION__\'\n/// [GNU]  \'(\' compound-statement \')\'\n/// [GNU]  \'__builtin_va_arg\' \'(\' assignment-expression \',\' type-name \')\'\n/// [GNU]  \'__builtin_offsetof\' \'(\' type-name \',\' offsetof-member-designator\')\'\n/// [GNU]  \'__builtin_choose_expr\' \'(\' assign-expr \',\' assign-expr \',\'\n///                                    assign-expr \')\'\n/// [GNU]  \'__builtin_FILE\' \'(\' \')\'\n/// [CLANG] \'__builtin_FILE_NAME\' \'(\' \')\'\n/// [GNU]  \'__builtin_FUNCTION\' \'(\' \')\'\n/// [MS]    \'__builtin_FUNCSIG\' \'(\' \')\'\n/// [GNU]  \'__builtin_LINE\' \'(\' \')\'\n/// [CLANG] \'__builtin_COLUMN\' \'(\' \')\'\n/// [GNU]  \'__builtin_source_location\' \'(\' \')\'\n/// [GNU]  \'__builtin_types_compatible_p\' \'(\' type-name \',\' type-name \')\'\n/// [GNU]  \'__null\'\n/// [OBJC]  \'[\' objc-message-expr \']\'\n/// [OBJC]  \'\\@selector\' \'(\' objc-selector-arg \')\'\n/// [OBJC]  \'\\@protocol\' \'(\' identifier \')\'\n/// [OBJC]  \'\\@encode\' \'(\' type-name \')\'\n/// [OBJC]  objc-string-literal\n/// [C++]  simple-type-specifier \'(\' expression-list[opt] \')\'      [C++ 5.2.3]\n/// [C++11] simple-type-specifier braced-init-list                  [C++11 5.2.3]\n/// [C++]  typename-specifier \'(\' expression-list[opt] \')\'        [C++ 5.2.3]\n/// [C++11] typename-specifier braced-init-list                    [C++11 5.2.3]\n/// [C++]  \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'    [C++ 5.2p1]\n/// [C++]  \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\' [C++ 5.2p1]\n/// [C++]  \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' expression \')\'                            [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' type-id \')\'                                [C++ 5.2p1]\n/// [C++]  \'this\'          [C++ 9.3.2]\n/// [G++]  unary-type-trait \'(\' type-id \')\'\n/// [G++]  binary-type-trait \'(\' type-id \',\' type-id \')\'          [TODO]\n/// [EMBT]  array-type-trait \'(\' type-id \',\' integer \')\'\n/// [clang] \'^\' block-literal\n///\n///      constant: [C99 6.4.4]\n///        integer-constant\n///        floating-constant\n///        enumeration-constant -> identifier\n///        character-constant\n///\n///      id-expression: [C++ 5.1]\n///                  unqualified-id\n///                  qualified-id\n///\n///      unqualified-id: [C++ 5.1]\n///                  identifier\n///                  operator-function-id\n///                  conversion-function-id\n///                  \'~\' class-name\n///                  template-id\n///\n///      new-expression: [C++ 5.3.4]\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///      delete-expression: [C++ 5.3.5]\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\n///\n/// [GNU/Embarcadero] unary-type-trait:\n///                  \'__is_arithmetic\'\n///                  \'__is_floating_point\'\n///                  \'__is_integral\'\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n///                  \'__is_complete_type\'\n///                  \'__is_void\'\n///                  \'__is_array\'\n///                  \'__is_function\'\n///                  \'__is_reference\'\n///                  \'__is_lvalue_reference\'\n///                  \'__is_rvalue_reference\'\n///                  \'__is_fundamental\'\n///                  \'__is_object\'\n///                  \'__is_scalar\'\n///                  \'__is_compound\'\n///                  \'__is_pointer\'\n///                  \'__is_member_object_pointer\'\n///                  \'__is_member_function_pointer\'\n///                  \'__is_member_pointer\'\n///                  \'__is_const\'\n///                  \'__is_volatile\'\n///                  \'__is_trivial\'\n///                  \'__is_standard_layout\'\n///                  \'__is_signed\'\n///                  \'__is_unsigned\'\n///\n/// [GNU] unary-type-trait:\n///                  \'__has_nothrow_assign\'\n///                  \'__has_nothrow_copy\'\n///                  \'__has_nothrow_constructor\'\n///                  \'__has_trivial_assign\'                  [TODO]\n///                  \'__has_trivial_copy\'                    [TODO]\n///                  \'__has_trivial_constructor\'\n///                  \'__has_trivial_destructor\'\n///                  \'__has_virtual_destructor\'\n///                  \'__is_abstract\'                        [TODO]\n///                  \'__is_class\'\n///                  \'__is_empty\'                            [TODO]\n///                  \'__is_enum\'\n///                  \'__is_final\'\n///                  \'__is_pod\'\n///                  \'__is_polymorphic\'\n///                  \'__is_sealed\'                          [MS]\n///                  \'__is_trivial\'\n///                  \'__is_union\'\n///                  \'__has_unique_object_representations\'\n///\n/// [Clang] unary-type-trait:\n///                  \'__is_aggregate\'\n///                  \'__trivially_copyable\'\n///\n///      binary-type-trait:\n/// [GNU]            \'__is_base_of\'\n/// [MS]              \'__is_convertible_to\'\n///                  \'__is_convertible\'\n///                  \'__is_same\'\n///\n/// [Embarcadero] array-type-trait:\n///                  \'__array_rank\'\n///                  \'__array_extent\'\n///\n/// [Embarcadero] expression-trait:\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n/// \\endverbatim\n///\nExprResult Parser::ParseCastExpression(CastParseKind ParseKind, bool isAddressOfOperand, bool &NotCastExpr, TypeCastState isTypeCast, bool isVectorLiteral, bool *NotPrimaryExpression) {\n  case tok::kw_nullptr:\n    if (getLangOpts().CPlusPlus)\n    else\n      Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"},{qc,2254,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n  else if (getLangOpts().C2x && OpTok.is(tok::kw_alignof))\n    Diag(OpTok, diag::warn_c2x_compat_keyword) << OpTok.getName();"}}
[j]={{Tb,4001,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    case tok::kw_thread_local:\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,4245,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  while (true) {\n    case tok::kw_bool:\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,7760,"/// [GNU]  typeof-specifier:\n///          typeof ( expressions )\n///          typeof ( type-name )\n/// [GNU/C++] typeof unary-expression\n/// [C2x]  typeof-specifier:\n///          typeof \'(\' typeof-specifier-argument \')\'\n///          typeof_unqual \'(\' typeof-specifier-argument \')\'\n///\n///        typeof-specifier-argument:\n///          expression\n///          type-name\n///\nvoid Parser::ParseTypeofSpecifier(DeclSpec &DS) {\n  if (getLangOpts().C2x && !II->getName().startswith(\"__\"))\n    Diag(Tok.getLocation(), diag::warn_c2x_compat_keyword) << Tok.getName();"},{Tb,7960,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  if (Tok.is(tok::kw__ExtInt)) {\n  } else {\n    // In C2x mode, diagnose that the use is not compatible with pre-C2x modes.\n    // Otherwise, diagnose that the use is a Clang extension.\n    if (getLangOpts().C2x)\n      Diag(Loc, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",976,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  if (Tok.is(tok::kw_static_assert)) {\n    if (!getLangOpts().CPlusPlus) {\n      if (getLangOpts().C2x)\n        Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{"clang/lib/Parse/ParseDeclCXX.cpp",4504,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (Tok.is(tok::kw_alignas)) {\n    if (getLangOpts().C2x)\n      Diag(Tok, diag::warn_c2x_compat_keyword) << Tok.getName();"},{qc,1014,"/// Parse a cast-expression, or, if \\pisUnaryExpression is true, parse\n/// a unary-expression.\n///\n/// \\p isAddressOfOperand exists because an id-expression that is the operand\n/// of address-of gets special treatment due to member pointers. NotCastExpr\n/// is set to true if the token is not the start of a cast-expression, and no\n/// diagnostic is emitted in this case and no tokens are consumed.\n///\n/// \\verbatim\n///      cast-expression: [C99 6.5.4]\n///        unary-expression\n///        \'(\' type-name \')\' cast-expression\n///\n///      unary-expression:  [C99 6.5.3]\n///        postfix-expression\n///        \'++\' unary-expression\n///        \'--\' unary-expression\n/// [Coro]  \'co_await\' cast-expression\n///        unary-operator cast-expression\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// [GNU]  \'&&\' identifier\n/// [C++11] \'noexcept\' \'(\' expression \')\' [C++11 5.3.7]\n/// [C++]  new-expression\n/// [C++]  delete-expression\n///\n///      unary-operator: one of\n///        \'&\'  \'*\'  \'+\'  \'-\'  \'~\'  \'!\'\n/// [GNU]  \'__extension__\'  \'__real\'  \'__imag\'\n///\n///      primary-expression: [C99 6.5.1]\n/// [C99]  identifier\n/// [C++]  id-expression\n///        constant\n///        string-literal\n/// [C++]  boolean-literal  [C++ 2.13.5]\n/// [C++11] \'nullptr\'        [C++11 2.14.7]\n/// [C++11] user-defined-literal\n///        \'(\' expression \')\'\n/// [C11]  generic-selection\n/// [C++2a] requires-expression\n///        \'__func__\'        [C99 6.4.2.2]\n/// [GNU]  \'__FUNCTION__\'\n/// [MS]    \'__FUNCDNAME__\'\n/// [MS]    \'L__FUNCTION__\'\n/// [MS]    \'__FUNCSIG__\'\n/// [MS]    \'L__FUNCSIG__\'\n/// [GNU]  \'__PRETTY_FUNCTION__\'\n/// [GNU]  \'(\' compound-statement \')\'\n/// [GNU]  \'__builtin_va_arg\' \'(\' assignment-expression \',\' type-name \')\'\n/// [GNU]  \'__builtin_offsetof\' \'(\' type-name \',\' offsetof-member-designator\')\'\n/// [GNU]  \'__builtin_choose_expr\' \'(\' assign-expr \',\' assign-expr \',\'\n///                                    assign-expr \')\'\n/// [GNU]  \'__builtin_FILE\' \'(\' \')\'\n/// [CLANG] \'__builtin_FILE_NAME\' \'(\' \')\'\n/// [GNU]  \'__builtin_FUNCTION\' \'(\' \')\'\n/// [MS]    \'__builtin_FUNCSIG\' \'(\' \')\'\n/// [GNU]  \'__builtin_LINE\' \'(\' \')\'\n/// [CLANG] \'__builtin_COLUMN\' \'(\' \')\'\n/// [GNU]  \'__builtin_source_location\' \'(\' \')\'\n/// [GNU]  \'__builtin_types_compatible_p\' \'(\' type-name \',\' type-name \')\'\n/// [GNU]  \'__null\'\n/// [OBJC]  \'[\' objc-message-expr \']\'\n/// [OBJC]  \'\\@selector\' \'(\' objc-selector-arg \')\'\n/// [OBJC]  \'\\@protocol\' \'(\' identifier \')\'\n/// [OBJC]  \'\\@encode\' \'(\' type-name \')\'\n/// [OBJC]  objc-string-literal\n/// [C++]  simple-type-specifier \'(\' expression-list[opt] \')\'      [C++ 5.2.3]\n/// [C++11] simple-type-specifier braced-init-list                  [C++11 5.2.3]\n/// [C++]  typename-specifier \'(\' expression-list[opt] \')\'        [C++ 5.2.3]\n/// [C++11] typename-specifier braced-init-list                    [C++11 5.2.3]\n/// [C++]  \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'    [C++ 5.2p1]\n/// [C++]  \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\' [C++ 5.2p1]\n/// [C++]  \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' expression \')\'                            [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' type-id \')\'                                [C++ 5.2p1]\n/// [C++]  \'this\'          [C++ 9.3.2]\n/// [G++]  unary-type-trait \'(\' type-id \')\'\n/// [G++]  binary-type-trait \'(\' type-id \',\' type-id \')\'          [TODO]\n/// [EMBT]  array-type-trait \'(\' type-id \',\' integer \')\'\n/// [clang] \'^\' block-literal\n///\n///      constant: [C99 6.4.4]\n///        integer-constant\n///        floating-constant\n///        enumeration-constant -> identifier\n///        character-constant\n///\n///      id-expression: [C++ 5.1]\n///                  unqualified-id\n///                  qualified-id\n///\n///      unqualified-id: [C++ 5.1]\n///                  identifier\n///                  operator-function-id\n///                  conversion-function-id\n///                  \'~\' class-name\n///                  template-id\n///\n///      new-expression: [C++ 5.3.4]\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///      delete-expression: [C++ 5.3.5]\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\n///\n/// [GNU/Embarcadero] unary-type-trait:\n///                  \'__is_arithmetic\'\n///                  \'__is_floating_point\'\n///                  \'__is_integral\'\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n///                  \'__is_complete_type\'\n///                  \'__is_void\'\n///                  \'__is_array\'\n///                  \'__is_function\'\n///                  \'__is_reference\'\n///                  \'__is_lvalue_reference\'\n///                  \'__is_rvalue_reference\'\n///                  \'__is_fundamental\'\n///                  \'__is_object\'\n///                  \'__is_scalar\'\n///                  \'__is_compound\'\n///                  \'__is_pointer\'\n///                  \'__is_member_object_pointer\'\n///                  \'__is_member_function_pointer\'\n///                  \'__is_member_pointer\'\n///                  \'__is_const\'\n///                  \'__is_volatile\'\n///                  \'__is_trivial\'\n///                  \'__is_standard_layout\'\n///                  \'__is_signed\'\n///                  \'__is_unsigned\'\n///\n/// [GNU] unary-type-trait:\n///                  \'__has_nothrow_assign\'\n///                  \'__has_nothrow_copy\'\n///                  \'__has_nothrow_constructor\'\n///                  \'__has_trivial_assign\'                  [TODO]\n///                  \'__has_trivial_copy\'                    [TODO]\n///                  \'__has_trivial_constructor\'\n///                  \'__has_trivial_destructor\'\n///                  \'__has_virtual_destructor\'\n///                  \'__is_abstract\'                        [TODO]\n///                  \'__is_class\'\n///                  \'__is_empty\'                            [TODO]\n///                  \'__is_enum\'\n///                  \'__is_final\'\n///                  \'__is_pod\'\n///                  \'__is_polymorphic\'\n///                  \'__is_sealed\'                          [MS]\n///                  \'__is_trivial\'\n///                  \'__is_union\'\n///                  \'__has_unique_object_representations\'\n///\n/// [Clang] unary-type-trait:\n///                  \'__is_aggregate\'\n///                  \'__trivially_copyable\'\n///\n///      binary-type-trait:\n/// [GNU]            \'__is_base_of\'\n/// [MS]              \'__is_convertible_to\'\n///                  \'__is_convertible\'\n///                  \'__is_same\'\n///\n/// [Embarcadero] array-type-trait:\n///                  \'__array_rank\'\n///                  \'__array_extent\'\n///\n/// [Embarcadero] expression-trait:\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n/// \\endverbatim\n///\nExprResult Parser::ParseCastExpression(CastParseKind ParseKind, bool isAddressOfOperand, bool &NotCastExpr, TypeCastState isTypeCast, bool isVectorLiteral, bool *NotPrimaryExpression) {\n  case tok::kw_nullptr:\n    if (getLangOpts().CPlusPlus)\n    else\n      Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"},{qc,2497,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n  else if (getLangOpts().C2x && OpTok.is(tok::kw_alignof))\n    Diag(OpTok, diag::warn_c2x_compat_keyword) << OpTok.getName();"}}
},
},
["warn_c2x_compat_label_end_of_compound_statement"]={
["warn_c2x_compat_label_end_of_compound_statement"]={
Line 7,319: Line 7,319:
[e]=Q,
[e]=Q,
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."},
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."},
[j]={{"clang/lib/Parse/ParseStmt.cpp",1012,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_label_end_of_compound_statement : diag::ext_c_label_end_of_compound_statement);"}}
[j]={{"clang/lib/Parse/ParseStmt.cpp",1080,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_label_end_of_compound_statement : diag::ext_c_label_end_of_compound_statement);"}}
},
},
["warn_c2x_compat_literal_ucn_control_character"]={
["warn_c2x_compat_literal_ucn_control_character"]={
Line 7,334: Line 7,334:
[e]=G,
[e]=G,
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[j]={{zc,575,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n      else\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}}
[j]={{zc,687,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n      else\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}}
},
},
["warn_c2x_compat_literal_ucn_escape_basic_scs"]={
["warn_c2x_compat_literal_ucn_escape_basic_scs"]={
Line 7,349: Line 7,349:
[e]=G,
[e]=G,
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[i]={"304e97469455",1687518157,"[Clang] Correctly handle $, @, and ` when represented as UCN"},
[j]={{zc,573,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}}
[j]={{zc,680,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    if (Diags) {\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}}
},
},
["warn_c2x_compat_pp_directive"]={
["warn_c2x_compat_pp_directive"]={
Line 7,364: Line 7,364:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{S,702,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        if (LangOpts.CPlusPlus)\n        else\n          DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{S,3164,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  case PED_Elifndef:\n    if (LangOpts.CPlusPlus)\n    else\n      DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}}
[j]={{S,771,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  while (true) {\n    if (Directive.startswith(\"if\")) {\n    } else if (Directive[0] == \'e\') {\n      if (Sub == \"ndif\") { // \"endif\"\n      } else if (Sub == \"lse\") { // \"else\".\n      } else if (Sub == \"lif\") { // \"elif\".\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        if (LangOpts.CPlusPlus)\n        else\n          DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{S,3457,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  case PED_Elifndef:\n    if (LangOpts.CPlusPlus)\n    else\n      DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}}
},
},
["warn_c2x_compat_warning_directive"]={
["warn_c2x_compat_warning_directive"]={
Line 7,379: Line 7,379:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{S,1161,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  default:\n    case tok::pp_warning:\n      if (LangOpts.CPlusPlus)\n      else\n        Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}}
[j]={{S,1281,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  default:\n    case tok::pp_warning:\n      if (LangOpts.CPlusPlus)\n      else\n        Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}}
},
},
["warn_c2x_keyword"]={
["warn_c2x_keyword"]={
Line 7,394: Line 7,394:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{"clang/lib/Basic/IdentifierTable.cpp",881,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC2X) == KEYC2X)\n      return diag::warn_c2x_keyword;"}}
[j]={{"clang/lib/Basic/IdentifierTable.cpp",919,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC2X) == KEYC2X)\n      return diag::warn_c2x_keyword;"}}
},
},
["warn_c99_compat_unicode_id"]={
["warn_c99_compat_unicode_id"]={
Line 7,409: Line 7,409:
[e]=G,
[e]=G,
[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."},
[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."},
[j]={{kb,1433,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {"},{kb,1439,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotAppearInIdentifier;"},{kb,1441,"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]={{kb,1569,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {"},{kb,1580,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotAppearInIdentifier;"},{kb,1584,"static void maybeDiagnoseIDCharCompat(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst) {\n  // Check C99 compatibility.\n  if (!Diags.isIgnored(diag::warn_c99_compat_unicode_id, Range.getBegin())) {\n    if (!C99AllowedIDChars.contains(C)) {\n    } else if (IsFirst && C99DisallowedInitialIDChars.contains(C)) {\n      Diags.Report(Range.getBegin(), diag::warn_c99_compat_unicode_id) << Range << CannotStartIdentifier;"}}
},
},
["warn_c99_compat_unicode_literal"]={
["warn_c99_compat_unicode_literal"]={
Line 7,424: Line 7,424:
[e]=G,
[e]=G,
[i]={"06d274fdb7c8",1363024902,"Add -Wc99-compat warning for C11 unicode string and character literals."},
[i]={"06d274fdb7c8",1363024902,"Add -Wc99-compat warning for C11 unicode string and character literals."},
[j]={{kb,1886,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode() && (Kind == tok::utf8_string_literal || Kind == tok::utf16_string_literal || Kind == tok::utf32_string_literal))\n    Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"},{kb,2089,"/// 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]={{kb,2088,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode() && (Kind == tok::utf8_string_literal || Kind == tok::utf16_string_literal || Kind == tok::utf32_string_literal))\n    Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"},{kb,2304,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n      Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"}}
},
},
["warn_c99_keyword"]={
["warn_c99_keyword"]={
Line 7,439: Line 7,439:
[e]=G,
[e]=G,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{"clang/lib/Basic/IdentifierTable.cpp",879,"#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  if (LangOpts.CPlusPlus) {\n  } else {\n    if ((Flags & KEYC99) == KEYC99)\n      return diag::warn_c99_keyword;"}}
},
},
["warn_c_kext"]={
["warn_c_kext"]={
Line 7,451: Line 7,451:
[e]=l,
[e]=l,
[i]={"f7f04458b3d1",1296777684,"-fapple-kext cannot have \'weak\' visibility in this"},
[i]={"f7f04458b3d1",1296777684,"-fapple-kext cannot have \'weak\' visibility in this"},
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",379,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (LangOpts.AppleKext && !LangOpts.CPlusPlus)\n    Diags.Report(diag::warn_c_kext);"}}
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",498,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (LangOpts.AppleKext && !LangOpts.CPlusPlus)\n    Diags.Report(diag::warn_c_kext);"}}
},
},
["warn_call_to_pure_virtual_member_function_from_ctor_dtor"]={
["warn_call_to_pure_virtual_member_function_from_ctor_dtor"]={
Line 7,465: Line 7,465:
[e]=k,
[e]=k,
[i]={"47061ee5bc64",1304691931,"Warn when trying to call a pure virtual member function in a class from the class constructor/destru..."},
[i]={"47061ee5bc64",1304691931,"Warn when trying to call a pure virtual member function in a class from the class constructor/destru..."},
[j]={{D,12593,"/// 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]={{D,14920,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if ((isa<CXXConstructorDecl>(CurContext) || isa<CXXDestructorDecl>(CurContext)) && TheCall->getMethodDecl()->isPure()) {\n    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && MemExpr->performsVirtualDispatch(getLangOpts())) {\n      Diag(MemExpr->getBeginLoc(), diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) << MD->getParent();"}}
},
},
["warn_call_wrong_number_of_arguments"]={
["warn_call_wrong_number_of_arguments"]={
Line 7,477: Line 7,477:
[e]=k,
[e]=k,
[i]={"d8e97def584d",1238686630,"When calling a function without a prototype for which we have a"},
[i]={"d8e97def584d",1238686630,"When calling a function without a prototype for which we have a"},
[j]={{C,6493,"/// 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]={{C,7555,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  if (Proto) {\n  } else {\n    if (FDecl) {\n      if (FDecl->hasBody(Def) && Args.size() != Def->param_size()) {\n        if (!Proto || !(Proto->isVariadic() && Args.size() >= Def->param_size()))\n          Diag(RParenLoc, diag::warn_call_wrong_number_of_arguments) << (Args.size() > Def->param_size()) << FDecl << Fn->getSourceRange();"}}
},
},
["warn_called_once_gets_called_twice"]={
["warn_called_once_gets_called_twice"]={
Line 7,491: Line 7,491:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{I,1504,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{I,1540,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
[j]={{I,1690,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{I,1752,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
},
},
["warn_called_once_never_called"]={
["warn_called_once_never_called"]={
Line 7,505: Line 7,505:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{I,1510,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1527,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1540,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
[j]={{I,1700,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1730,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1750,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
},
},
["warn_called_once_never_called_when"]={
["warn_called_once_never_called_when"]={
Line 7,519: Line 7,519:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{I,1515,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{I,1540,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
[j]={{I,1711,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{I,1751,"constexpr unsigned CalledOnceWarnings[] = {diag::warn_called_once_never_called, diag::warn_called_once_never_called_when, diag::warn_called_once_gets_called_twice};"}}
},
},
["warn_cannot_pass_non_pod_arg_to_vararg"]={
["warn_cannot_pass_non_pod_arg_to_vararg"]={
Line 7,533: Line 7,533:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{C,892,"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]={{C,1013,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_MSVCUndefined:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg) << getLangOpts().CPlusPlus11 << Ty << CT);"}}
},
},
["warn_cannot_resolve_lock"]={
["warn_cannot_resolve_lock"]={
Line 7,548: Line 7,548:
[e]=k,
[e]=k,
[i]={"ff2f3f810525",1315585315,"Thread safety: This patch deals with previously unhandled cases when building lock expressions. We n..."},
[i]={"ff2f3f810525",1315585315,"Thread safety: This patch deals with previously unhandled cases when building lock expressions. We n..."},
[j]={{I,1618,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleInvalidLockExp(SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_cannot_resolve_lock) << Loc);"}}
[j]={{I,1864,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleInvalidLockExp(SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_cannot_resolve_lock) << Loc);"}}
},
},
["warn_case_empty_range"]={
["warn_case_empty_range"]={
Line 7,560: Line 7,560:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{O,1210,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Detect duplicate case ranges, which usually don\'t exist at all in\n    // the first place.\n    if (!CaseRanges.empty()) {\n      for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n        // If the low value is bigger than the high value, the case is empty.\n        if (LoVal > HiVal) {\n          Diag(CR->getLHS()->getBeginLoc(), diag::warn_case_empty_range) << SourceRange(CR->getLHS()->getBeginLoc(), Hi->getEndLoc());"}}
[j]={{O,1420,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Detect duplicate case ranges, which usually don\'t exist at all in\n    // the first place.\n    if (!CaseRanges.empty()) {\n      for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n        // If the low value is bigger than the high value, the case is empty.\n        if (LoVal > HiVal) {\n          Diag(CR->getLHS()->getBeginLoc(), diag::warn_case_empty_range) << SourceRange(CR->getLHS()->getBeginLoc(), Hi->getEndLoc());"}}
},
},
["warn_case_value_overflow"]={
["warn_case_value_overflow"]={
Line 7,574: Line 7,574:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{O,972,"/// Check the specified case value is in range for the given unpromoted switch\n/// type.\nstatic void checkCaseValue(Sema &S, SourceLocation Loc, const llvm::APSInt &Val, unsigned UnpromotedWidth, bool UnpromotedSign) {\n  // If the case value was signed and negative and the switch expression is\n  // unsigned, don\'t bother to warn: this is implementation-defined behavior.\n  // FIXME: Introduce a second, default-ignored warning for this case?\n  if (UnpromotedWidth < Val.getBitWidth()) {\n    // FIXME: Use different diagnostics for overflow  in conversion to promoted\n    // type versus \"switch expression cannot have this value\". Use proper\n    // IntRange checking rather than just looking at the unpromoted type here.\n    if (ConvVal != Val)\n      S.Diag(Loc, diag::warn_case_value_overflow) << toString(Val, 10) << toString(ConvVal, 10);"}}
[j]={{O,1149,"/// Check the specified case value is in range for the given unpromoted switch\n/// type.\nstatic void checkCaseValue(Sema &S, SourceLocation Loc, const llvm::APSInt &Val, unsigned UnpromotedWidth, bool UnpromotedSign) {\n  // If the case value was signed and negative and the switch expression is\n  // unsigned, don\'t bother to warn: this is implementation-defined behavior.\n  // FIXME: Introduce a second, default-ignored warning for this case?\n  if (UnpromotedWidth < Val.getBitWidth()) {\n    // FIXME: Use different diagnostics for overflow  in conversion to promoted\n    // type versus \"switch expression cannot have this value\". Use proper\n    // IntRange checking rather than just looking at the unpromoted type here.\n    if (ConvVal != Val)\n      S.Diag(Loc, diag::warn_case_value_overflow) << toString(Val, 10) << toString(ConvVal, 10);"}}
},
},
["warn_cast_align"]={
["warn_cast_align"]={
Line 7,589: Line 7,589:
[e]=k,
[e]=k,
[i]={"2b5c1b2516ca",1281649497,"Implement -Wcast-align.  The initial design of this diagnostic diverges    "},
[i]={"2b5c1b2516ca",1281649497,"Implement -Wcast-align.  The initial design of this diagnostic diverges    "},
[j]={{F,15151,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  if (getDiagnostics().isIgnored(diag::warn_cast_align, TRange.getBegin()))"},{F,15189,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  Diag(TRange.getBegin(), diag::warn_cast_align) << Op->getType() << T << static_cast<unsigned>(SrcAlign.getQuantity()) << static_cast<unsigned>(DestAlign.getQuantity()) << TRange << Op->getSourceRange();"}}
[j]={{F,16961,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  if (getDiagnostics().isIgnored(diag::warn_cast_align, TRange.getBegin()))"},{F,16993,"/// CheckCastAlign - Implements -Wcast-align, which warns when a\n/// pointer cast increases the alignment requirements.\nvoid Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {\n  Diag(TRange.getBegin(), diag::warn_cast_align) << Op->getType() << T << static_cast<unsigned>(SrcAlign.getQuantity()) << static_cast<unsigned>(DestAlign.getQuantity()) << TRange << Op->getSourceRange();"}}
},
},
["warn_cast_calling_conv"]={
["warn_cast_calling_conv"]={
Line 7,603: Line 7,603:
[e]=k,
[e]=k,
[i]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions"},
[i]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions"},
[j]={{mb,1843,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv) << SrcCCName << DstCCName << OpRange;"},{mb,1848,"/// 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]={{mb,2146,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  Self.Diag(OpRange.getBegin(), diag::warn_cast_calling_conv) << SrcCCName << DstCCName << OpRange;"},{mb,2152,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  if (Self.Diags.isIgnored(diag::warn_cast_calling_conv, OpRange.getBegin()))"}}
},
},
["warn_cast_function_type"]={
["warn_cast_function_type"]={
Line 7,618: Line 7,618:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{mb,923,"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]={{mb,1099,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"}}
},
},
["warn_cast_function_type_strict"]={
["warn_cast_function_type_strict"]={
Line 7,633: Line 7,633:
[e]=k,
[e]=k,
[i]={Z,1625925174,Y},
[i]={Z,1625925174,Y},
[j]={{mb,923,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"},{mb,951,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (DiagID == diag::warn_cast_function_type_strict)"}}
[j]={{mb,1098,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  const unsigned int DiagList[] = {diag::warn_cast_function_type_strict, diag::warn_cast_function_type};"},{mb,1130,"static unsigned int checkCastFunctionType(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (DiagID == diag::warn_cast_function_type_strict)"}}
},
},
["warn_cast_nonnull_to_bool"]={
["warn_cast_nonnull_to_bool"]={
Line 7,647: Line 7,647:
[e]=Vb,
[e]=Vb,
[i]={"4c8cb14c1ab0",1414090810,"patch to issue warning on comparing parameters with"},
[i]={"4c8cb14c1ab0",1414090810,"patch to issue warning on comparing parameters with"},
[j]={{F,13781,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}}
[j]={{F,15490,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}}
},
},
["warn_cast_pointer_from_sel"]={
["warn_cast_pointer_from_sel"]={
Line 7,661: Line 7,661:
[e]=k,
[e]=k,
[i]={"5ad9659688e8",1345142027,"objective-C: deprecate casts of ObjC\'s SEL"},
[i]={"5ad9659688e8",1345142027,"objective-C: deprecate casts of ObjC\'s SEL"},
[j]={{mb,1800,"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]={{mb,2097,"static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  if (const PointerType *SrcPtrTy = SrcType->getAs<PointerType>())\n    if (SrcPtrTy->isObjCSelType()) {\n      if (!DT.getUnqualifiedType()->isVoidType())\n        Self.Diag(SrcExpr.get()->getExprLoc(), diag::warn_cast_pointer_from_sel) << SrcType << DestType << SrcExpr.get()->getSourceRange();"}}
},
},
["warn_cast_qual"]={
["warn_cast_qual"]={
Line 7,676: Line 7,676:
[e]=k,
[e]=k,
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[j]={{mb,2866,"/// 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]={{mb,3328,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  // This is a variant of int **x; const int **y = (const int **)x;\n  if (qualifiers == -1)\n  else\n    Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual) << TheOffendingSrcType << TheOffendingDestType << qualifiers;"}}
},
},
["warn_cast_qual2"]={
["warn_cast_qual2"]={
Line 7,691: Line 7,691:
[e]=k,
[e]=k,
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[i]={"d5178014938d",1416603790,"Implement -Wcast-qual, fixing #13772."},
[j]={{mb,2864,"/// 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]={{mb,3325,"/// DiagnoseCastQual - Warn whenever casts discards a qualifiers, be it either\n/// const, volatile or both.\nstatic void DiagnoseCastQual(Sema &Self, const ExprResult &SrcExpr, QualType DestType) {\n  // This is a variant of int **x; const int **y = (const int **)x;\n  if (qualifiers == -1)\n    Self.Diag(SrcExpr.get()->getBeginLoc(), diag::warn_cast_qual2) << SrcType << DestType;"}}
},
},
["warn_category_method_impl_match"]={
["warn_category_method_impl_match"]={
Line 7,705: Line 7,705:
[e]=k,
[e]=k,
[i]={"9f8b19e9aea9",1311895190,"objective-c: warn if implementation of a method in category"},
[i]={"9f8b19e9aea9",1311895190,"objective-c: warn if implementation of a method in category"},
[j]={{B,2135,"/// 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]={{B,2665,"/// WarnExactTypedMethods - This routine issues a warning if method\n/// implementation declaration matches exactly that of its declaration.\nvoid Sema::WarnExactTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (match) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_category_method_impl_match);"}}
},
},
["warn_cconv_knr"]={
["warn_cconv_knr"]={
Line 7,719: Line 7,719:
[e]=k,
[e]=k,
[i]={"d191063c6c50",1411168032,"Follow-up to r214408: Warn on other callee-cleanup functions without prototype too."},
[i]={"d191063c6c50",1411168032,"Follow-up to r214408: Warn on other callee-cleanup functions without prototype too."},
[j]={{v,9036,"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]={{v,10321,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (!getLangOpts().CPlusPlus) {\n    if (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n      if (!supportsVariadicCall(CC)) {\n        int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}}
},
},
["warn_cconv_unsupported"]={
["warn_cconv_unsupported"]={
Line 7,733: Line 7,733:
[e]=k,
[e]=k,
[i]={"85d667fcb6f3",1563396086,"Renamed and changed the wording of warn_cconv_ignored"},
[i]={"85d667fcb6f3",1563396086,"Renamed and changed the wording of warn_cconv_ignored"},
[j]={{v,3419,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    if (!NewCCExplicit) {\n    } else if (Old->getBuiltinID()) {\n      Diag(New->getLocation(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << (int)CallingConventionIgnoredReason::BuiltinFunction;"},{u,4809,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n  case TargetInfo::CCCR_Warning: {\n    Diag(Attrs.getLoc(), diag::warn_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"},{hb,7084,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    if (FnP && FnP->isVariadic()) {\n      // stdcall and fastcall are ignored with a warning for GCC and MS\n      // compatibility.\n      if (CC == CC_X86StdCall || CC == CC_X86FastCall)\n        return S.Diag(attr.getLoc(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CC) << (int)Sema::CallingConventionIgnoredReason::VariadicFunction;"},{hb,7141,"void Sema::adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor, SourceLocation Loc) {\n  // MS compiler ignores explicit calling convention attributes on structors. We\n  // should do the same.\n  if (Context.getTargetInfo().getCXXABI().isMicrosoft() && IsCtorOrDtor) {\n    // Issue a warning on ignored calling convention -- except of __stdcall.\n    // Again, this is what MS compiler does.\n    if (CurCC != CC_X86StdCall)\n      Diag(Loc, diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CurCC) << (int)Sema::CallingConventionIgnoredReason::ConstructorDestructor;"}}
[j]={{v,3801,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    if (!NewCCExplicit) {\n    } else if (Old->getBuiltinID()) {\n      Diag(New->getLocation(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << (int)CallingConventionIgnoredReason::BuiltinFunction;"},{u,5453,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n  case TargetInfo::CCCR_Warning: {\n    Diag(Attrs.getLoc(), diag::warn_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"},{hb,7994,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    if (FnP && FnP->isVariadic()) {\n      // stdcall and fastcall are ignored with a warning for GCC and MS\n      // compatibility.\n      if (CC == CC_X86StdCall || CC == CC_X86FastCall)\n        return S.Diag(attr.getLoc(), diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CC) << (int)Sema::CallingConventionIgnoredReason::VariadicFunction;"},{hb,8060,"void Sema::adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor, SourceLocation Loc) {\n  // MS compiler ignores explicit calling convention attributes on structors. We\n  // should do the same.\n  if (Context.getTargetInfo().getCXXABI().isMicrosoft() && IsCtorOrDtor) {\n    // Issue a warning on ignored calling convention -- except of __stdcall.\n    // Again, this is what MS compiler does.\n    if (CurCC != CC_X86StdCall)\n      Diag(Loc, diag::warn_cconv_unsupported) << FunctionType::getNameForCallConv(CurCC) << (int)Sema::CallingConventionIgnoredReason::ConstructorDestructor;"}}
},
},
["warn_cdtor_function_try_handler_mem_expr"]={
["warn_cdtor_function_try_handler_mem_expr"]={
Line 7,747: Line 7,747:
[e]=k,
[e]=k,
[i]={"6924dcdf6f73",1441118964,"Add a new frontend warning for referencing members from the handler of a constructor or destructor f..."},
[i]={"6924dcdf6f73",1441118964,"Add a new frontend warning for referencing members from the handler of a constructor or destructor f..."},
[j]={{"clang/lib/Sema/SemaExprMember.cpp",815,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  if (S && BaseExpr && FD && (isa<CXXDestructorDecl>(FD) || isa<CXXConstructorDecl>(FD)) && isa<CXXThisExpr>(BaseExpr->IgnoreImpCasts()) && IsInFnTryBlockHandler(S))\n    Diag(MemberLoc, diag::warn_cdtor_function_try_handler_mem_expr) << isa<CXXDestructorDecl>(FD);"}}
[j]={{"clang/lib/Sema/SemaExprMember.cpp",995,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  if (S && BaseExpr && FD && (isa<CXXDestructorDecl>(FD) || isa<CXXConstructorDecl>(FD)) && isa<CXXThisExpr>(BaseExpr->IgnoreImpCasts()) && IsInFnTryBlockHandler(S))\n    Diag(MemberLoc, diag::warn_cdtor_function_try_handler_mem_expr) << isa<CXXDestructorDecl>(FD);"}}
},
},
["warn_cfstring_truncated"]={
["warn_cfstring_truncated"]={
Line 7,761: Line 7,761:
[e]=k,
[e]=k,
[i]={"56603ef7b279",1283888293,"Have Sema check for validity of CGString literal"},
[i]={"56603ef7b279",1283888293,"Have Sema check for validity of CGString literal"},
[j]={{F,7520,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  if (Literal->containsNonAsciiOrNull()) {\n    // Check for conversion failure.\n    if (Result != llvm::conversionOK)\n      Diag(Arg->getBeginLoc(), diag::warn_cfstring_truncated) << Arg->getSourceRange();"}}
[j]={{F,7995,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  if (Literal->containsNonAsciiOrNull()) {\n    // Check for conversion failure.\n    if (Result != llvm::conversionOK)\n      Diag(Arg->getBeginLoc(), diag::warn_cfstring_truncated) << Arg->getSourceRange();"}}
},
},
["warn_char_constant_too_large"]={
["warn_char_constant_too_large"]={
Line 7,773: Line 7,773:
[e]=G,
[e]=G,
[i]={L,1236199783,M},
[i]={L,1236199783,M},
[j]={{zc,1651,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  if (!HadError && multi_char_too_long) {\n    PP.Diag(Loc, diag::warn_char_constant_too_large);"}}
[j]={{zc,1827,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  if (!HadError && multi_char_too_long) {\n    PP.Diag(Loc, diag::warn_char_constant_too_large);"}}
},
},
["warn_class_method_not_found"]={
["warn_class_method_not_found"]={
Line 7,787: Line 7,787:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{nb,1415,"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]={{nb,1745,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  if (!Method) {\n    if (getLangOpts().ObjCAutoRefCount)\n    else\n      DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}}
},
},
["warn_class_method_not_found_with_typo"]={
["warn_class_method_not_found_with_typo"]={
Line 7,801: Line 7,801:
[e]=k,
[e]=k,
[i]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors"},
[i]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors"},
[j]={{nb,1422,"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]={{nb,1753,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  if (!Method) {\n    if (!getLangOpts().DebuggerSupport) {\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n        else\n          DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}}
},
},
["warn_clause_expected_string"]={
["warn_clause_expected_string"]={
Line 7,815: Line 7,815:
[e]=Q,
[e]=Q,
[i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause."},
[i]={"9d90cf2fca44",1668751380,"[OPENMP5.1] Initial support for message clause."},
[j]={{w,13910,"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]={{w,16939,"OMPClause *Sema::ActOnOpenMPMessageClause(Expr *ME, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!isa<StringLiteral>(ME)) {\n    Diag(ME->getBeginLoc(), diag::warn_clause_expected_string) << getOpenMPClauseName(OMPC_message);"}}
},
},
["warn_cleanup_ext"]={
["warn_cleanup_ext"]={
Line 7,829: Line 7,829:
[e]=k,
[e]=k,
[i]={"c12aaff2cbe5",1378863461,"The cleanup attribute no longer uses an unresolved, simple identifier as its argument.  Instead, it ..."},
[i]={"c12aaff2cbe5",1378863461,"The cleanup attribute no longer uses an unresolved, simple identifier as its argument.  Instead, it ..."},
[j]={{u,3246,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n    if (DRE->hasQualifier())\n      S.Diag(Loc, diag::warn_cleanup_ext);"},{u,3255,"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]={{u,3706,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n    if (DRE->hasQualifier())\n      S.Diag(Loc, diag::warn_cleanup_ext);"},{u,3716,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n    if (ULE->hasExplicitTemplateArgs())\n      S.Diag(Loc, diag::warn_cleanup_ext);"}}
},
},
["warn_cmse_nonsecure_union"]={
["warn_cmse_nonsecure_union"]={
Line 7,843: Line 7,843:
[e]=k,
[e]=k,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,6557,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Warn for unions passing across security boundary (CMSE).\n  if (FuncT != nullptr && FuncT->getCmseNSCallAttr()) {\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      if (const auto *RT = dyn_cast<RecordType>(Args[i]->getType().getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(Args[i]->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 0 << i;"},{O,3415,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    if (FD->hasAttr<CmseNSEntryAttr>() && RetValExp) {\n      if (const auto *RT = dyn_cast<RecordType>(FnRetType.getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(RetValExp->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 1;"}}
[j]={{C,7655,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Warn for unions passing across security boundary (CMSE).\n  if (FuncT != nullptr && FuncT->getCmseNSCallAttr()) {\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      if (const auto *RT = dyn_cast<RecordType>(Args[i]->getType().getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(Args[i]->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 0 << i;"},{O,3970,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    if (FD->hasAttr<CmseNSEntryAttr>() && RetValExp) {\n      if (const auto *RT = dyn_cast<RecordType>(FnRetType.getCanonicalType())) {\n        if (RT->getDecl()->isOrContainsUnion())\n          Diag(RetValExp->getBeginLoc(), diag::warn_cmse_nonsecure_union) << 1;"}}
},
},
["warn_cocoa_naming_owned_rule"]={
["warn_cocoa_naming_owned_rule"]={
Line 7,857: Line 7,857:
[e]=k,
[e]=k,
[i]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "},
[i]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) "},
[j]={{E,1809,"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]={{E,2277,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  for (const auto *PID : D->property_impls()) {\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        if (getLangOpts().ObjCAutoRefCount)\n        else\n          Diag(PD->getLocation(), diag::warn_cocoa_naming_owned_rule);"}}
},
},
["warn_collection_expr_type"]={
["warn_collection_expr_type"]={
Line 7,869: Line 7,869:
[e]=k,
[e]=k,
[i]={"68e69ca9f9e0",1281651942,"Patch to issue warning when colllection expresion\'s type"},
[i]={"68e69ca9f9e0",1281651942,"Patch to issue warning when colllection expresion\'s type"},
[j]={{O,1981,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // If we have a forward-declared type, we can\'t do this check.\n  // Under ARC, it is an error not to have a forward-declared class.\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {\n  } else if (iface || !objectType->qual_empty()) {\n    // If we didn\'t find it anywhere, give up.\n    if (!method) {\n      Diag(forLoc, diag::warn_collection_expr_type) << collection->getType() << selector << collection->getSourceRange();"}}
[j]={{O,2271,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // If we have a forward-declared type, we can\'t do this check.\n  // Under ARC, it is an error not to have a forward-declared class.\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {\n  } else if (iface || !objectType->qual_empty()) {\n    // If we didn\'t find it anywhere, give up.\n    if (!method) {\n      Diag(forLoc, diag::warn_collection_expr_type) << collection->getType() << selector << collection->getSourceRange();"}}
},
},
["warn_comma_operator"]={
["warn_comma_operator"]={
Line 7,884: Line 7,884:
[e]=k,
[e]=k,
[i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[i]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[j]={{C,12610,"// Look for instances where it is likely the comma operator is confused with\n// another operator.  There is an explicit list of acceptable expressions for\n// the left hand side of the comma operator, otherwise emit a warning.\nvoid Sema::DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc) {\n  Diag(Loc, diag::warn_comma_operator);"},{C,12641,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!S.getDiagnostics().isIgnored(diag::warn_comma_operator, Loc))"},{O,798,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (CondExpr && (getLangOpts().C99 || getLangOpts().CPlusPlus) && !Diags.isIgnored(diag::warn_comma_operator, CondExpr->getExprLoc()))"},{O,1449,"StmtResult Sema::ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc, ConditionResult Cond, SourceLocation RParenLoc, Stmt *Body) {\n  if (CondVal.second && !Diags.isIgnored(diag::warn_comma_operator, CondVal.second->getExprLoc()))"},{O,1473,"StmtResult Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, SourceLocation WhileLoc, SourceLocation CondLParen, Expr *Cond, SourceLocation CondRParen) {\n  if (Cond && !getLangOpts().C99 && !getLangOpts().CPlusPlus && !Diags.isIgnored(diag::warn_comma_operator, Cond->getExprLoc()))"},{O,1898,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  if (Second.get().second && !Diags.isIgnored(diag::warn_comma_operator, Second.get().second->getExprLoc()))"}}
[j]={{C,14632,"// Look for instances where it is likely the comma operator is confused with\n// another operator.  There is an explicit list of acceptable expressions for\n// the left hand side of the comma operator, otherwise emit a warning.\nvoid Sema::DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc) {\n  Diag(Loc, diag::warn_comma_operator);"},{C,14698,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!S.getDiagnostics().isIgnored(diag::warn_comma_operator, Loc))"},{O,898,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (CondExpr && (getLangOpts().C99 || getLangOpts().CPlusPlus) && !Diags.isIgnored(diag::warn_comma_operator, CondExpr->getExprLoc()))"},{O,1697,"StmtResult Sema::ActOnWhileStmt(SourceLocation WhileLoc, SourceLocation LParenLoc, ConditionResult Cond, SourceLocation RParenLoc, Stmt *Body) {\n  if (CondVal.second && !Diags.isIgnored(diag::warn_comma_operator, CondVal.second->getExprLoc()))"},{O,1726,"StmtResult Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, SourceLocation WhileLoc, SourceLocation CondLParen, Expr *Cond, SourceLocation CondRParen) {\n  if (Cond && !getLangOpts().C99 && !getLangOpts().CPlusPlus && !Diags.isIgnored(diag::warn_comma_operator, Cond->getExprLoc()))"},{O,2177,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  if (Second.get().second && !Diags.isIgnored(diag::warn_comma_operator, Second.get().second->getExprLoc()))"}}
},
},
["warn_comparison_always"]={
["warn_comparison_always"]={
Line 7,898: Line 7,898:
[e]=k,
[e]=k,
[i]={"ec170db73d50",1276026634,"Warn about comparisons between arrays and improve self-comparison"},
[i]={"ec170db73d50",1276026634,"Warn about comparisons between arrays and improve self-comparison"},
[j]={{C,10920,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 0 /*self-comparison*/"},{C,10938,"/// 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]={{C,12673,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 0 /*self-comparison*/"},{C,12703,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  if (!LHS->getBeginLoc().isMacroID() && !RHS->getBeginLoc().isMacroID()) {\n    if (Expr::isSameComparisonOperand(LHS, RHS)) {\n    } else if (checkForArray(LHSStripped) && checkForArray(RHSStripped)) {\n      S.DiagRuntimeBehavior(Loc, nullptr,\n                            S.PDiag(diag::warn_comparison_always) << 1 /*array comparison*/"}}
},
},
["warn_comparison_bitwise_always"]={
["warn_comparison_bitwise_always"]={
Line 7,913: Line 7,913:
[e]=k,
[e]=k,
[i]={"7afd71e4ff5d",1400607071,"Add a check for tautological bitwise comparisons to -Wtautological-compare."},
[i]={"7afd71e4ff5d",1400607071,"Add a check for tautological bitwise comparisons to -Wtautological-compare."},
[j]={{I,165,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseEquality(const BinaryOperator *B, bool isAlwaysTrue) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_always) << DiagRange << isAlwaysTrue;"}}
[j]={{I,177,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseEquality(const BinaryOperator *B, bool isAlwaysTrue) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_always) << DiagRange << isAlwaysTrue;"}}
},
},
["warn_comparison_bitwise_or"]={
["warn_comparison_bitwise_or"]={
Line 7,928: Line 7,928:
[e]=k,
[e]=k,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{I,173,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseOr(const BinaryOperator *B) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_or) << DiagRange;"},{I,176,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}}
[j]={{I,186,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  void compareBitwiseOr(const BinaryOperator *B) override {\n    S.Diag(B->getExprLoc(), diag::warn_comparison_bitwise_or) << DiagRange;"},{I,192,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}}
},
},
["warn_comparison_mixed_enum_types"]={
["warn_comparison_mixed_enum_types"]={
Line 7,942: Line 7,942:
[e]=k,
[e]=k,
[i]={kc,1575504770,mc},
[i]={kc,1575504770,mc},
[j]={{C,1331,"/// 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]={{C,1529,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}}
},
},
["warn_comparison_mixed_enum_types_cxx20"]={
["warn_comparison_mixed_enum_types_cxx20"]={
Line 7,956: Line 7,956:
[e]=Ib,
[e]=Ib,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,1331,"/// 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]={{C,1528,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n    } else if (ACK == Sema::ACK_Comparison) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_comparison_mixed_enum_types_cxx20 : diag::warn_comparison_mixed_enum_types;"}}
},
},
["warn_comparison_of_mixed_enum_types_switch"]={
["warn_comparison_of_mixed_enum_types_switch"]={
Line 7,970: Line 7,970:
[e]=k,
[e]=k,
[i]={"0284a20fbafa",1502312203,"[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare"},
[i]={"0284a20fbafa",1502312203,"[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare"},
[j]={{O,1023,"static void checkEnumTypesInSwitchStmt(Sema &S, const Expr *Cond, const Expr *Case) {\n  S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types_switch) << CondType << CaseType << Cond->getSourceRange() << Case->getSourceRange();"}}
[j]={{O,1211,"static void checkEnumTypesInSwitchStmt(Sema &S, const Expr *Cond, const Expr *Case) {\n  S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types_switch) << CondType << CaseType << Cond->getSourceRange() << Case->getSourceRange();"}}
},
},
["warn_completion_handler_called_twice"]={
["warn_completion_handler_called_twice"]={
Line 7,985: Line 7,985:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{I,1504,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{I,1542,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
[j]={{I,1689,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_called_twice : diag::warn_called_once_gets_called_twice;"},{I,1757,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
},
},
["warn_completion_handler_never_called"]={
["warn_completion_handler_never_called"]={
Line 8,000: Line 8,000:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{I,1510,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1527,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1542,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
[j]={{I,1699,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1729,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleCapturedNeverCalled(const ParmVarDecl *Parameter, const Decl *Where, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called : diag::warn_called_once_never_called;"},{I,1755,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
},
},
["warn_completion_handler_never_called_when"]={
["warn_completion_handler_never_called_when"]={
Line 8,015: Line 8,015:
[e]=k,
[e]=k,
[i]={pb,1590001902,ob},
[i]={pb,1590001902,ob},
[j]={{I,1515,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{I,1542,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
[j]={{I,1710,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleNeverCalled(const ParmVarDecl *Parameter, const Decl *Function, const Stmt *Where, NeverCalledReason Reason, bool IsCalledDirectly, bool IsCompletionHandler) override {\n    auto DiagToReport = IsCompletionHandler ? diag::warn_completion_handler_never_called_when : diag::warn_called_once_never_called_when;"},{I,1756,"constexpr unsigned CompletionHandlerWarnings[]{diag::warn_completion_handler_never_called, diag::warn_completion_handler_never_called_when, diag::warn_completion_handler_called_twice};"}}
},
},
["warn_compound_token_split_by_macro"]={
["warn_compound_token_split_by_macro"]={
Line 8,029: Line 8,029:
[e]=Q,
[e]=Q,
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[j]={{"clang/lib/Parse/Parser.cpp",214,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // If either token is in a macro, we expect both tokens to come from the same\n  // macro expansion.\n  if ((FirstTokLoc.isMacroID() || SecondTokLoc.isMacroID()) && PP.getSourceManager().getFileID(FirstTokLoc) != PP.getSourceManager().getFileID(SecondTokLoc)) {\n    Diag(FirstTokLoc, diag::warn_compound_token_split_by_macro) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc);"}}
[j]={{"clang/lib/Parse/Parser.cpp",243,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // If either token is in a macro, we expect both tokens to come from the same\n  // macro expansion.\n  if ((FirstTokLoc.isMacroID() || SecondTokLoc.isMacroID()) && PP.getSourceManager().getFileID(FirstTokLoc) != PP.getSourceManager().getFileID(SecondTokLoc)) {\n    Diag(FirstTokLoc, diag::warn_compound_token_split_by_macro) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc);"}}
},
},
["warn_compound_token_split_by_whitespace"]={
["warn_compound_token_split_by_whitespace"]={
Line 8,044: Line 8,044:
[e]=Q,
[e]=Q,
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[j]={{"clang/lib/Parse/Parser.cpp",224,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // We expect the tokens to abut.\n  if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n    Diag(SpaceLoc, diag::warn_compound_token_split_by_whitespace) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc, SecondTokLoc);"}}
[j]={{"clang/lib/Parse/Parser.cpp",257,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // We expect the tokens to abut.\n  if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n    Diag(SpaceLoc, diag::warn_compound_token_split_by_whitespace) << (FirstTokKind == Tok.getKind()) << FirstTokKind << Tok.getKind() << static_cast<int>(Op) << SourceRange(FirstTokLoc, SecondTokLoc);"}}
},
},
["warn_concatenated_literal_array_init"]={
["warn_concatenated_literal_array_init"]={
Line 8,059: Line 8,059:
[e]=k,
[e]=k,
[i]={eb,1582847864,cb},
[i]={eb,1582847864,cb},
[j]={{v,12364,"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]={{v,14154,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (!var->getType()->isStructureType() && var->hasInit() && isa<InitListExpr>(var->getInit())) {\n    if (NumInits > 2)\n      for (unsigned I = 0; I < NumInits; ++I) {\n        // Diagnose missing comma in string array initialization.\n        // Do not warn when all the elements in the initializer are concatenated\n        // together. Do not warn for macros too.\n        if (NumConcat == 2 && !SL->getBeginLoc().isMacroID()) {\n          if (OnlyOneMissingComma) {\n            Diag(SL->getStrTokenLoc(1), diag::warn_concatenated_literal_array_init) << Hints;"}}
},
},
["warn_concatenated_nsarray_literal"]={
["warn_concatenated_nsarray_literal"]={
Line 8,073: Line 8,073:
[e]=k,
[e]=k,
[i]={"a802c3526bc8",1376437495,"ObjectiveC [QoI] issue warning if an element of an nsarray"},
[i]={"a802c3526bc8",1376437495,"ObjectiveC [QoI] issue warning if an element of an nsarray"},
[j]={{nb,421,"/// 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]={{nb,488,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  if (ArrayLiteral)\n    if (ObjCStringLiteral *getString = dyn_cast<ObjCStringLiteral>(OrigElement)) {\n      if (StringLiteral *SL = getString->getString()) {\n        if (numConcat > 1) {\n          if (!hasMacro)\n            S.Diag(Element->getBeginLoc(), diag::warn_concatenated_nsarray_literal) << Element->getType();"}}
},
},
["warn_condition_is_assignment"]={
["warn_condition_is_assignment"]={
Line 8,087: Line 8,087:
[e]=k,
[e]=k,
[i]={"d5707abdfdd5",1255384747,"Implement -Wparentheses:  warn about using assignments in contexts that require"},
[i]={"d5707abdfdd5",1255384747,"Implement -Wparentheses:  warn about using assignments in contexts that require"},
[j]={{C,18101,"// 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]={{C,20853,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  unsigned diagnostic = diag::warn_condition_is_assignment;"}}
},
},
["warn_condition_is_idiomatic_assignment"]={
["warn_condition_is_idiomatic_assignment"]={
Line 8,102: Line 8,102:
[e]=k,
[e]=k,
[i]={"b0e419e34dc0",1257984365,"Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,"},
[i]={"b0e419e34dc0",1257984365,"Add <foo> = [<bar> nextObject] to the -Widiomatic-parentheses category,"},
[j]={{C,18116,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"},{C,18120,"// 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]={{C,20857,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"},{C,20878,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) {\n    // Greylist some idioms by putting them into a warning subcategory.\n    if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) {\n      // self = [<foo> init...]\n      if (isSelfExpr(Op->getLHS()) && ME->getMethodFamily() == OMF_init)\n      // <foo> = [<bar> nextObject]\n      else if (Sel.isUnarySelector() && Sel.getNameForSlot(0) == \"nextObject\")\n        diagnostic = diag::warn_condition_is_idiomatic_assignment;"}}
},
},
["warn_conditional_mixed_enum_types"]={
["warn_conditional_mixed_enum_types"]={
Line 8,117: Line 8,117:
[e]=Vb,
[e]=Vb,
[i]={Mb,1567434909,Lb},
[i]={Mb,1567434909,Lb},
[j]={{C,1327,"/// 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]={{C,1523,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_conditional_mixed_enum_types_cxx20 : diag::warn_conditional_mixed_enum_types;"}}
},
},
["warn_conditional_mixed_enum_types_cxx20"]={
["warn_conditional_mixed_enum_types_cxx20"]={
Line 8,131: Line 8,131:
[e]=Ib,
[e]=Ib,
[i]={ib,1576908663,jb},
[i]={ib,1576908663,jb},
[j]={{C,1327,"/// 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]={{C,1522,"/// Check that the usual arithmetic conversions can be performed on this pair of\n/// expressions that might be of enumeration type.\nstatic void checkEnumArithmeticConversions(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc, Sema::ArithConvKind ACK) {\n  if ((!IsCompAssign && LEnum && R->isFloatingType()) || (REnum && L->isFloatingType())) {\n  } else if (!IsCompAssign && LEnum && REnum && !S.Context.hasSameUnqualifiedType(L, R)) {\n    if (!L->castAs<EnumType>()->getDecl()->hasNameForLinkage() || !R->castAs<EnumType>()->getDecl()->hasNameForLinkage()) {\n    } else if (ACK == Sema::ACK_Conditional) {\n      DiagID = S.getLangOpts().CPlusPlus20 ? diag::warn_conditional_mixed_enum_types_cxx20 : diag::warn_conditional_mixed_enum_types;"}}
},
},
["warn_conflicting_nullability_attr_overriding_param_types"]={
["warn_conflicting_nullability_attr_overriding_param_types"]={
Line 8,145: Line 8,145:
[e]="Nullability Issue",
[e]="Nullability Issue",
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[j]={{B,1967,"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]={{B,2460,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(ImplTy, IfaceTy, true)) {\n    S.Diag(ImplVar->getLocation(), diag::warn_conflicting_nullability_attr_overriding_param_types) << DiagNullabilityKind(*ImplTy->getNullability(), ((ImplVar->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*IfaceTy->getNullability(), ((IfaceVar->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}}
},
},
["warn_conflicting_nullability_attr_overriding_ret_types"]={
["warn_conflicting_nullability_attr_overriding_ret_types"]={
Line 8,159: Line 8,159:
[e]="Nullability Issue",
[e]="Nullability Issue",
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[j]={{B,1921,"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]={{B,2376,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (Warn && IsOverridingMode && !isa<ObjCImplementationDecl>(MethodImpl->getDeclContext()) && !S.Context.hasSameNullabilityTypeQualifier(MethodImpl->getReturnType(), MethodDecl->getReturnType(), false)) {\n    S.Diag(MethodImpl->getLocation(), diag::warn_conflicting_nullability_attr_overriding_ret_types) << DiagNullabilityKind(nullabilityMethodImpl, ((MethodImpl->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(nullabilityMethodDecl, ((MethodDecl->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}}
},
},
["warn_conflicting_overriding_param_modifiers"]={
["warn_conflicting_overriding_param_modifiers"]={
Line 8,174: Line 8,174:
[e]=k,
[e]=k,
[i]={Cc,1312996590,Bc},
[i]={Cc,1312996590,Bc},
[j]={{B,1956,"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]={{B,2440,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(ImplVar->getObjCDeclQualifier(), IfaceVar->getObjCDeclQualifier())) {\n    if (Warn) {\n      if (IsOverridingMode)\n        S.Diag(ImplVar->getLocation(), diag::warn_conflicting_overriding_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}}
},
},
["warn_conflicting_overriding_param_types"]={
["warn_conflicting_overriding_param_types"]={
Line 8,189: Line 8,189:
[e]=k,
[e]=k,
[i]={Cc,1312996590,Bc},
[i]={Cc,1312996590,Bc},
[j]={{B,1975,"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]={{B,2475,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}}
},
},
["warn_conflicting_overriding_ret_type_modifiers"]={
["warn_conflicting_overriding_ret_type_modifiers"]={
Line 8,204: Line 8,204:
[e]=k,
[e]=k,
[i]={Cc,1312996590,Bc},
[i]={Cc,1312996590,Bc},
[j]={{B,1913,"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]={{B,2358,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(MethodDecl->getObjCDeclQualifier(), MethodImpl->getObjCDeclQualifier())) {\n    if (Warn) {\n      S.Diag(MethodImpl->getLocation(), (IsOverridingMode ? diag::warn_conflicting_overriding_ret_type_modifiers : diag::warn_conflicting_ret_type_modifiers)) << MethodImpl->getDeclName() << MethodImpl->getReturnTypeSourceRange();"}}
},
},
["warn_conflicting_overriding_ret_types"]={
["warn_conflicting_overriding_ret_types"]={
Line 8,219: Line 8,219:
[e]=k,
[e]=k,
[i]={Cc,1312996590,Bc},
[i]={Cc,1312996590,Bc},
[j]={{B,1930,"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]={{B,2393,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}}
},
},
["warn_conflicting_overriding_variadic"]={
["warn_conflicting_overriding_variadic"]={
Line 8,234: Line 8,234:
[e]=k,
[e]=k,
[i]={Cc,1312996590,Bc},
[i]={Cc,1312996590,Bc},
[j]={{B,2104,"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]={{B,2623,"void Sema::CheckConflictingOverridingMethod(ObjCMethodDecl *Method, ObjCMethodDecl *Overridden, bool IsProtocolMethodDecl) {\n  if (Method->isVariadic() != Overridden->isVariadic()) {\n    Diag(Method->getLocation(), diag::warn_conflicting_overriding_variadic);"}}
},
},
["warn_conflicting_param_modifiers"]={
["warn_conflicting_param_modifiers"]={
Line 8,248: Line 8,248:
[e]=k,
[e]=k,
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[j]={{B,1958,"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]={{B,2444,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(ImplVar->getObjCDeclQualifier(), IfaceVar->getObjCDeclQualifier())) {\n    if (Warn) {\n      if (IsOverridingMode)\n      else\n        S.Diag(ImplVar->getLocation(), diag::warn_conflicting_param_modifiers) << getTypeRange(ImplVar->getTypeSourceInfo()) << MethodImpl->getDeclName();"}}
},
},
["warn_conflicting_param_types"]={
["warn_conflicting_param_types"]={
Line 8,262: Line 8,262:
[e]=k,
[e]=k,
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[j]={{B,1975,"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]={{B,2476,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_param_types : diag::warn_conflicting_param_types;"}}
},
},
["warn_conflicting_ret_type_modifiers"]={
["warn_conflicting_ret_type_modifiers"]={
Line 8,276: Line 8,276:
[e]=k,
[e]=k,
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[i]={"d7b0cb538813",1298332155,"Warn when type modifiers on objc method declarations in"},
[j]={{B,1913,"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]={{B,2359,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  if (IsProtocolMethodDecl && objcModifiersConflict(MethodDecl->getObjCDeclQualifier(), MethodImpl->getObjCDeclQualifier())) {\n    if (Warn) {\n      S.Diag(MethodImpl->getLocation(), (IsOverridingMode ? diag::warn_conflicting_overriding_ret_type_modifiers : diag::warn_conflicting_ret_type_modifiers)) << MethodImpl->getDeclName() << MethodImpl->getReturnTypeSourceRange();"}}
},
},
["warn_conflicting_ret_types"]={
["warn_conflicting_ret_types"]={
Line 8,290: Line 8,290:
[e]=k,
[e]=k,
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[i]={"67f35b051b60",1239479922,"improve the \'conflicting types\' diagnostics to include correct location info, now"},
[j]={{B,1930,"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]={{B,2394,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n  unsigned DiagID = IsOverridingMode ? diag::warn_conflicting_overriding_ret_types : diag::warn_conflicting_ret_types;"}}
},
},
["warn_conflicting_variadic"]={
["warn_conflicting_variadic"]={
Line 8,302: Line 8,302:
[e]=k,
[e]=k,
[i]={"5981b04718ca",1274484538,"Clang missing warning about conflicting declaration vs. definition "},
[i]={"5981b04718ca",1274484538,"Clang missing warning about conflicting declaration vs. definition "},
[j]={{B,2090,"void Sema::WarnConflictingTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (ImpMethodDecl->isVariadic() != MethodDecl->isVariadic()) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_conflicting_variadic);"}}
[j]={{B,2600,"void Sema::WarnConflictingTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (ImpMethodDecl->isVariadic() != MethodDecl->isVariadic()) {\n    Diag(ImpMethodDecl->getLocation(), diag::warn_conflicting_variadic);"}}
},
},
["warn_consteval_if_always_true"]={
["warn_consteval_if_always_true"]={
Line 8,316: Line 8,316:
[e]=k,
[e]=k,
[i]={Gb,1615397021,Cb},
[i]={Gb,1615397021,Cb},
[j]={{O,831,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval) {\n    if (isUnevaluatedContext() || Immediate)\n      Diags.Report(IfLoc, diag::warn_consteval_if_always_true) << Immediate;"}}
[j]={{O,946,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval) {\n    if (isUnevaluatedContext() || Immediate)\n      Diags.Report(IfLoc, diag::warn_consteval_if_always_true) << Immediate;"}}
},
},
["warn_constexpr_unscoped_enum_out_of_range"]={
["warn_constexpr_unscoped_enum_out_of_range"]={
Line 8,330: Line 8,330:
[e]=l,
[e]=l,
[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs"},
[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs"},
[j]={{"clang/lib/AST/ExprConstant.cpp",12288,"/// 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",12290,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n        else if (!ED->getNumNegativeBits() && ConstexprVar && Max.ult(Result.getInt().getZExtValue()))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getZExtValue() << Max.getZExtValue() << ED;"}}
[j]={{"clang/lib/AST/ExprConstant.cpp",13778,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getSExtValue() << Max.getSExtValue() << ED;"},{"clang/lib/AST/ExprConstant.cpp",13784,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralCast: {\n    if (Info.Ctx.getLangOpts().CPlusPlus && Info.InConstantContext && Info.EvalMode == EvalInfo::EM_ConstantExpression && DestType->isEnumeralType()) {\n      // Check that the value is within the range of the enumeration values.\n      //\n      // This corressponds to [expr.static.cast]p10 which says:\n      // A value of integral or enumeration type can be explicitly converted\n      // to a complete enumeration type ... If the enumeration type does not\n      // have a fixed underlying type, the value is unchanged if the original\n      // value is within the range of the enumeration values ([dcl.enum]), and\n      // otherwise, the behavior is undefined.\n      //\n      // This was resolved as part of DR2338 which has CD5 status.\n      if (!ED->isFixed()) {\n        if (ED->getNumNegativeBits() && ConstexprVar && (Max.slt(Result.getInt().getSExtValue()) || Min.sgt(Result.getInt().getSExtValue())))\n        else if (!ED->getNumNegativeBits() && ConstexprVar && Max.ult(Result.getInt().getZExtValue()))\n          Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_constexpr_unscoped_enum_out_of_range) << llvm::toString(Result.getInt(), 10) << Min.getZExtValue() << Max.getZExtValue() << ED;"}}
},
},
["warn_conv_to_base_not_used"]={
["warn_conv_to_base_not_used"]={
Line 8,344: Line 8,344:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{y,9607,"/// 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]={{y,11177,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  else if (Conversion->size_overridden_methods() != 0)\n  else if (ConvType->isRecordType()) {\n    if (ConvType == ClassType)\n    else if (IsDerivedFrom(Conversion->getLocation(), ClassType, ConvType))\n      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used) << ClassType << ConvType;"}}
},
},
["warn_conv_to_self_not_used"]={
["warn_conv_to_self_not_used"]={
Line 8,358: Line 8,358:
[e]=k,
[e]=k,
[i]={X,1237025389,W},
[i]={X,1237025389,W},
[j]={{y,9605,"/// 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]={{y,11174,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  else if (Conversion->size_overridden_methods() != 0)\n  else if (ConvType->isRecordType()) {\n    if (ConvType == ClassType)\n      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used) << ClassType;"}}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu